summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Annex/AutoMerge.hs2
-rw-r--r--Annex/Content.hs26
-rw-r--r--Annex/Content/Direct.hs2
-rw-r--r--Annex/Difference.hs4
-rw-r--r--Annex/DirHashes.hs2
-rw-r--r--Annex/FileMatcher.hs4
-rw-r--r--Annex/Init.hs10
-rw-r--r--Annex/MetaData.hs4
-rw-r--r--Annex/Notification.hs2
-rw-r--r--Annex/View.hs2
-rw-r--r--Assistant.hs1
-rw-r--r--Assistant/Pairing.hs2
-rw-r--r--Assistant/Pairing/Network.hs8
-rw-r--r--Assistant/Threads/Committer.hs2
-rw-r--r--Assistant/Threads/PairListener.hs2
-rw-r--r--Assistant/Threads/XMPPPusher.hs3
-rw-r--r--Assistant/WebApp/Configurators/Pairing.hs4
-rw-r--r--Build/Configure.hs15
-rw-r--r--Build/NullSoftInstaller.hs25
-rw-r--r--Build/Version.hs3
-rwxr-xr-xBuild/mdwn2man1
-rw-r--r--CHANGELOG36
-rw-r--r--CmdLine/GitAnnex.hs2
-rw-r--r--Command/ContentLocation.hs1
-rw-r--r--Command/Fsck.hs46
-rw-r--r--Command/GroupWanted.hs24
-rw-r--r--Command/Info.hs124
-rw-r--r--Command/Required.hs17
-rw-r--r--Command/Wanted.hs56
-rw-r--r--Command/WebApp.hs4
-rw-r--r--Config/NumCopies.hs11
-rw-r--r--Creds.hs4
-rw-r--r--Crypto.hs4
-rw-r--r--Database/Fsck.hs2
-rw-r--r--Git.hs6
-rw-r--r--Git/CatFile.hs2
-rw-r--r--Git/DiffTree.hs4
-rw-r--r--Git/LsFiles.hs13
-rw-r--r--Git/Remote/Remove.hs2
-rw-r--r--Git/UnionMerge.hs6
-rw-r--r--Locations.hs2
-rw-r--r--Logs/Activity.hs2
-rw-r--r--Remote.hs7
-rw-r--r--Remote/BitTorrent.hs2
-rw-r--r--Remote/Directory.hs10
-rw-r--r--Remote/GCrypt.hs2
-rw-r--r--Remote/Git.hs20
-rw-r--r--Remote/Helper/Chunked.hs2
-rw-r--r--Test.hs6
-rw-r--r--Types/Crypto.hs27
-rw-r--r--Types/Difference.hs4
-rw-r--r--Types/Distribution.hs2
-rw-r--r--Types/Remote.hs3
-rw-r--r--Utility/CopyFile.hs7
-rw-r--r--Utility/DataUnits.hs1
-rw-r--r--Utility/DirWatcher.hs10
-rw-r--r--Utility/Directory.hs2
-rw-r--r--Utility/FileMode.hs2
-rw-r--r--Utility/Hash.hs41
-rw-r--r--Utility/Metered.hs2
-rw-r--r--Utility/Path.hs9
-rw-r--r--Utility/Touch.hsc6
-rw-r--r--Utility/Verifiable.hs11
-rw-r--r--build.bat2
-rw-r--r--debian/changelog36
-rw-r--r--debian/control3
-rwxr-xr-xdebian/create-standalone-changelog17
-rw-r--r--debian/patches/series.standalone-build1
-rw-r--r--debian/patches/standalone-build72
-rwxr-xr-xdebian/rules10
-rw-r--r--doc/bugs/Can__39__t_get_content_from_S3_with_s3-aws_library.mdwn57
-rw-r--r--doc/bugs/Proxy_support.mdwn23
-rw-r--r--doc/bugs/addurl_+_sync_vs_addurl_+_commit.mdwn24
-rw-r--r--doc/bugs/addurl_magnet_could_not_download_torrent_file.mdwn49
-rw-r--r--doc/bugs/encryption__61__none_doesn__39__t_work_with_enableremote.mdwn2
-rw-r--r--doc/bugs/false_positives_from_fsck_in_bare_repo.mdwn2
-rw-r--r--doc/bugs/fsck_reports_unsolvable_problem.mdwn20
-rw-r--r--doc/bugs/git-annex-shell_doesn__39__t_work_as_expected.mdwn2
-rw-r--r--doc/bugs/git-annex_unused_--from_s3_doesn__39__t.mdwn2
-rw-r--r--doc/bugs/list-tests_runs_tests.mdwn (renamed from doc/bugs/--list-tests_runs_tests.mdwn)0
-rw-r--r--doc/devblog/day_274__concurrent_annex_state.mdwn42
-rw-r--r--doc/devblog/day_275-276__mostly_Windows.mdwn20
-rw-r--r--doc/devblog/day_277__thanks.mdwn20
-rw-r--r--doc/forum/Cant_see_git-annex-shell_via_SSH_in_OSX.mdwn119
-rw-r--r--doc/forum/How_do_I_hide_files_not_present_in_the_local_annex__63__.mdwn2
-rw-r--r--doc/forum/__34__git_annex_sync__34___synced_after_8_hours.mdwn40
-rw-r--r--doc/forum/ga-ncdu/comment_3_c5ce3b663de76b50754de70b3fb23bf0._comment15
-rw-r--r--doc/git-annex-expire.mdwn2
-rw-r--r--doc/git-annex-fromkey.mdwn2
-rw-r--r--doc/git-annex-info.mdwn4
-rw-r--r--doc/git-annex-lock.mdwn2
-rw-r--r--doc/git-annex-preferred-content.mdwn9
-rw-r--r--doc/git-annex-readpresentkey.mdwn2
-rw-r--r--doc/git-annex-required.mdwn29
-rw-r--r--doc/git-annex-shell.mdwn2
-rw-r--r--doc/git-annex.mdwn8
-rw-r--r--doc/git-union-merge.mdwn2
-rw-r--r--doc/install/Windows.mdwn5
-rw-r--r--doc/news/version_5.20150317.mdwn45
-rw-r--r--doc/news/version_5.20150420.mdwn33
-rw-r--r--doc/preferred_content.mdwn6
-rw-r--r--doc/privacy.mdwn2
-rw-r--r--doc/related_software.mdwn4
-rw-r--r--doc/required_content.mdwn3
-rw-r--r--doc/tips/Synology_NAS_and_git_annex.mdwn2
-rw-r--r--doc/tips/file_manager_integration.mdwn8
-rw-r--r--doc/tips/megaannex.mdwn2
-rw-r--r--doc/tips/using_gitolite_with_git-annex.mdwn2
-rw-r--r--doc/tips/using_the_web_as_a_special_remote.mdwn2
-rw-r--r--doc/todo/addurl___8211__force-torrent_option.mdwn1
-rw-r--r--doc/todo/command_line_interface_for_required_content_setthings.mdwn2
-rw-r--r--doc/todo/git-annex-standalone_Debian_package.mdwn3
-rw-r--r--doc/transferring_data.mdwn2
-rw-r--r--doc/trust.mdwn4
-rw-r--r--doc/upgrades.mdwn4
-rw-r--r--git-annex.cabal8
-rw-r--r--man/git-annex-add.16
-rw-r--r--man/git-annex-addunused.14
-rw-r--r--man/git-annex-addurl.14
-rw-r--r--man/git-annex-assistant.110
-rw-r--r--man/git-annex-checkpresentkey.14
-rw-r--r--man/git-annex-contentlocation.16
-rw-r--r--man/git-annex-copy.112
-rw-r--r--man/git-annex-dead.14
-rw-r--r--man/git-annex-describe.18
-rw-r--r--man/git-annex-diffdriver.18
-rw-r--r--man/git-annex-direct.14
-rw-r--r--man/git-annex-drop.112
-rw-r--r--man/git-annex-dropkey.14
-rw-r--r--man/git-annex-dropunused.16
-rw-r--r--man/git-annex-edit.14
-rw-r--r--man/git-annex-enableremote.14
-rw-r--r--man/git-annex-examinekey.16
-rw-r--r--man/git-annex-expire.116
-rw-r--r--man/git-annex-find.18
-rw-r--r--man/git-annex-findref.18
-rw-r--r--man/git-annex-fix.16
-rw-r--r--man/git-annex-forget.114
-rw-r--r--man/git-annex-fromkey.18
-rw-r--r--man/git-annex-fsck.110
-rw-r--r--man/git-annex-fuzztest.14
-rw-r--r--man/git-annex-get.116
-rw-r--r--man/git-annex-group.16
-rw-r--r--man/git-annex-groupwanted.14
-rw-r--r--man/git-annex-import.110
-rw-r--r--man/git-annex-importfeed.16
-rw-r--r--man/git-annex-indirect.16
-rw-r--r--man/git-annex-info.111
-rw-r--r--man/git-annex-init.16
-rw-r--r--man/git-annex-initremote.18
-rw-r--r--man/git-annex-list.16
-rw-r--r--man/git-annex-lock.16
-rw-r--r--man/git-annex-log.16
-rw-r--r--man/git-annex-lookupkey.16
-rw-r--r--man/git-annex-map.16
-rw-r--r--man/git-annex-matching-options.120
-rw-r--r--man/git-annex-merge.14
-rw-r--r--man/git-annex-metadata.18
-rw-r--r--man/git-annex-migrate.16
-rw-r--r--man/git-annex-mirror.18
-rw-r--r--man/git-annex-move.110
-rw-r--r--man/git-annex-numcopies.18
-rw-r--r--man/git-annex-pre-commit.14
-rw-r--r--man/git-annex-preferred-content.127
-rw-r--r--man/git-annex-proxy.16
-rw-r--r--man/git-annex-readpresentkey.18
-rw-r--r--man/git-annex-registerurl.14
-rw-r--r--man/git-annex-reinit.14
-rw-r--r--man/git-annex-reinject.14
-rw-r--r--man/git-annex-rekey.14
-rw-r--r--man/git-annex-remotedaemon.112
-rw-r--r--man/git-annex-repair.112
-rw-r--r--man/git-annex-required.126
-rw-r--r--man/git-annex-resolvemerge.14
-rw-r--r--man/git-annex-rmurl.14
-rw-r--r--man/git-annex-schedule.18
-rw-r--r--man/git-annex-semitrust.14
-rw-r--r--man/git-annex-setpresentkey.16
-rw-r--r--man/git-annex-shell.132
-rw-r--r--man/git-annex-status.16
-rw-r--r--man/git-annex-sync.18
-rw-r--r--man/git-annex-test.18
-rw-r--r--man/git-annex-testremote.14
-rw-r--r--man/git-annex-transferkey.14
-rw-r--r--man/git-annex-transferkeys.16
-rw-r--r--man/git-annex-trust.14
-rw-r--r--man/git-annex-unannex.16
-rw-r--r--man/git-annex-undo.14
-rw-r--r--man/git-annex-ungroup.14
-rw-r--r--man/git-annex-uninit.18
-rw-r--r--man/git-annex-unlock.16
-rw-r--r--man/git-annex-untrust.14
-rw-r--r--man/git-annex-unused.16
-rw-r--r--man/git-annex-upgrade.114
-rw-r--r--man/git-annex-vadd.112
-rw-r--r--man/git-annex-vcycle.112
-rw-r--r--man/git-annex-version.114
-rw-r--r--man/git-annex-vfilter.112
-rw-r--r--man/git-annex-vicfg.18
-rw-r--r--man/git-annex-view.114
-rw-r--r--man/git-annex-vpop.112
-rw-r--r--man/git-annex-wanted.16
-rw-r--r--man/git-annex-watch.14
-rw-r--r--man/git-annex-webapp.18
-rw-r--r--man/git-annex-whereis.18
-rw-r--r--man/git-annex-xmppgit.16
-rw-r--r--man/git-annex.1321
-rw-r--r--standalone/android/cabal.config5
-rw-r--r--standalone/linux/cabal.config5
-rwxr-xr-xstandalone/linux/skel/runshell22
-rwxr-xr-xstandalone/osx/git-annex.app/Contents/MacOS/runshell22
-rwxr-xr-xstandalone/windows/build.sh8
212 files changed, 1712 insertions, 843 deletions
diff --git a/Annex/AutoMerge.hs b/Annex/AutoMerge.hs
index f0f183d..5ffa7b0 100644
--- a/Annex/AutoMerge.hs
+++ b/Annex/AutoMerge.hs
@@ -37,7 +37,7 @@ import qualified Data.Set as S
- Callers should use Git.Branch.changed first, to make sure that
- there are changed from the current branch to the branch being merged in.
-}
-autoMergeFrom :: Git.Ref -> (Maybe Git.Ref) -> Git.Branch.CommitMode -> Annex Bool
+autoMergeFrom :: Git.Ref -> Maybe Git.Ref -> Git.Branch.CommitMode -> Annex Bool
autoMergeFrom branch currbranch commitmode = do
showOutput
case currbranch of
diff --git a/Annex/Content.hs b/Annex/Content.hs
index 1705022..bbf8788 100644
--- a/Annex/Content.hs
+++ b/Annex/Content.hs
@@ -280,17 +280,19 @@ withTmp key action = do
{- Checks that there is disk space available to store a given key,
- in a destination (or the annex) printing a warning if not. -}
checkDiskSpace :: Maybe FilePath -> Key -> Integer -> Annex Bool
-checkDiskSpace destination key alreadythere = do
- reserve <- annexDiskReserve <$> Annex.getGitConfig
- free <- liftIO . getDiskFree =<< dir
- force <- Annex.getState Annex.force
- case (free, keySize key) of
- (Just have, Just need) -> do
- let ok = (need + reserve <= have + alreadythere) || force
- unless ok $
- needmorespace (need + reserve - have - alreadythere)
- return ok
- _ -> return True
+checkDiskSpace destination key alreadythere = ifM (Annex.getState Annex.force)
+ ( return True
+ , do
+ reserve <- annexDiskReserve <$> Annex.getGitConfig
+ free <- liftIO . getDiskFree =<< dir
+ case (free, fromMaybe 1 (keySize key)) of
+ (Just have, need) -> do
+ let ok = (need + reserve <= have + alreadythere)
+ unless ok $
+ needmorespace (need + reserve - have - alreadythere)
+ return ok
+ _ -> return True
+ )
where
dir = maybe (fromRepo gitAnnexDir) return destination
needmorespace n =
@@ -538,7 +540,7 @@ getKeysPresent keyloc = do
-}
getstate direct = do
when direct $
- void $ inodesChanged
+ void inodesChanged
Annex.getState id
{- Things to do to record changes to content when shutting down.
diff --git a/Annex/Content/Direct.hs b/Annex/Content/Direct.hs
index e6a9b5e..86e053d 100644
--- a/Annex/Content/Direct.hs
+++ b/Annex/Content/Direct.hs
@@ -257,7 +257,7 @@ annexSentinalFile :: Annex SentinalFile
annexSentinalFile = do
sentinalfile <- fromRepo gitAnnexInodeSentinal
sentinalcachefile <- fromRepo gitAnnexInodeSentinalCache
- return $ SentinalFile
+ return SentinalFile
{ sentinalFile = sentinalfile
, sentinalCacheFile = sentinalcachefile
}
diff --git a/Annex/Difference.hs b/Annex/Difference.hs
index 66dc03a..e0dc17d 100644
--- a/Annex/Difference.hs
+++ b/Annex/Difference.hs
@@ -38,10 +38,10 @@ setDifferences = do
( do
oldds <- recordedDifferencesFor u
when (ds /= oldds) $
- warning $ "Cannot change tunable parameters in already initialized repository."
+ warning "Cannot change tunable parameters in already initialized repository."
return oldds
, if otherds == mempty
- then ifM (not . null . filter (/= u) . M.keys <$> uuidMap)
+ then ifM (any (/= u) . M.keys <$> uuidMap)
( do
warning "Cannot change tunable parameters in a clone of an existing repository."
return mempty
diff --git a/Annex/DirHashes.hs b/Annex/DirHashes.hs
index 0376935..91c3e78 100644
--- a/Annex/DirHashes.hs
+++ b/Annex/DirHashes.hs
@@ -46,7 +46,7 @@ configHashLevels d config
| otherwise = def
branchHashDir :: GitConfig -> Key -> String
-branchHashDir config key = hashDirLower (branchHashLevels config) key
+branchHashDir = hashDirLower . branchHashLevels
{- Two different directory hashes may be used. The mixed case hash
- came first, and is fine, except for the problem of case-strict
diff --git a/Annex/FileMatcher.hs b/Annex/FileMatcher.hs
index 0de4d83..9677e65 100644
--- a/Annex/FileMatcher.hs
+++ b/Annex/FileMatcher.hs
@@ -24,10 +24,10 @@ import Types.Remote (RemoteConfig)
import Data.Either
import qualified Data.Set as S
-checkFileMatcher :: (FileMatcher Annex) -> FilePath -> Annex Bool
+checkFileMatcher :: FileMatcher Annex -> FilePath -> Annex Bool
checkFileMatcher matcher file = checkMatcher matcher Nothing (Just file) S.empty True
-checkMatcher :: (FileMatcher Annex) -> Maybe Key -> AssociatedFile -> AssumeNotPresent -> Bool -> Annex Bool
+checkMatcher :: FileMatcher Annex -> Maybe Key -> AssociatedFile -> AssumeNotPresent -> Bool -> Annex Bool
checkMatcher matcher mkey afile notpresent d
| isEmpty matcher = return d
| otherwise = case (mkey, afile) of
diff --git a/Annex/Init.hs b/Annex/Init.hs
index 50f4d85..2cc1c18 100644
--- a/Annex/Init.hs
+++ b/Annex/Init.hs
@@ -57,15 +57,15 @@ genDescription Nothing = do
initialize :: Maybe String -> Annex ()
initialize mdescription = do
+ {- This will make the first commit to git, so ensure git is set up
+ - properly to allow commits when running it. -}
+ ensureCommit $ Annex.Branch.create
+
prepUUID
initialize'
u <- getUUID
- {- This will make the first commit to git, so ensure git is set up
- - properly to allow commits when running it. -}
- ensureCommit $ do
- Annex.Branch.create
- describeUUID u =<< genDescription mdescription
+ describeUUID u =<< genDescription mdescription
-- Everything except for uuid setup.
initialize' :: Annex ()
diff --git a/Annex/MetaData.hs b/Annex/MetaData.hs
index 3b776a6..0751bbb 100644
--- a/Annex/MetaData.hs
+++ b/Annex/MetaData.hs
@@ -36,7 +36,7 @@ import Data.Time.Clock.POSIX
-}
genMetaData :: Key -> FilePath -> FileStatus -> Annex ()
genMetaData key file status = do
- maybe noop (flip copyMetaData key) =<< catKeyFileHEAD file
+ maybe noop (`copyMetaData` key) =<< catKeyFileHEAD file
whenM (annexGenMetaData <$> Annex.getGitConfig) $ do
curr <- getCurrentMetaData key
addMetaData key (dateMetaData mtime curr)
@@ -52,4 +52,4 @@ dateMetaData mtime old = MetaData $ M.fromList $ filter isnew
]
where
isnew (f, _) = S.null (currentMetaDataValues f old)
- (y, m, _d) = toGregorian $ utctDay $ mtime
+ (y, m, _d) = toGregorian $ utctDay mtime
diff --git a/Annex/Notification.hs b/Annex/Notification.hs
index 25f1ee6..a7b757e 100644
--- a/Annex/Notification.hs
+++ b/Annex/Notification.hs
@@ -43,7 +43,7 @@ notifyTransfer direction (Just f) a = do
return ok
else a NotifyWitness
#else
-notifyTransfer _ (Just _) a = do a NotifyWitness
+notifyTransfer _ (Just _) a = a NotifyWitness
#endif
notifyDrop :: Maybe FilePath -> Bool -> Annex ()
diff --git a/Annex/View.hs b/Annex/View.hs
index 315cc7d..2b8a80e 100644
--- a/Annex/View.hs
+++ b/Annex/View.hs
@@ -314,7 +314,7 @@ getViewedFileMetaData = getDirMetaData . dirFromViewedFile . takeFileName
- branch for the view.
-}
applyView :: View -> Annex Git.Branch
-applyView view = applyView' viewedFileFromReference getWorkTreeMetaData view
+applyView = applyView' viewedFileFromReference getWorkTreeMetaData
{- Generates a new branch for a View, which must be a more narrow
- version of the View originally used to generate the currently
diff --git a/Assistant.hs b/Assistant.hs
index fb04f51..265827a 100644
--- a/Assistant.hs
+++ b/Assistant.hs
@@ -57,7 +57,6 @@ import Utility.LogFile
#ifdef mingw32_HOST_OS
import Utility.Env
import Annex.Path
-import Config.Files
import System.Environment (getArgs)
#endif
diff --git a/Assistant/Pairing.hs b/Assistant/Pairing.hs
index b24e5fd..2390379 100644
--- a/Assistant/Pairing.hs
+++ b/Assistant/Pairing.hs
@@ -81,6 +81,8 @@ data PairingInProgress = PairingInProgress
}
deriving (Show)
+data AddrClass = IPv4AddrClass | IPv6AddrClass
+
data SomeAddr = IPv4Addr HostAddress
{- My Android build of the Network library does not currently have IPV6
- support. -}
diff --git a/Assistant/Pairing/Network.hs b/Assistant/Pairing/Network.hs
index 7a4ac3f..694dcbb 100644
--- a/Assistant/Pairing/Network.hs
+++ b/Assistant/Pairing/Network.hs
@@ -33,9 +33,9 @@ pairingPort = 55556
{- Goal: Reach all hosts on the same network segment.
- Method: Use same address that avahi uses. Other broadcast addresses seem
- to not be let through some routers. -}
-multicastAddress :: SomeAddr -> HostName
-multicastAddress (IPv4Addr _) = "224.0.0.251"
-multicastAddress (IPv6Addr _) = "ff02::fb"
+multicastAddress :: AddrClass -> HostName
+multicastAddress IPv4AddrClass = "224.0.0.251"
+multicastAddress IPv6AddrClass = "ff02::fb"
{- Multicasts a message repeatedly on all interfaces, with a 2 second
- delay between each transmission. The message is repeated forever
@@ -62,7 +62,7 @@ multicastPairMsg repeats secret pairdata stage = go M.empty repeats
sendinterface cache i = void $ tryIO $
withSocketsDo $ bracket setup cleanup use
where
- setup = multicastSender (multicastAddress i) pairingPort
+ setup = multicastSender (multicastAddress IPv4AddrClass) pairingPort
cleanup (sock, _) = sClose sock -- FIXME does not work
use (sock, addr) = do
setInterface sock (showAddr i)
diff --git a/Assistant/Threads/Committer.hs b/Assistant/Threads/Committer.hs
index 717a99c..f4af932 100644
--- a/Assistant/Threads/Committer.hs
+++ b/Assistant/Threads/Committer.hs
@@ -196,7 +196,7 @@ maxCommitSize :: Int
maxCommitSize = 5000
{- Decide if now is a good time to make a commit.
- - Note that the list of changes has an undefined order.
+ - Note that the list of changes has a random order.
-
- Current strategy: If there have been 10 changes within the past second,
- a batch activity is taking place, so wait for later.
diff --git a/Assistant/Threads/PairListener.hs b/Assistant/Threads/PairListener.hs
index e4f8749..ba2ae95 100644
--- a/Assistant/Threads/PairListener.hs
+++ b/Assistant/Threads/PairListener.hs
@@ -31,7 +31,7 @@ pairListenerThread urlrenderer = namedThread "PairListener" $ do
where
{- Note this can crash if there's no network interface,
- or only one like lo that doesn't support multicast. -}
- getsock = multicastReceiver (multicastAddress $ IPv4Addr undefined) pairingPort
+ getsock = multicastReceiver (multicastAddress IPv4AddrClass) pairingPort
go reqs cache sock = liftIO (getmsg sock []) >>= \msg -> case readish msg of
Nothing -> go reqs cache sock
diff --git a/Assistant/Threads/XMPPPusher.hs b/Assistant/Threads/XMPPPusher.hs
index ec11b9b..bff1735 100644
--- a/Assistant/Threads/XMPPPusher.hs
+++ b/Assistant/Threads/XMPPPusher.hs
@@ -78,4 +78,5 @@ selectNextPush lastpushedto l = go [] l
(Pushing clientid _)
| Just clientid /= lastpushedto -> (m, rejected ++ ms)
_ -> go (m:rejected) ms
- go [] [] = undefined
+ go [] [] = error "empty push queue"
+
diff --git a/Assistant/WebApp/Configurators/Pairing.hs b/Assistant/WebApp/Configurators/Pairing.hs
index 8f07368..beaf57f 100644
--- a/Assistant/WebApp/Configurators/Pairing.hs
+++ b/Assistant/WebApp/Configurators/Pairing.hs
@@ -39,7 +39,7 @@ import Git
import qualified Data.Text as T
#ifdef WITH_PAIRING
import qualified Data.Text.Encoding as T
-import qualified Data.ByteString.Lazy as B
+import qualified Data.ByteString as B
import Data.Char
import qualified Control.Exception as E
import Control.Concurrent
@@ -304,7 +304,7 @@ secretProblem s
| otherwise = Nothing
toSecret :: Text -> Secret
-toSecret s = B.fromChunks [T.encodeUtf8 $ T.toLower $ T.filter isAlphaNum s]
+toSecret s = T.encodeUtf8 $ T.toLower $ T.filter isAlphaNum s
{- From Dickens -}
sampleQuote :: Text
diff --git a/Build/Configure.hs b/Build/Configure.hs
index 4498838..c90231b 100644
--- a/Build/Configure.hs
+++ b/Build/Configure.hs
@@ -94,12 +94,15 @@ getUpgradeLocation = do
return $ Config "upgradelocation" $ MaybeStringConfig e
getGitVersion :: Test
-getGitVersion = do
- v <- Git.Version.installed
- let oldestallowed = Git.Version.normalize "1.7.1.0"
- when (v < oldestallowed) $
- error $ "installed git version " ++ show v ++ " is too old! (Need " ++ show oldestallowed ++ " or newer)"
- return $ Config "gitversion" $ StringConfig $ show v
+getGitVersion = go =<< getEnv "FORCE_GIT_VERSION"
+ where
+ go (Just s) = return $ Config "gitversion" $ StringConfig s
+ go Nothing = do
+ v <- Git.Version.installed
+ let oldestallowed = Git.Version.normalize "1.7.1.0"
+ when (v < oldestallowed) $
+ error $ "installed git version " ++ show v ++ " is too old! (Need " ++ show oldestallowed ++ " or newer)"
+ return $ Config "gitversion" $ StringConfig $ show v
checkWgetQuietProgress :: Test
checkWgetQuietProgress = Config "wgetquietprogress" . BoolConfig
diff --git a/Build/NullSoftInstaller.hs b/Build/NullSoftInstaller.hs
index 846c8d6..bf0875e 100644
--- a/Build/NullSoftInstaller.hs
+++ b/Build/NullSoftInstaller.hs
@@ -85,8 +85,14 @@ uninstaller = "git-annex-uninstall.exe"
gitInstallDir :: Exp FilePath
gitInstallDir = fromString "$PROGRAMFILES\\Git"
+-- This intentionall has a different name than git-annex or
+-- git-annex-webapp, since it is itself treated as an executable file.
+-- Also, on XP, the filename is displayed, not the description.
startMenuItem :: Exp FilePath
-startMenuItem = "$SMPROGRAMS/git-annex.lnk"
+startMenuItem = "$SMPROGRAMS/Git Annex (Webapp).lnk"
+
+oldStartMenuItem :: Exp FilePath
+oldStartMenuItem = "$SMPROGRAMS/git-annex.lnk"
autoStartItem :: Exp FilePath
autoStartItem = "$SMSTARTUP/git-annex-autostart.lnk"
@@ -125,8 +131,9 @@ makeInstaller gitannex license htmlhelp extrabins launchers = nsis $ do
, StartOptions "SW_SHOWNORMAL"
, IconFile "$INSTDIR/cmd/git-annex.exe"
, IconIndex 2
- , Description "git-annex webapp"
+ , Description "Git Annex (Webapp)"
]
+ delete [RebootOK] $ oldStartMenuItem
createShortcut autoStartItem
[ Target "wscript.exe"
, Parameters "\"$INSTDIR/git-annex-autostart.vbs\""
@@ -184,22 +191,30 @@ cygwinDlls =
, "cygintl-8.dll"
, "cygwind-0.dll"
, "cyggssapi-3.dll"
+ , "cyggssapi_krb5-2.dll"
, "cygkrb5-26.dll"
, "cygz.dll"
, "cygidn-11.dll"
- , "libcurl-4.dll"
- , "cyggnutls-26.dll"
+ , "cyggnutls-28.dll"
, "libcrypto.dll"
, "libssl.dll"
, "cyggcrypt-11.dll"
, "cyggpg-error-0.dll"
, "cygp11-kit-0.dll"
- , "cygtasn1-3.dll"
, "cygffi-6.dll"
, "cygbz2-1.dll"
, "cygreadline7.dll"
, "cygncursesw-10.dll"
, "cygusb0.dll"
+ , "cyghogweed-2.dll"
+ , "cygk5crypto-3.dll"
+ , "cygkrb5support-0.dll"
+ , "cyggmp-10.dll"
+ , "cygkrb5-3.dll"
+ , "cygnettle-4.dll"
+ , "cygtasn1-6.dll"
+ , "cygpcre-1.dll"
+ , "cyguuid-1.dll"
]
-- msysgit opens Program Files/Git/doc/git/html/git-annex.html
diff --git a/Build/Version.hs b/Build/Version.hs
index da9d1bb..82cca03 100644
--- a/Build/Version.hs
+++ b/Build/Version.hs
@@ -67,3 +67,6 @@ cabalSetup cabalfile = do
| otherwise = s
where
fullfield = field ++ ": "
+
+main :: IO ()
+main = putStr =<< getVersion
diff --git a/Build/mdwn2man b/Build/mdwn2man
index a29ce64..7ad0d88 100755
--- a/Build/mdwn2man
+++ b/Build/mdwn2man
@@ -20,6 +20,7 @@ while (<>) {
s/^[ \n]+//;
s/^\t/ /;
s/-/\\-/g;
+ s/git\\-annex/git-annex/g;
s/^Warning:.*//g;
s/^$/.PP\n/;
s/^\*\s+(.*)/.IP "$1"/;
diff --git a/CHANGELOG b/CHANGELOG
index 0958e7d..eda96be 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,39 @@
+git-annex (5.20150420) unstable; urgency=medium
+
+ * Fix activity log parsing, which caused the log to not retain
+ activity from other uuids.
+ * Union merge could fall over if there was a file in the repository
+ with the same name as a git ref. Now fixed.
+ * info dir: Added information about repositories that
+ contain files in the specified directory.
+ * info: Added --bytes option.
+ * bittorrent: Fix handling of magnet links.
+ * When a key's size is unknown, still check the annex.diskreserve,
+ and avoid getting content if the disk is too full.
+ * Fix fsck --from a git remote in a local directory, and from
+ a directory special remote.
+ This was a reversion caused by the relative path changes in 5.20150113.
+ * fsck --from remote: When bad content is found in the remote,
+ and the local repo does not have a copy of the content, preserve
+ the bad content in .git/annex/bad/ to avoid further data loss.
+ * fsck --from remote: Avoid downloading a key if it would go over
+ the annex.diskreserve limit.
+ * required: New command, like wanted, but for required content.
+ * Removed dependency on haskell SHA library,
+ instead using cryptohash >= 0.11.0.
+ * Make repo init more robust.
+ * New debian/rules build-standalone target, which generates a
+ git-annex-standalone.deb that should work on many old Debian etc
+ systems. Thanks, Yaroslav Halchenko.
+ * Windows: Renamed start menu file to avoid loop in some versions
+ of Windows where the menu file is treated as a git-annex program.
+ * Windows: Fixed support of remotes on other drives.
+ (A reversion introduced in version 5.20150113.)
+ * Windows: Bundled versions of rsync, wget, ssh, and gpg from
+ cygwin all updated. Thanks, Yury V. Zaytsev.
+
+ -- Joey Hess <id@joeyh.name> Mon, 20 Apr 2015 14:44:04 -0400
+
git-annex (5.20150409) unstable; urgency=medium
* This fixes a bug in the assistant introduced by the literal pathspec
diff --git a/CmdLine/GitAnnex.hs b/CmdLine/GitAnnex.hs
index fde4e2d..326dd3b 100644
--- a/CmdLine/GitAnnex.hs
+++ b/CmdLine/GitAnnex.hs
@@ -74,6 +74,7 @@ import qualified Command.Dead
import qualified Command.Group
import qualified Command.Wanted
import qualified Command.GroupWanted
+import qualified Command.Required
import qualified Command.Schedule
import qualified Command.Ungroup
import qualified Command.Vicfg
@@ -149,6 +150,7 @@ cmds = concat
, Command.Group.cmd
, Command.Wanted.cmd
, Command.GroupWanted.cmd
+ , Command.Required.cmd
, Command.Schedule.cmd
, Command.Ungroup.cmd
, Command.Vicfg.cmd
diff --git a/Command/ContentLocation.hs b/Command/ContentLocation.hs
index 555f909..3f4775f 100644
--- a/Command/ContentLocation.hs
+++ b/Command/ContentLocation.hs
@@ -10,7 +10,6 @@ module Command.ContentLocation where
import Common.Annex
import Command
import Annex.Content
-import Types.Key
cmd :: [Command]
cmd = [noCommit $ noMessages $
diff --git a/Command/Fsck.hs b/Command/Fsck.hs
index 08753b6..39dba08 100644
--- a/Command/Fsck.hs
+++ b/Command/Fsck.hs
@@ -31,6 +31,7 @@ import Config
import Types.Key
import Types.CleanupActions
import Utility.HumanTime
+import Utility.CopyFile
import Git.FilePath
import Utility.PID
import qualified Database.Fsck as FsckDb
@@ -134,14 +135,16 @@ performRemote key file backend numcopies remote =
let cleanup = liftIO $ catchIO (removeFile tmp) (const noop)
cleanup
cleanup `after` a tmp
- getfile tmp =
- ifM (Remote.retrieveKeyFileCheap remote key tmp)
+ getfile tmp = ifM (checkDiskSpace (Just tmp) key 0)
+ ( ifM (Remote.retrieveKeyFileCheap remote key tmp)
( return True
, ifM (Annex.getState Annex.fast)
( return False
, Remote.retrieveKeyFile remote key Nothing tmp dummymeter
)
)
+ , return False
+ )
dummymeter _ = noop
startKey :: Incremental -> Key -> NumCopies -> CommandStart
@@ -273,7 +276,7 @@ checkKeySize key = ifM isDirect
checkKeySizeRemote :: Key -> Remote -> Maybe FilePath -> Annex Bool
checkKeySizeRemote _ _ Nothing = return True
checkKeySizeRemote key remote (Just file) =
- checkKeySizeOr (badContentRemote remote) key file
+ checkKeySizeOr (badContentRemote remote file) key file
checkKeySizeOr :: (Key -> Annex String) -> Key -> FilePath -> Annex Bool
checkKeySizeOr bad key file = case Types.Key.keySize key of
@@ -318,7 +321,7 @@ checkBackend backend key mfile = go =<< isDirect
checkBackendRemote :: Backend -> Key -> Remote -> Maybe FilePath -> Annex Bool
checkBackendRemote backend key remote = maybe (return True) go
where
- go = checkBackendOr (badContentRemote remote) backend key
+ go file = checkBackendOr (badContentRemote remote file) backend key file
checkBackendOr :: (Key -> Annex String) -> Backend -> Key -> FilePath -> Annex Bool
checkBackendOr bad backend key file =
@@ -380,13 +383,36 @@ badContentDirect file key = do
logStatus key InfoMissing
return "left in place for you to examine"
-badContentRemote :: Remote -> Key -> Annex String
-badContentRemote remote key = do
- ok <- Remote.removeKey remote key
- when ok $
+{- Bad content is dropped from the remote. We have downloaded a copy
+ - from the remote to a temp file already (in some cases, it's just a
+ - symlink to a file in the remote). To avoid any further data loss,
+ - that temp file is moved to the bad content directory unless
+ - the local annex has a copy of the content. -}
+badContentRemote :: Remote -> FilePath -> Key -> Annex String
+badContentRemote remote localcopy key = do
+ bad <- fromRepo gitAnnexBadDir
+ let destbad = bad </> key2file key
+ movedbad <- ifM (inAnnex key <||> liftIO (doesFileExist destbad))
+ ( return False
+ , do
+ createAnnexDirectory (parentDir destbad)
+ liftIO $ catchDefaultIO False $
+ ifM (isSymbolicLink <$> getSymbolicLinkStatus localcopy)
+ ( copyFileExternal CopyTimeStamps localcopy destbad
+ , do
+ moveFile localcopy destbad
+ return True
+ )
+ )
+
+ dropped <- Remote.removeKey remote key
+ when dropped $
Remote.logStatus remote key InfoMissing
- return $ (if ok then "dropped from " else "failed to drop from ")
- ++ Remote.name remote
+ return $ case (movedbad, dropped) of
+ (True, True) -> "moved from " ++ Remote.name remote ++
+ " to " ++ destbad
+ (False, True) -> "dropped from " ++ Remote.name remote
+ (_, False) -> "failed to drop from" ++ Remote.name remote
runFsck :: Incremental -> FilePath -> Key -> Annex Bool -> CommandStart
runFsck inc file key a = ifM (needFsck inc key)
diff --git a/Command/GroupWanted.hs b/Command/GroupWanted.hs
index 859a39c..5cdf785 100644
--- a/Command/GroupWanted.hs
+++ b/Command/GroupWanted.hs
@@ -8,13 +8,9 @@
module Command.GroupWanted where
import Common.Annex
-import qualified Annex
import Command
import Logs.PreferredContent
-import Types.Messages
-import Types.Group
-
-import qualified Data.Map as M
+import Command.Wanted (performGet, performSet)
cmd :: [Command]
cmd = [command "groupwanted" (paramPair paramGroup (paramOptional paramExpression)) seek
@@ -24,22 +20,8 @@ seek :: CommandSeek
seek = withWords start
start :: [String] -> CommandStart
-start (g:[]) = next $ performGet g
+start (g:[]) = next $ performGet groupPreferredContentMapRaw g
start (g:expr:[]) = do
showStart "groupwanted" g
- next $ performSet g expr
+ next $ performSet groupPreferredContentSet expr g
start _ = error "Specify a group."
-
-performGet :: Group -> CommandPerform
-performGet g = do
- Annex.setOutput QuietOutput
- m <- groupPreferredContentMapRaw
- liftIO $ putStrLn $ fromMaybe "" $ M.lookup g m
- next $ return True
-
-performSet :: Group -> String -> CommandPerform
-performSet g expr = case checkPreferredContentExpression expr of
- Just e -> error $ "Parse error: " ++ e
- Nothing -> do
- groupPreferredContentSet g expr
- next $ return True
diff --git a/Command/Info.hs b/Command/Info.hs
index db59530..b7cb323 100644
--- a/Command/Info.hs
+++ b/Command/Info.hs
@@ -10,7 +10,7 @@
module Command.Info where
import "mtl" Control.Monad.State.Strict
-import qualified Data.Map as M
+import qualified Data.Map.Strict as M
import Text.JSON
import Data.Tuple
import Data.Ord
@@ -66,7 +66,7 @@ instance Show Variance where
data StatInfo = StatInfo
{ presentData :: Maybe KeyData
, referencedData :: Maybe KeyData
- , remoteData :: M.Map UUID KeyData
+ , repoData :: M.Map UUID KeyData
, numCopiesStats :: Maybe NumCopiesStats
}
@@ -77,7 +77,7 @@ emptyStatInfo = StatInfo Nothing Nothing M.empty Nothing
type StatState = StateT StatInfo Annex
cmd :: [Command]
-cmd = [noCommit $ dontCheck repoExists $ withOptions (jsonOption : annexedMatchingOptions) $
+cmd = [noCommit $ dontCheck repoExists $ withOptions (jsonOption : bytesOption : annexedMatchingOptions) $
command "info" (paramOptional $ paramRepeating paramItem) seek SectionQuery
"shows information about the specified item or the repository as a whole"]
@@ -156,9 +156,9 @@ selStats fast_stats slow_stats = do
global_fast_stats :: [Stat]
global_fast_stats =
[ repository_mode
- , remote_list Trusted
- , remote_list SemiTrusted
- , remote_list UnTrusted
+ , repo_list Trusted
+ , repo_list SemiTrusted
+ , repo_list UnTrusted
, transfer_list
, disk_size
]
@@ -184,6 +184,7 @@ dir_fast_stats =
dir_slow_stats :: [FilePath -> Stat]
dir_slow_stats =
[ const numcopies_stats
+ , const reposizes_stats
]
file_stats :: FilePath -> Key -> [Stat]
@@ -245,8 +246,8 @@ repository_mode = simpleStat "repository mode" $ lift $
)
)
-remote_list :: TrustLevel -> Stat
-remote_list level = stat n $ nojson $ lift $ do
+repo_list :: TrustLevel -> Stat
+repo_list level = stat n $ nojson $ lift $ do
us <- filter (/= NoUUID) . M.keys
<$> (M.union <$> uuidMap <*> remoteMap Remote.name)
rs <- fst <$> trustPartition level us
@@ -290,7 +291,7 @@ local_annex_keys = stat "local annex keys" $ json show $
local_annex_size :: Stat
local_annex_size = simpleStat "local annex size" $
- showSizeKeys <$> cachedPresentData
+ lift . showSizeKeys =<< cachedPresentData
remote_annex_keys :: UUID -> Stat
remote_annex_keys u = stat "remote annex keys" $ json show $
@@ -298,7 +299,7 @@ remote_annex_keys u = stat "remote annex keys" $ json show $
remote_annex_size :: UUID -> Stat
remote_annex_size u = simpleStat "remote annex size" $
- showSizeKeys <$> cachedRemoteData u
+ lift . showSizeKeys =<< cachedRemoteData u
known_annex_files :: Stat
known_annex_files = stat "annexed files in working tree" $ json show $
@@ -306,7 +307,7 @@ known_annex_files = stat "annexed files in working tree" $ json show $
known_annex_size :: Stat
known_annex_size = simpleStat "size of annexed files in working tree" $
- showSizeKeys <$> cachedReferencedData
+ lift . showSizeKeys =<< cachedReferencedData
tmp_size :: Stat
tmp_size = staleSize "temporary object directory size" gitAnnexTmpObjectDir
@@ -315,7 +316,7 @@ bad_data_size :: Stat
bad_data_size = staleSize "bad keys size" gitAnnexBadDir
key_size :: Key -> Stat
-key_size k = simpleStat "size" $ pure $ showSizeKeys $ foldKeys [k]
+key_size k = simpleStat "size" $ lift $ showSizeKeys $ foldKeys [k]
key_name :: Key -> Stat
key_name k = simpleStat "key" $ pure $ key2file k
@@ -331,7 +332,8 @@ bloom_info = simpleStat "bloom filter size" $ do
-- Two bloom filters are used at the same time, so double the size
-- of one.
- size <- roughSize memoryUnits False . (* 2) . fromIntegral . fst <$>
+ sizer <- lift mkSizer
+ size <- sizer memoryUnits False . (* 2) . fromIntegral . fst <$>
lift Command.Unused.bloomBitsHashes
return $ size ++ note
@@ -358,13 +360,14 @@ disk_size = simpleStat "available local disk space" $ lift $
calcfree
<$> (annexDiskReserve <$> Annex.getGitConfig)
<*> inRepo (getDiskFree . gitAnnexDir)
+ <*> mkSizer
where
- calcfree reserve (Just have) = unwords
- [ roughSize storageUnits False $ nonneg $ have - reserve
- , "(+" ++ roughSize storageUnits False reserve
+ calcfree reserve (Just have) sizer = unwords
+ [ sizer storageUnits False $ nonneg $ have - reserve
+ , "(+" ++ sizer storageUnits False reserve
, "reserved)"
]
- calcfree _ _ = "unknown"
+ calcfree _ _ _ = "unknown"
nonneg x
| x >= 0 = x
@@ -389,6 +392,26 @@ numcopies_stats = stat "numcopies stats" $ nojson $
. map (\(variance, count) -> show variance ++ ": " ++ show count)
. sortBy (flip (comparing snd)) . M.toList
+reposizes_stats :: Stat
+reposizes_stats = stat "repositories containing these files" $ nojson $
+ calc
+ <$> lift uuidDescriptions
+ <*> lift mkSizer
+ <*> cachedRepoData
+ where
+ calc descm sizer = multiLine
+ . format
+ . map (\(u, d) -> line descm sizer u d)
+ . sortBy (flip (comparing (sizeKeys . snd))) . M.toList
+ line descm sizer u d = (sz, fromUUID u ++ " -- " ++ desc)
+ where
+ sz = sizer storageUnits True (sizeKeys d)
+ desc = fromMaybe "" (M.lookup u descm)
+ format l = map (\(c1, c2) -> lpad maxc1 c1 ++ ": " ++ c2 ) l
+ where
+ maxc1 = maximum (map (length . fst) l)
+ lpad n s = (replicate (n - length s) ' ') ++ s
+
cachedPresentData :: StatState KeyData
cachedPresentData = do
s <- get
@@ -402,11 +425,11 @@ cachedPresentData = do
cachedRemoteData :: UUID -> StatState KeyData
cachedRemoteData u = do
s <- get
- case M.lookup u (remoteData s) of
+ case M.lookup u (repoData s) of
Just v -> return v
Nothing -> do
v <- foldKeys <$> lift (loggedKeysFor u)
- put s { remoteData = M.insert u v (remoteData s) }
+ put s { repoData = M.insert u v (repoData s) }
return v
cachedReferencedData :: StatState KeyData
@@ -424,17 +447,21 @@ cachedReferencedData = do
cachedNumCopiesStats :: StatState (Maybe NumCopiesStats)
cachedNumCopiesStats = numCopiesStats <$> get
+-- currently only available for directory info
+cachedRepoData :: StatState (M.Map UUID KeyData)
+cachedRepoData = repoData <$> get
+
getDirStatInfo :: FilePath -> Annex StatInfo
getDirStatInfo dir = do
fast <- Annex.getState Annex.fast
matcher <- Limit.getMatcher
- (presentdata, referenceddata, numcopiesstats) <-
+ (presentdata, referenceddata, numcopiesstats, repodata) <-
Command.Unused.withKeysFilesReferencedIn dir initial
(update matcher fast)
- return $ StatInfo (Just presentdata) (Just referenceddata) M.empty (Just numcopiesstats)
+ return $ StatInfo (Just presentdata) (Just referenceddata) repodata (Just numcopiesstats)
where
- initial = (emptyKeyData, emptyKeyData, emptyNumCopiesStats)
- update matcher fast key file vs@(presentdata, referenceddata, numcopiesstats) =
+ initial = (emptyKeyData, emptyKeyData, emptyNumCopiesStats, M.empty)
+ update matcher fast key file vs@(presentdata, referenceddata, numcopiesstats, repodata) =
ifM (matcher $ MatchingFile $ FileInfo file file)
( do
!presentdata' <- ifM (inAnnex key)
@@ -442,10 +469,13 @@ getDirStatInfo dir = do
, return presentdata
)
let !referenceddata' = addKey key referenceddata
- !numcopiesstats' <- if fast
- then return numcopiesstats
- else updateNumCopiesStats key file numcopiesstats
- return $! (presentdata', referenceddata', numcopiesstats')
+ (!numcopiesstats', !repodata') <- if fast
+ then return (numcopiesstats, repodata)
+ else do
+ locs <- Remote.keyLocations key
+ nc <- updateNumCopiesStats file numcopiesstats locs
+ return (nc, updateRepoData key locs repodata)
+ return $! (presentdata', referenceddata', numcopiesstats', repodata')
, return vs
)
@@ -465,22 +495,32 @@ addKey key (KeyData count size unknownsize backends) =
{- All calculations strict to avoid thunks when repeatedly
- applied to many keys. -}
!count' = count + 1
- !backends' = M.insertWith' (+) (keyBackendName key) 1 backends
+ !backends' = M.insertWith (+) (keyBackendName key) 1 backends
!size' = maybe size (+ size) ks
!unknownsize' = maybe (unknownsize + 1) (const unknownsize) ks
ks = keySize key
-updateNumCopiesStats :: Key -> FilePath -> NumCopiesStats -> Annex NumCopiesStats
-updateNumCopiesStats key file (NumCopiesStats m) = do
- !variance <- Variance <$> numCopiesCheck file key (-)
- let !m' = M.insertWith' (+) variance 1 m
+updateRepoData :: Key -> [UUID] -> M.Map UUID KeyData -> M.Map UUID KeyData
+updateRepoData key locs m = m'
+ where
+ !m' = M.unionWith (\_old new -> new) m $
+ M.fromList $ zip locs (map update locs)
+ update loc = addKey key (fromMaybe emptyKeyData $ M.lookup loc m)
+
+updateNumCopiesStats :: FilePath -> NumCopiesStats -> [UUID] -> Annex NumCopiesStats
+updateNumCopiesStats file (NumCopiesStats m) locs = do
+ have <- trustExclude UnTrusted locs
+ !variance <- Variance <$> numCopiesCheck' file (-) have
+ let !m' = M.insertWith (+) variance 1 m
let !ret = NumCopiesStats m'
return ret
-showSizeKeys :: KeyData -> String
-showSizeKeys d = total ++ missingnote
+showSizeKeys :: KeyData -> Annex String
+showSizeKeys d = do
+ sizer <- mkSizer
+ return $ total sizer ++ missingnote
where
- total = roughSize storageUnits False $ sizeKeys d
+ total sizer = sizer storageUnits False $ sizeKeys d
missingnote
| unknownSizeKeys d == 0 = ""
| otherwise = aside $
@@ -494,8 +534,9 @@ staleSize label dirspec = go =<< lift (dirKeys dirspec)
go keys = onsize =<< sum <$> keysizes keys
onsize 0 = nostat
onsize size = stat label $
- json (++ aside "clean up with git-annex unused") $
- return $ roughSize storageUnits False size
+ json (++ aside "clean up with git-annex unused") $ do
+ sizer <- lift mkSizer
+ return $ sizer storageUnits False size
keysizes keys = do
dir <- lift $ fromRepo dirspec
liftIO $ forM keys $ \k -> catchDefaultIO 0 $
@@ -506,3 +547,12 @@ aside s = " (" ++ s ++ ")"
multiLine :: [String] -> String
multiLine = concatMap (\l -> "\n\t" ++ l)
+
+mkSizer :: Annex ([Unit] -> Bool -> ByteSize -> String)
+mkSizer = ifM (getOptionFlag bytesOption)
+ ( return (const $ const show)
+ , return roughSize
+ )
+
+bytesOption :: Option
+bytesOption = flagOption [] "bytes" "display file sizes in bytes"
diff --git a/Command/Required.hs b/Command/Required.hs
new file mode 100644
index 0000000..3d9c592
--- /dev/null
+++ b/Command/Required.hs
@@ -0,0 +1,17 @@
+{- git-annex command
+ -
+ - Copyright 2015 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Command.Required where
+
+import Command
+import Logs.PreferredContent
+import qualified Command.Wanted
+
+cmd :: [Command]
+cmd = Command.Wanted.cmd' "required" "get or set required content expression"
+ requiredContentMapRaw
+ requiredContentSet
diff --git a/Command/Wanted.hs b/Command/Wanted.hs
index 6b87e51..07f5ee7 100644
--- a/Command/Wanted.hs
+++ b/Command/Wanted.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2013 Joey Hess <id@joeyh.name>
+ - Copyright 2013-2015 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -13,39 +13,47 @@ import Command
import qualified Remote
import Logs.PreferredContent
import Types.Messages
+import Types.StandardGroups
import qualified Data.Map as M
cmd :: [Command]
-cmd = [command "wanted" (paramPair paramRemote (paramOptional paramExpression)) seek
- SectionSetup "get or set preferred content expression"]
-
-seek :: CommandSeek
-seek = withWords start
-
-start :: [String] -> CommandStart
-start = parse
+cmd = cmd' "wanted" "get or set preferred content expression"
+ preferredContentMapRaw
+ preferredContentSet
+
+cmd'
+ :: String
+ -> String
+ -> Annex (M.Map UUID PreferredContentExpression)
+ -> (UUID -> PreferredContentExpression -> Annex ())
+ -> [Command]
+cmd' name desc getter setter = [command name pdesc seek SectionSetup desc]
where
- parse (name:[]) = go name performGet
- parse (name:expr:[]) = go name $ \uuid -> do
- showStart "wanted" name
- performSet expr uuid
- parse _ = error "Specify a repository."
-
- go name a = do
- u <- Remote.nameToUUID name
+ pdesc = paramPair paramRemote (paramOptional paramExpression)
+
+ seek = withWords start
+
+ start (rname:[]) = go rname (performGet getter)
+ start (rname:expr:[]) = go rname $ \uuid -> do
+ showStart name rname
+ performSet setter expr uuid
+ start _ = error "Specify a repository."
+
+ go rname a = do
+ u <- Remote.nameToUUID rname
next $ a u
-performGet :: UUID -> CommandPerform
-performGet uuid = do
+performGet :: Ord a => Annex (M.Map a PreferredContentExpression) -> a -> CommandPerform
+performGet getter a = do
Annex.setOutput QuietOutput
- m <- preferredContentMapRaw
- liftIO $ putStrLn $ fromMaybe "" $ M.lookup uuid m
+ m <- getter
+ liftIO $ putStrLn $ fromMaybe "" $ M.lookup a m
next $ return True
-performSet :: String -> UUID -> CommandPerform
-performSet expr uuid = case checkPreferredContentExpression expr of
+performSet :: Ord a => (a -> PreferredContentExpression -> Annex ()) -> String -> a -> CommandPerform
+performSet setter expr a = case checkPreferredContentExpression expr of
Just e -> error $ "Parse error: " ++ e
Nothing -> do
- preferredContentSet uuid expr
+ setter a expr
next $ return True
diff --git a/Command/WebApp.hs b/Command/WebApp.hs
index 46ba556..e872d4b 100644
--- a/Command/WebApp.hs
+++ b/Command/WebApp.hs
@@ -143,10 +143,10 @@ firstRun :: Maybe HostName -> IO ()
firstRun listenhost = do
checkEnvironmentIO
{- Without a repository, we cannot have an Annex monad, so cannot
- - get a ThreadState. Using undefined is only safe because the
+ - get a ThreadState. This is only safe because the
- webapp checks its noAnnex field before accessing the
- threadstate. -}
- let st = undefined
+ let st = error "annex state not available"
{- Get a DaemonStatus without running in the Annex monad. -}
dstatus <- atomically . newTMVar =<< newDaemonStatus
d <- newAssistantData st dstatus
diff --git a/Config/NumCopies.hs b/Config/NumCopies.hs
index b25e081..50dcdf6 100644
--- a/Config/NumCopies.hs
+++ b/Config/NumCopies.hs
@@ -11,9 +11,10 @@ module Config.NumCopies (
getFileNumCopies,
getGlobalFileNumCopies,
getNumCopies,
- numCopiesCheck,
deprecatedNumCopies,
- defaultNumCopies
+ defaultNumCopies,
+ numCopiesCheck,
+ numCopiesCheck',
) where
import Common.Annex
@@ -75,6 +76,10 @@ getFileNumCopies' file = maybe getGlobalNumCopies (return . Just) =<< getattr
- belived to exist, and the configured value. -}
numCopiesCheck :: FilePath -> Key -> (Int -> Int -> v) -> Annex v
numCopiesCheck file key vs = do
- NumCopies needed <- getFileNumCopies file
have <- trustExclude UnTrusted =<< Remote.keyLocations key
+ numCopiesCheck' file vs have
+
+numCopiesCheck' :: FilePath -> (Int -> Int -> v) -> [UUID] -> Annex v
+numCopiesCheck' file vs have = do
+ NumCopies needed <- getFileNumCopies file
return $ length have `vs` needed
diff --git a/Creds.hs b/Creds.hs
index 765be5a..a4074c5 100644
--- a/Creds.hs
+++ b/Creds.hs
@@ -179,13 +179,13 @@ includeCredsInfo c storage info = do
Just _ -> do
let (uenv, penv) = credPairEnvironment storage
ret $ "from environment variables (" ++ unwords [uenv, penv] ++ ")"
- Nothing -> case (\ck -> M.lookup ck c) =<< credPairRemoteKey storage of
+ Nothing -> case (`M.lookup` c) =<< credPairRemoteKey storage of
Nothing -> ifM (existsCacheCredPair storage)
( ret "stored locally"
, ret "not available"
)
Just _ -> case extractCipher c of
- Just (EncryptedCipher _ _ _) -> ret "embedded in git repository (gpg encrypted)"
+ Just (EncryptedCipher {}) -> ret "embedded in git repository (gpg encrypted)"
_ -> ret "embedded in git repository (not encrypted)"
where
ret s = return $ ("creds", s) : info
diff --git a/Crypto.hs b/Crypto.hs
index c2076f4..66c27c5 100644
--- a/Crypto.hs
+++ b/Crypto.hs
@@ -34,7 +34,7 @@ module Crypto (
) where
import qualified Data.ByteString.Lazy as L
-import Data.ByteString.Lazy.UTF8 (fromString)
+import Data.ByteString.UTF8 (fromString)
import Control.Applicative
import qualified Data.Map as M
import Control.Monad.IO.Class
@@ -93,7 +93,7 @@ genSharedCipher highQuality =
{- Updates an existing Cipher, re-encrypting it to add or remove keyids,
- depending on whether the first component is True or False. -}
updateEncryptedCipher :: [(Bool, String)] -> StorableCipher -> IO StorableCipher
-updateEncryptedCipher _ SharedCipher{} = undefined
+updateEncryptedCipher _ SharedCipher{} = error "Cannot update shared cipher"
updateEncryptedCipher [] encipher = return encipher
updateEncryptedCipher newkeys encipher@(EncryptedCipher _ variant (KeyIds ks)) = do
dropKeys <- listKeyIds [ k | (False, k) <- newkeys ]
diff --git a/Database/Fsck.hs b/Database/Fsck.hs
index bf0c72f..8de0a8f 100644
--- a/Database/Fsck.hs
+++ b/Database/Fsck.hs
@@ -55,7 +55,7 @@ Fscked
-
- This may fail, if other fsck processes are currently running using the
- database. Removing the database in that situation would lead to crashes
- - or undefined behavior.
+ - or unknown behavior.
-}
newPass :: UUID -> Annex Bool
newPass u = isJust <$> tryExclusiveLock (gitAnnexFsckDbLock u) go
diff --git a/Git.hs b/Git.hs
index 6e27081..1bc789f 100644
--- a/Git.hs
+++ b/Git.hs
@@ -60,7 +60,7 @@ repoLocation Repo { location = Url url } = show url
repoLocation Repo { location = Local { worktree = Just dir } } = dir
repoLocation Repo { location = Local { gitdir = dir } } = dir
repoLocation Repo { location = LocalUnknown dir } = dir
-repoLocation Repo { location = Unknown } = undefined
+repoLocation Repo { location = Unknown } = error "unknown repoLocation"
{- Path to a repository. For non-bare, this is the worktree, for bare,
- it's the gitdir, and for URL repositories, is the path on the remote
@@ -70,12 +70,12 @@ repoPath Repo { location = Url u } = unEscapeString $ uriPath u
repoPath Repo { location = Local { worktree = Just d } } = d
repoPath Repo { location = Local { gitdir = d } } = d
repoPath Repo { location = LocalUnknown dir } = dir
-repoPath Repo { location = Unknown } = undefined
+repoPath Repo { location = Unknown } = error "unknown repoPath"
{- Path to a local repository's .git directory. -}
localGitDir :: Repo -> FilePath
localGitDir Repo { location = Local { gitdir = d } } = d
-localGitDir _ = undefined
+localGitDir _ = error "unknown localGitDir"
{- Some code needs to vary between URL and normal repos,
- or bare and non-bare, these functions help with that. -}
diff --git a/Git/CatFile.hs b/Git/CatFile.hs
index a1a0a0d..c63a064 100644
--- a/Git/CatFile.hs
+++ b/Git/CatFile.hs
@@ -110,4 +110,4 @@ catTree h treeref = go <$> catObjectDetails h treeref
parsemodefile b =
let (modestr, file) = separate (== ' ') (decodeBS b)
in (file, readmode modestr)
- readmode = fst . fromMaybe (0, undefined) . headMaybe . readOct
+ readmode = fromMaybe 0 . fmap fst . headMaybe . readOct
diff --git a/Git/DiffTree.hs b/Git/DiffTree.hs
index 5cdcc16..5dd4bde 100644
--- a/Git/DiffTree.hs
+++ b/Git/DiffTree.hs
@@ -36,12 +36,12 @@ isDiffOf diff f = case getTopFilePath f of
{- Diffs two tree Refs. -}
diffTree :: Ref -> Ref -> Repo -> IO ([DiffTreeItem], IO Bool)
diffTree src dst = getdiff (Param "diff-tree")
- [Param (fromRef src), Param (fromRef dst)]
+ [Param (fromRef src), Param (fromRef dst), Param "--"]
{- Diffs two tree Refs, recursing into sub-trees -}
diffTreeRecursive :: Ref -> Ref -> Repo -> IO ([DiffTreeItem], IO Bool)
diffTreeRecursive src dst = getdiff (Param "diff-tree")
- [Param "-r", Param (fromRef src), Param (fromRef dst)]
+ [Param "-r", Param (fromRef src), Param (fromRef dst), Param "--"]
{- Diffs between a tree and the index. Does nothing if there is not yet a
- commit in the repository. -}
diff --git a/Git/LsFiles.hs b/Git/LsFiles.hs
index c23c282..e80c1b2 100644
--- a/Git/LsFiles.hs
+++ b/Git/LsFiles.hs
@@ -181,12 +181,13 @@ parseUnmerged s
| otherwise = case words metadata of
(rawblobtype:rawsha:rawstage:_) -> do
stage <- readish rawstage :: Maybe Int
- unless (stage == 2 || stage == 3) $
- fail undefined -- skip stage 1
- blobtype <- readBlobType rawblobtype
- sha <- extractSha rawsha
- return $ InternalUnmerged (stage == 2) file
- (Just blobtype) (Just sha)
+ if stage /= 2 && stage /= 3
+ then Nothing
+ else do
+ blobtype <- readBlobType rawblobtype
+ sha <- extractSha rawsha
+ return $ InternalUnmerged (stage == 2) file
+ (Just blobtype) (Just sha)
_ -> Nothing
where
(metadata, file) = separate (== '\t') s
diff --git a/Git/Remote/Remove.hs b/Git/Remote/Remove.hs
index 2ffc9b3..e6c13b9 100644
--- a/Git/Remote/Remove.hs
+++ b/Git/Remote/Remove.hs
@@ -1,4 +1,4 @@
-{- git remote stuff
+{- git remote removal
-
- Copyright 2012 Joey Hess <id@joeyh.name>
-
diff --git a/Git/UnionMerge.hs b/Git/UnionMerge.hs
index d4dc35e..26bb3d3 100644
--- a/Git/UnionMerge.hs
+++ b/Git/UnionMerge.hs
@@ -51,12 +51,12 @@ mergeIndex h repo bs = forM_ bs $ \b ->
{- For merging two trees. -}
mergeTrees :: Ref -> Ref -> CatFileHandle -> Repo -> Streamer
-mergeTrees (Ref x) (Ref y) h = doMerge h $ "diff-tree":diffOpts ++ [x, y]
+mergeTrees (Ref x) (Ref y) h = doMerge h $ "diff-tree":diffOpts ++ [x, y, "--"]
{- For merging a single tree into the index. -}
mergeTreeIndex :: Ref -> CatFileHandle -> Repo -> Streamer
-mergeTreeIndex (Ref x) h = doMerge h $
- "diff-index" : diffOpts ++ ["--cached", x]
+mergeTreeIndex (Ref r) h = doMerge h $
+ "diff-index" : diffOpts ++ ["--cached", r, "--"]
diffOpts :: [String]
diffOpts = ["--raw", "-z", "-r", "--no-renames", "-l0"]
diff --git a/Locations.hs b/Locations.hs
index 7602a27..8b0b819 100644
--- a/Locations.hs
+++ b/Locations.hs
@@ -165,7 +165,7 @@ gitAnnexLink file key r config = do
{- This special case is for git submodules on filesystems not
- supporting symlinks; generate link target that will
- work portably. -}
- | coreSymlinks config == False && needsSubmoduleFixup r =
+ | not (coreSymlinks config) && needsSubmoduleFixup r =
fromMaybe whoops $ absNormPathUnix currdir $
Git.repoPath r </> ".git"
| otherwise = Git.localGitDir r
diff --git a/Logs/Activity.hs b/Logs/Activity.hs
index 45262a6..9738fdb 100644
--- a/Logs/Activity.hs
+++ b/Logs/Activity.hs
@@ -26,7 +26,7 @@ recordActivity :: Activity -> UUID -> Annex ()
recordActivity act uuid = do
ts <- liftIO getPOSIXTime
Annex.Branch.change activityLog $
- showLog id . changeLog ts uuid (show act) . parseLog readish
+ showLog show . changeLog ts uuid act . parseLog readish
lastActivities :: Maybe Activity -> Annex (Log Activity)
lastActivities wantact = parseLog onlywanted <$> Annex.Branch.get activityLog
diff --git a/Remote.hs b/Remote.hs
index 58c1a0f..8a03f75 100644
--- a/Remote.hs
+++ b/Remote.hs
@@ -83,7 +83,7 @@ remoteMap' mkv mkk = M.fromList . mapMaybe mk <$> remoteList
Nothing -> Nothing
Just k -> Just (k, mkv r)
-{- Map of UUIDs of remotes and their descriptions.
+{- Map of UUIDs of repositories and their descriptions.
- The names of Remotes are added to suppliment any description that has
- been set for a repository. -}
uuidDescriptions :: Annex (M.Map UUID String)
@@ -130,8 +130,7 @@ byName' n = go . filter matching <$> remoteList
byNameOrGroup :: RemoteName -> Annex [Remote]
byNameOrGroup n = go =<< getConfigMaybe (ConfigKey ("remotes." ++ n))
where
- go (Just l) = concatMap maybeToList <$>
- mapM (byName . Just) (split " " l)
+ go (Just l) = catMaybes <$> mapM (byName . Just) (split " " l)
go Nothing = maybeToList <$> byName (Just n)
{- Only matches remote name, not UUID -}
@@ -343,4 +342,4 @@ claimingUrl url = do
let web = Prelude.head $ filter (\r -> uuid r == webUUID) rs
fromMaybe web <$> firstM checkclaim rs
where
- checkclaim = maybe (pure False) (flip id url) . claimUrl
+ checkclaim = maybe (pure False) (`id` url) . claimUrl
diff --git a/Remote/BitTorrent.hs b/Remote/BitTorrent.hs
index 2770f30..baba2e2 100644
--- a/Remote/BitTorrent.hs
+++ b/Remote/BitTorrent.hs
@@ -212,7 +212,7 @@ downloadTorrentFile u = do
downloadMagnetLink :: URLString -> FilePath -> FilePath -> Annex Bool
downloadMagnetLink u metadir dest = ifM download
( liftIO $ do
- ts <- filter (".torrent" `isPrefixOf`)
+ ts <- filter (".torrent" `isSuffixOf`)
<$> dirContents metadir
case ts of
(t:[]) -> do
diff --git a/Remote/Directory.hs b/Remote/Directory.hs
index 2eeb793..9160131 100644
--- a/Remote/Directory.hs
+++ b/Remote/Directory.hs
@@ -162,9 +162,13 @@ retrieveCheap _ (UnpaddedChunks _) _ _ = return False
retrieveCheap _ (LegacyChunks _) _ _ = return False
#ifndef mingw32_HOST_OS
retrieveCheap d NoChunks k f = liftIO $ catchBoolIO $ do
- file <- getLocation d k
- createSymbolicLink file f
- return True
+ file <- absPath =<< getLocation d k
+ ifM (doesFileExist file)
+ ( do
+ createSymbolicLink file f
+ return True
+ , return False
+ )
#else
retrieveCheap _ _ _ _ = return False
#endif
diff --git a/Remote/GCrypt.hs b/Remote/GCrypt.hs
index c275198..01efc60 100644
--- a/Remote/GCrypt.hs
+++ b/Remote/GCrypt.hs
@@ -397,7 +397,7 @@ getGCryptId fast r gc
| Git.repoIsLocal r || Git.repoIsLocalUnknown r = extract <$>
liftIO (catchMaybeIO $ Git.Config.read r)
| not fast = extract . liftM fst <$> getM (eitherToMaybe <$>)
- [ Ssh.onRemote r (Git.Config.fromPipe r, return (Left undefined)) "configlist" [] []
+ [ Ssh.onRemote r (Git.Config.fromPipe r, return (Left $ error "configlist failed")) "configlist" [] []
, getConfigViaRsync r gc
]
| otherwise = return (Nothing, r)
diff --git a/Remote/Git.hs b/Remote/Git.hs
index abefc11..4804cb1 100644
--- a/Remote/Git.hs
+++ b/Remote/Git.hs
@@ -199,7 +199,7 @@ tryGitConfigRead :: Git.Repo -> Annex Git.Repo
tryGitConfigRead r
| haveconfig r = return r -- already read
| Git.repoIsSsh r = store $ do
- v <- Ssh.onRemote r (pipedconfig, return (Left undefined)) "configlist" [] []
+ v <- Ssh.onRemote r (pipedconfig, return (Left $ error "configlist failed")) "configlist" [] []
case v of
Right r'
| haveconfig r' -> return r'
@@ -228,9 +228,10 @@ tryGitConfigRead r
uo <- Url.getUrlOptions
v <- liftIO $ withTmpFile "git-annex.tmp" $ \tmpfile h -> do
hClose h
- ifM (Url.downloadQuiet (Git.repoLocation r ++ "/config") tmpfile uo)
+ let url = Git.repoLocation r ++ "/config"
+ ifM (Url.downloadQuiet url tmpfile uo)
( pipedconfig "git" [Param "config", Param "--null", Param "--list", Param "--file", File tmpfile]
- , return $ Left undefined
+ , return $ Left $ error $ "unable to load config from " ++ url
)
case v of
Left _ -> do
@@ -445,10 +446,17 @@ copyFromRemote' r key file dest
copyFromRemoteCheap :: Remote -> Key -> FilePath -> Annex Bool
#ifndef mingw32_HOST_OS
copyFromRemoteCheap r key file
- | not $ Git.repoIsUrl (repo r) = guardUsable (repo r) (return False) $ do
- loc <- liftIO $ gitAnnexLocation key (repo r) $
+ | not $ Git.repoIsUrl (repo r) = guardUsable (repo r) (return False) $ liftIO $ do
+ loc <- gitAnnexLocation key (repo r) $
fromJust $ remoteGitConfig $ gitconfig r
- liftIO $ catchBoolIO $ createSymbolicLink loc file >> return True
+ ifM (doesFileExist loc)
+ ( do
+ absloc <- absPath loc
+ catchBoolIO $ do
+ createSymbolicLink absloc file
+ return True
+ , return False
+ )
| Git.repoIsSsh (repo r) =
ifM (Annex.Content.preseedTmp key file)
( copyFromRemote' r key Nothing file
diff --git a/Remote/Helper/Chunked.hs b/Remote/Helper/Chunked.hs
index 2f21ba6..23ed3db 100644
--- a/Remote/Helper/Chunked.hs
+++ b/Remote/Helper/Chunked.hs
@@ -72,7 +72,7 @@ chunkKeyStream basek chunksize = ChunkKeyStream $ map mk [1..]
nextChunkKeyStream :: ChunkKeyStream -> (Key, ChunkKeyStream)
nextChunkKeyStream (ChunkKeyStream (k:l)) = (k, ChunkKeyStream l)
-nextChunkKeyStream (ChunkKeyStream []) = undefined -- stream is infinite!
+nextChunkKeyStream (ChunkKeyStream []) = error "expected infinite ChunkKeyStream"
takeChunkKeyStream :: ChunkCount -> ChunkKeyStream -> [Key]
takeChunkKeyStream n (ChunkKeyStream l) = genericTake n l
diff --git a/Test.hs b/Test.hs
index e57c902..c84b366 100644
--- a/Test.hs
+++ b/Test.hs
@@ -156,6 +156,7 @@ properties = localOption (QuickCheckTests 1000) $ testGroup "QuickCheck"
, testProperty "prop_read_show_TrustLevel" Types.TrustLevel.prop_read_show_TrustLevel
, testProperty "prop_parse_show_TrustLog" Logs.Trust.prop_parse_show_TrustLog
, testProperty "prop_hashes_stable" Utility.Hash.prop_hashes_stable
+ , testProperty "prop_mac_stable" Utility.Hash.prop_mac_stable
, testProperty "prop_schedule_roundtrips" Utility.Scheduled.prop_schedule_roundtrips
, testProperty "prop_past_sane" Utility.Scheduled.prop_past_sane
, testProperty "prop_duration_roundtrips" Utility.HumanTime.prop_duration_roundtrips
@@ -199,6 +200,7 @@ unitTests note = testGroup ("Unit Tests " ++ note)
, testCase "fsck (bare)" test_fsck_bare
, testCase "fsck (local untrusted)" test_fsck_localuntrusted
, testCase "fsck (remote untrusted)" test_fsck_remoteuntrusted
+ , testCase "fsck --from remote" test_fsck_fromremote
, testCase "migrate" test_migrate
, testCase "migrate (via gitattributes)" test_migrate_via_gitattributes
, testCase "unused" test_unused
@@ -613,6 +615,10 @@ test_fsck_remoteuntrusted = intmpclonerepo $ do
git_annex "untrust" ["origin"] @? "untrust of origin failed"
fsck_should_fail "content not replicated to enough non-untrusted repositories"
+test_fsck_fromremote :: Assertion
+test_fsck_fromremote = intmpclonerepo $ do
+ git_annex "fsck" ["--from", "origin"] @? "fsck --from origin failed"
+
fsck_should_fail :: String -> Assertion
fsck_should_fail m = not <$> git_annex "fsck" []
@? "fsck failed to fail with " ++ m
diff --git a/Types/Crypto.hs b/Types/Crypto.hs
index 682629d..79970c2 100644
--- a/Types/Crypto.hs
+++ b/Types/Crypto.hs
@@ -1,6 +1,6 @@
{- git-annex crypto types
-
- - Copyright 2011-2012 Joey Hess <id@joeyh.name>
+ - Copyright 2011-2015 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -17,9 +17,7 @@ module Types.Crypto (
calcMac,
) where
-import qualified Data.ByteString.Lazy as L
-import Data.Digest.Pure.SHA
-
+import Utility.Hash
import Utility.Gpg (KeyIds(..))
-- XXX ideally, this would be a locked memory region
@@ -31,13 +29,6 @@ data StorableCipher = EncryptedCipher String EncryptedCipherVariant KeyIds
data EncryptedCipherVariant = Hybrid | PubKey
deriving (Ord, Eq)
-{- File names are (client-side) MAC'ed on special remotes.
- - The chosen MAC algorithm needs to be same for all files stored on the
- - remote.
- -}
-data Mac = HmacSha1 | HmacSha224 | HmacSha256 | HmacSha384 | HmacSha512
- deriving (Eq)
-
defaultMac :: Mac
defaultMac = HmacSha1
@@ -57,17 +48,3 @@ readMac "HMACSHA256" = Just HmacSha256
readMac "HMACSHA384" = Just HmacSha384
readMac "HMACSHA512" = Just HmacSha512
readMac _ = Nothing
-
-calcMac
- :: Mac -- ^ MAC
- -> L.ByteString -- ^ secret key
- -> L.ByteString -- ^ message
- -> String -- ^ MAC'ed message, in hexadecimal
-calcMac mac = case mac of
- HmacSha1 -> showDigest $* hmacSha1
- HmacSha224 -> showDigest $* hmacSha224
- HmacSha256 -> showDigest $* hmacSha256
- HmacSha384 -> showDigest $* hmacSha384
- HmacSha512 -> showDigest $* hmacSha512
- where
- ($*) g f x y = g $ f x y
diff --git a/Types/Difference.hs b/Types/Difference.hs
index 74bac0a..064703b 100644
--- a/Types/Difference.hs
+++ b/Types/Difference.hs
@@ -62,8 +62,8 @@ readDifferences :: String -> Differences
readDifferences = maybe UnknownDifferences Differences . readish
getDifferences :: Git.Repo -> Differences
-getDifferences r = Differences $ S.fromList $ catMaybes $
- map getmaybe [minBound .. maxBound]
+getDifferences r = Differences $ S.fromList $
+ mapMaybe getmaybe [minBound .. maxBound]
where
getmaybe d = case Git.Config.isTrue =<< Git.Config.getMaybe (differenceConfigKey d) r of
Just True -> Just d
diff --git a/Types/Distribution.hs b/Types/Distribution.hs
index 2a44a15..d4de7a7 100644
--- a/Types/Distribution.hs
+++ b/Types/Distribution.hs
@@ -25,7 +25,7 @@ type GitAnnexVersion = String
data AutoUpgrade = AskUpgrade | AutoUpgrade | NoAutoUpgrade
deriving (Eq)
-toAutoUpgrade :: (Maybe String) -> AutoUpgrade
+toAutoUpgrade :: Maybe String -> AutoUpgrade
toAutoUpgrade Nothing = AskUpgrade
toAutoUpgrade (Just s)
| s == "ask" = AskUpgrade
diff --git a/Types/Remote.hs b/Types/Remote.hs
index 5df08c7..ad8c0c4 100644
--- a/Types/Remote.hs
+++ b/Types/Remote.hs
@@ -66,7 +66,8 @@ data RemoteA a = Remote {
-- (The MeterUpdate does not need to be used if it retrieves
-- directly to the file, and not to an intermediate file.)
retrieveKeyFile :: Key -> AssociatedFile -> FilePath -> MeterUpdate -> a Bool,
- -- retrieves a key's contents to a tmp file, if it can be done cheaply
+ -- Retrieves a key's contents to a tmp file, if it can be done cheaply.
+ -- It's ok to create a symlink or hardlink.
retrieveKeyFileCheap :: Key -> FilePath -> a Bool,
-- removes a key's contents (succeeds if the contents are not present)
removeKey :: Key -> a Bool,
diff --git a/Utility/CopyFile.hs b/Utility/CopyFile.hs
index b123d00..1c07ca1 100644
--- a/Utility/CopyFile.hs
+++ b/Utility/CopyFile.hs
@@ -16,7 +16,12 @@ module Utility.CopyFile (
import Common
import qualified Build.SysConfig as SysConfig
-data CopyMetaData = CopyTimeStamps | CopyAllMetaData
+data CopyMetaData
+ -- Copy timestamps when possible, but no other metadata, and
+ -- when copying a symlink, makes a copy of its content.
+ = CopyTimeStamps
+ -- Copy all metadata when possible.
+ | CopyAllMetaData
deriving (Eq)
{- The cp command is used, because I hate reinventing the wheel,
diff --git a/Utility/DataUnits.hs b/Utility/DataUnits.hs
index 2ece143..6e40932 100644
--- a/Utility/DataUnits.hs
+++ b/Utility/DataUnits.hs
@@ -42,6 +42,7 @@ module Utility.DataUnits (
bandwidthUnits,
oldSchoolUnits,
Unit(..),
+ ByteSize,
roughSize,
compareSizes,
diff --git a/Utility/DirWatcher.hs b/Utility/DirWatcher.hs
index 3d3c146..bde7106 100644
--- a/Utility/DirWatcher.hs
+++ b/Utility/DirWatcher.hs
@@ -57,7 +57,7 @@ eventsCoalesce = False
#if (WITH_KQUEUE || WITH_FSEVENTS)
eventsCoalesce = True
#else
-eventsCoalesce = undefined
+eventsCoalesce = error "eventsCoalesce not defined"
#endif
#endif
@@ -78,7 +78,7 @@ closingTracked = True
#if WITH_KQUEUE
closingTracked = False
#else
-closingTracked = undefined
+closingTracked = error "closingTracked not defined"
#endif
#endif
@@ -93,7 +93,7 @@ modifyTracked = True
#if WITH_KQUEUE
modifyTracked = False
#else
-modifyTracked = undefined
+modifyTracked = error "modifyTracked not defined"
#endif
#endif
@@ -131,7 +131,7 @@ watchDir dir prune scanevents hooks runstartup =
#else
type DirWatcherHandle = ()
watchDir :: FilePath -> Pruner -> Bool -> WatchHooks -> (IO () -> IO ()) -> IO DirWatcherHandle
-watchDir = undefined
+watchDir = error "watchDir not defined"
#endif
#endif
#endif
@@ -150,7 +150,7 @@ stopWatchDir = FSEvents.eventStreamDestroy
#if WITH_WIN32NOTIFY
stopWatchDir = Win32Notify.killWatchManager
#else
-stopWatchDir = undefined
+stopWatchDir = error "stopWatchDir not defined"
#endif
#endif
#endif
diff --git a/Utility/Directory.hs b/Utility/Directory.hs
index 85ec8bf..2e037fd 100644
--- a/Utility/Directory.hs
+++ b/Utility/Directory.hs
@@ -111,7 +111,7 @@ moveFile src dest = tryIO (rename src dest) >>= onrename
-- But, mv will move into a directory if
-- dest is one, which is not desired.
whenM (isdir dest) rethrow
- viaTmp mv dest undefined
+ viaTmp mv dest ""
where
rethrow = throwM e
mv tmp _ = do
diff --git a/Utility/FileMode.hs b/Utility/FileMode.hs
index 5c4001e..f98e1bc 100644
--- a/Utility/FileMode.hs
+++ b/Utility/FileMode.hs
@@ -124,7 +124,7 @@ withUmask _ a = a
#endif
combineModes :: [FileMode] -> FileMode
-combineModes [] = undefined
+combineModes [] = 0
combineModes [m] = m
combineModes (m:ms) = foldl unionFileModes m ms
diff --git a/Utility/Hash.hs b/Utility/Hash.hs
index 9881815..f960a13 100644
--- a/Utility/Hash.hs
+++ b/Utility/Hash.hs
@@ -9,13 +9,16 @@ module Utility.Hash (
skein256,
skein512,
md5,
- prop_hashes_stable
+ prop_hashes_stable,
+ Mac(..),
+ calcMac,
+ prop_mac_stable,
) where
import qualified Data.ByteString.Lazy as L
import qualified Data.Text as T
import qualified Data.Text.Encoding as T
-
+import qualified Data.ByteString as S
import Crypto.Hash
sha1 :: L.ByteString -> Digest SHA1
@@ -60,3 +63,37 @@ prop_hashes_stable = all (\(hasher, result) -> hasher foo == result)
]
where
foo = L.fromChunks [T.encodeUtf8 $ T.pack "foo"]
+
+{- File names are (client-side) MAC'ed on special remotes.
+ - The chosen MAC algorithm needs to be same for all files stored on the
+ - remote.
+ -}
+data Mac = HmacSha1 | HmacSha224 | HmacSha256 | HmacSha384 | HmacSha512
+ deriving (Eq)
+
+calcMac
+ :: Mac -- ^ MAC
+ -> S.ByteString -- ^ secret key
+ -> S.ByteString -- ^ message
+ -> String -- ^ MAC'ed message, in hexadecimal
+calcMac mac = case mac of
+ HmacSha1 -> use SHA1
+ HmacSha224 -> use SHA224
+ HmacSha256 -> use SHA256
+ HmacSha384 -> use SHA384
+ HmacSha512 -> use SHA512
+ where
+ use alg k m = show (hmacGetDigest (hmacAlg alg k m))
+
+-- Check that all the MACs continue to produce the same.
+prop_mac_stable :: Bool
+prop_mac_stable = all (\(mac, result) -> calcMac mac key msg == result)
+ [ (HmacSha1, "46b4ec586117154dacd49d664e5d63fdc88efb51")
+ , (HmacSha224, "4c1f774863acb63b7f6e9daa9b5c543fa0d5eccf61e3ffc3698eacdd")
+ , (HmacSha256, "f9320baf0249169e73850cd6156ded0106e2bb6ad8cab01b7bbbebe6d1065317")
+ , (HmacSha384, "3d10d391bee2364df2c55cf605759373e1b5a4ca9355d8f3fe42970471eca2e422a79271a0e857a69923839015877fc6")
+ , (HmacSha512, "114682914c5d017dfe59fdc804118b56a3a652a0b8870759cf9e792ed7426b08197076bf7d01640b1b0684df79e4b67e37485669e8ce98dbab60445f0db94fce")
+ ]
+ where
+ key = T.encodeUtf8 $ T.pack "foo"
+ msg = T.encodeUtf8 $ T.pack "bar"
diff --git a/Utility/Metered.hs b/Utility/Metered.hs
index f94b5d1..c34e931 100644
--- a/Utility/Metered.hs
+++ b/Utility/Metered.hs
@@ -144,7 +144,7 @@ defaultChunkSize :: Int
defaultChunkSize = 32 * k - chunkOverhead
where
k = 1024
- chunkOverhead = 2 * sizeOf (undefined :: Int) -- GHC specific
+ chunkOverhead = 2 * sizeOf (1 :: Int) -- GHC specific
data OutputHandler = OutputHandler
{ quietMode :: Bool
diff --git a/Utility/Path.hs b/Utility/Path.hs
index 2675aa0..9f0737f 100644
--- a/Utility/Path.hs
+++ b/Utility/Path.hs
@@ -138,9 +138,15 @@ relPathDirToFile from to = relPathDirToFileAbs <$> absPath from <*> absPath to
{- This requires the first path to be absolute, and the
- second path cannot contain ../ or ./
+ -
+ - On Windows, if the paths are on different drives,
+ - a relative path is not possible and the path is simply
+ - returned as-is.
-}
relPathDirToFileAbs :: FilePath -> FilePath -> FilePath
-relPathDirToFileAbs from to = join s $ dotdots ++ uncommon
+relPathDirToFileAbs from to
+ | takeDrive from /= takeDrive to = to
+ | otherwise = join s $ dotdots ++ uncommon
where
s = [pathSeparator]
pfrom = split s from
@@ -153,6 +159,7 @@ relPathDirToFileAbs from to = join s $ dotdots ++ uncommon
prop_relPathDirToFile_basics :: FilePath -> FilePath -> Bool
prop_relPathDirToFile_basics from to
+ | null from || null to = True
| from == to = null r
| otherwise = not (null r)
where
diff --git a/Utility/Touch.hsc b/Utility/Touch.hsc
index f87bb62..c3318e6 100644
--- a/Utility/Touch.hsc
+++ b/Utility/Touch.hsc
@@ -54,8 +54,8 @@ instance Storable TimeSpec where
-- use the larger alignment of the two types in the struct
alignment _ = max sec_alignment nsec_alignment
where
- sec_alignment = alignment (undefined::CTime)
- nsec_alignment = alignment (undefined::CLong)
+ sec_alignment = alignment (1::CTime)
+ nsec_alignment = alignment (1::CLong)
sizeOf _ = #{size struct timespec}
peek ptr = do
sec <- #{peek struct timespec, tv_sec} ptr
@@ -92,7 +92,7 @@ touchBoth file atime mtime follow =
-}
instance Storable TimeSpec where
- alignment _ = alignment (undefined::CLong)
+ alignment _ = alignment (1::CLong)
sizeOf _ = #{size struct timeval}
peek ptr = do
sec <- #{peek struct timeval, tv_sec} ptr
diff --git a/Utility/Verifiable.hs b/Utility/Verifiable.hs
index a861416..278c320 100644
--- a/Utility/Verifiable.hs
+++ b/Utility/Verifiable.hs
@@ -7,11 +7,12 @@
module Utility.Verifiable where
-import Data.Digest.Pure.SHA
-import Data.ByteString.Lazy.UTF8 (fromString)
-import qualified Data.ByteString.Lazy as L
+import Data.ByteString.UTF8 (fromString)
+import qualified Data.ByteString as S
-type Secret = L.ByteString
+import Utility.Hash
+
+type Secret = S.ByteString
type HMACDigest = String
{- A value, verifiable using a HMAC digest and a secret. -}
@@ -28,7 +29,7 @@ verify :: (Eq a, Show a) => Verifiable a -> Secret -> Bool
verify v secret = v == mkVerifiable (verifiableVal v) secret
calcDigest :: String -> Secret -> HMACDigest
-calcDigest v secret = showDigest $ hmacSha1 secret $ fromString v
+calcDigest v secret = calcMac HmacSha1 secret (fromString v)
{- for quickcheck -}
prop_verifiable_sane :: String -> String -> Bool
diff --git a/build.bat b/build.bat
index 66a7e1f..52d03e0 100644
--- a/build.bat
+++ b/build.bat
@@ -1 +1 @@
-C:\MINGW\MSYS\1.0\BIN\SH.EXE standalone/windows/build-simple.sh
+C:\CYGWIN\BIN\SH.EXE standalone/windows/build-simple.sh
diff --git a/debian/changelog b/debian/changelog
index 0958e7d..eda96be 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,39 @@
+git-annex (5.20150420) unstable; urgency=medium
+
+ * Fix activity log parsing, which caused the log to not retain
+ activity from other uuids.
+ * Union merge could fall over if there was a file in the repository
+ with the same name as a git ref. Now fixed.
+ * info dir: Added information about repositories that
+ contain files in the specified directory.
+ * info: Added --bytes option.
+ * bittorrent: Fix handling of magnet links.
+ * When a key's size is unknown, still check the annex.diskreserve,
+ and avoid getting content if the disk is too full.
+ * Fix fsck --from a git remote in a local directory, and from
+ a directory special remote.
+ This was a reversion caused by the relative path changes in 5.20150113.
+ * fsck --from remote: When bad content is found in the remote,
+ and the local repo does not have a copy of the content, preserve
+ the bad content in .git/annex/bad/ to avoid further data loss.
+ * fsck --from remote: Avoid downloading a key if it would go over
+ the annex.diskreserve limit.
+ * required: New command, like wanted, but for required content.
+ * Removed dependency on haskell SHA library,
+ instead using cryptohash >= 0.11.0.
+ * Make repo init more robust.
+ * New debian/rules build-standalone target, which generates a
+ git-annex-standalone.deb that should work on many old Debian etc
+ systems. Thanks, Yaroslav Halchenko.
+ * Windows: Renamed start menu file to avoid loop in some versions
+ of Windows where the menu file is treated as a git-annex program.
+ * Windows: Fixed support of remotes on other drives.
+ (A reversion introduced in version 5.20150113.)
+ * Windows: Bundled versions of rsync, wget, ssh, and gpg from
+ cygwin all updated. Thanks, Yury V. Zaytsev.
+
+ -- Joey Hess <id@joeyh.name> Mon, 20 Apr 2015 14:44:04 -0400
+
git-annex (5.20150409) unstable; urgency=medium
* This fixes a bug in the assistant introduced by the literal pathspec
diff --git a/debian/control b/debian/control
index 6cb4a63..85a3e67 100644
--- a/debian/control
+++ b/debian/control
@@ -10,8 +10,7 @@ Build-Depends:
libghc-data-default-dev,
libghc-hslogger-dev,
libghc-pcre-light-dev,
- libghc-sha-dev,
- libghc-cryptohash-dev,
+ libghc-cryptohash-dev (>= 0.11.0),
libghc-dataenc-dev,
libghc-utf8-string-dev,
libghc-aws-dev (>= 0.9.2-2~),
diff --git a/debian/create-standalone-changelog b/debian/create-standalone-changelog
new file mode 100755
index 0000000..40b0c69
--- /dev/null
+++ b/debian/create-standalone-changelog
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# A little helper script to build a package with standalone git-annex
+# It relies on being run within git-annex's git repository
+#
+set -eu
+
+umask 022
+
+# This is the same method that the configure script uses when git-annex is
+# built from git master.
+ANNEX_VERSION=$(runghc Build/Version.hs)
+
+ANNEX_NDVERSION=$( echo ${ANNEX_VERSION} | sed -e 's,-,+git,' -e 's,$,-1~ndall+1,')
+
+dch --noconf -v ${ANNEX_NDVERSION} \
+ --force-bad-version --force-distribution -D neurodebian "Backported fresh snapshot"
diff --git a/debian/patches/series.standalone-build b/debian/patches/series.standalone-build
new file mode 100644
index 0000000..9dc9941
--- /dev/null
+++ b/debian/patches/series.standalone-build
@@ -0,0 +1 @@
+standalone-build
diff --git a/debian/patches/standalone-build b/debian/patches/standalone-build
new file mode 100644
index 0000000..81d9456
--- /dev/null
+++ b/debian/patches/standalone-build
@@ -0,0 +1,72 @@
+From: Yaroslav Halchenko <debian@onerussian.com>
+Subject: Patch debian/ to provide a standalone build of git-annex
+
+Origin: NeuroDebian
+Last-Update: 2015-04-20
+
+--- a/debian/control
++++ b/debian/control
+@@ -87,11 +87,13 @@ Vcs-Git: git://git.kitenet.net/git-annex
+ Homepage: http://git-annex.branchable.com/
+ XS-Testsuite: autopkgtest
+
+-Package: git-annex
++Package: git-annex-standalone
+ Architecture: any
+ Section: utils
+-Depends: ${misc:Depends}, ${shlibs:Depends},
+- git (>= 1:1.8.1),
++Conflicts: git-annex
++Provides: git-annex
++Depends: ${misc:Depends},
++ git,
+ rsync,
+ wget,
+ curl,
+@@ -110,7 +112,7 @@ Suggests:
+ bup,
+ tahoe-lafs,
+ libnss-mdns,
+-Description: manage files with git, without checking their contents into git
++Description: manage files with git, without checking their contents into git -- standalone build
+ git-annex allows managing files with git, without checking the file
+ contents into git. While that may seem paradoxical, it is useful when
+ dealing with files larger than git can currently easily handle, whether due
+@@ -128,3 +130,7 @@ Description: manage files with git, with
+ noticing when files are changed, and automatically committing them
+ to git and transferring them to other computers. The git-annex webapp
+ makes it easy to set up and use git-annex this way.
++ .
++ This package provides a standalone bundle build of git-annex, which
++ should be installable on any more or less recent Debian or Ubuntu
++ release.
+--- /dev/null
++++ b/debian/install
+@@ -0,0 +1 @@
++tmp/git-annex.linux usr/lib
+--- /dev/null
++++ b/debian/links
+@@ -0,0 +1 @@
++/usr/lib/git-annex.linux/git-annex /usr/bin/git-annex
+--- /dev/null
++++ b/debian/manpages
+@@ -0,0 +1 @@
++debian/git-annex-standalone/usr/lib/git-annex.linux/usr/share/man/man1/git-annex*
+--- a/debian/rules
++++ b/debian/rules
+@@ -12,6 +12,15 @@ export RELEASE_BUILD=1
+ # Rules for providing a standalone build of annex.
+ #
+
++override_dh_auto_build:
++ make linuxstandalone
++
++override_dh_auto_install:
++ : # nothing to do, we just need to copy the beast, as instructed in debian/install
++
++override_dh_fixperms:
++ dh_fixperms -Xld-linux
++
+ build-standalone:
+ [ -e .git ]
+ git checkout debian/changelog
diff --git a/debian/rules b/debian/rules
index dab54a7..0105f94 100755
--- a/debian/rules
+++ b/debian/rules
@@ -7,3 +7,13 @@ export RELEASE_BUILD=1
%:
dh $@
+
+# Run this target to build git-annex-standalone.deb
+build-standalone:
+ test -e .git
+ git checkout debian/changelog
+ quilt pop -a || true
+ QUILT_SERIES=series.standalone-build quilt push -a
+ debian/create-standalone-changelog
+ dpkg-buildpackage -rfakeroot
+ quilt pop -a
diff --git a/doc/bugs/Can__39__t_get_content_from_S3_with_s3-aws_library.mdwn b/doc/bugs/Can__39__t_get_content_from_S3_with_s3-aws_library.mdwn
new file mode 100644
index 0000000..f4af0cd
--- /dev/null
+++ b/doc/bugs/Can__39__t_get_content_from_S3_with_s3-aws_library.mdwn
@@ -0,0 +1,57 @@
+### Please describe the problem.
+I have lots of content stored in Amazon S3. Using git-annex from before commit 911ba8d972e4e7b151385d30c198598e1a0dfaca, I am able to ``git annex get`` from S3 and files are downloaded.
+Using a more recent version (eg that commit, or the current master, or release 20150409), I am unable to download the content.
+
+I'm not sure if my repo or remote is somehow misconfigured, or if there's something else going on here.
+
+--Walter
+
+### What steps will reproduce the problem?
+Use a version of git-annex with s3-aws
+
+### What version of git-annex are you using? On what operating system?
+Debian, versions as above
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+git annex get . --from cloud --debug
+[2015-04-19 22:23:37 BST] read: git ["--git-dir=../../../.git","--work-tree=../../..","--literal-pathspecs","show-ref","git-annex"]
+[2015-04-19 22:23:37 BST] read: git ["--git-dir=../../../.git","--work-tree=../../..","--literal-pathspecs","show-ref","--hash","refs/heads/git-annex"]
+[2015-04-19 22:23:37 BST] read: git ["--git-dir=../../../.git","--work-tree=../../..","--literal-pathspecs","log","refs/heads/git-annex..a51a912223d3d86f19762e387e3eae23c3024d2c","-n1","--pretty=%H"]
+[2015-04-19 22:23:37 BST] chat: git ["--git-dir=../../../.git","--work-tree=../../..","--literal-pathspecs","cat-file","--batch"]
+[2015-04-19 22:23:37 BST] read: git ["--git-dir=../../../.git","--work-tree=../../..","--literal-pathspecs","ls-files","--cached","-z","--","."]
+get IMG_7079.JPG (from cloud...) [2015-04-19 22:23:37 BST] chat: gpg ["--batch","--no-tty","--use-agent","--quiet","--trust-model","always","--decrypt"]
+
+failed
+get IMG_7080.JPG (from cloud...)
+failed
+
+
+
+git annex info cloud
+remote: cloud
+description: [cloud]
+uuid: be992080-b1db-11e1-8f79-1b10bb4092ef
+trust: semitrusted
+cost: 250.0
+type: S3
+creds: embedded in git repository (gpg encrypted)
+bucket: ffffffffffffffffffffffffff
+partsize: unlimited
+encryption: encrypted (to gpg keys: FFFFFFFFFFFF) (hybrid mode)
+chunking: none
+remote annex keys: 0
+remote annex size: 0 bytes
+
+
+git annex fsck -f cloud
+fsck IMG_6876.JPG (checking cloud...) (StatusCodeException (Status {statusCode = 301, statusMessage = "Moved Permanently"}) [("x-amz-request-id","275ADF5B1B77D514"),("x-amz-id-2","flWGBHOZYEZAohygAzBIZAYd7nBGkm3HpSMfJuhgRp3txXx20yJz7S4yRlNLwCs1cHUMyWc9JbA="),("Content-Type","application/xml"),("Transfer-Encoding","chunked"),("Date","Sun, 19 Apr 2015 22:23:15 GMT"),("Server","AmazonS3")] (CJ {expose = []})) failed
+
+
+
+# End of transcript or log.
+"""]]
diff --git a/doc/bugs/Proxy_support.mdwn b/doc/bugs/Proxy_support.mdwn
index ae6eaf6..2af63d7 100644
--- a/doc/bugs/Proxy_support.mdwn
+++ b/doc/bugs/Proxy_support.mdwn
@@ -17,3 +17,26 @@ Please provide any additional information below.
I don't use networkmanager if proxy information is obtained from it. There should be a fallback to environment variables.
[[!tag confirmed]]
+
+> Here's a patch that shows how to enable proxy support for the
+> parts of git-annex that use http-client and http-conduit:
+> <https://github.com/kiwiroy/git-annex/commit/18a3ceda1beb7c356541270f37ae4c0d56ada726>
+>
+> Other parts of git-annex use wget/curl and should already support
+> the environment variables.
+
+>> I had a closer look at this, and it turns out that http-client
+>> now enables http proxy support by default, when the environment variable
+>> is set. Since version 0.4.7. See `defaultProxy`.
+>>
+>> git-annex uses http-client for all its http access (either directly
+>> or through layers like http-conduit and DAV).
+>>
+>> So I don't need to change
+>> git-annex at all; it just needs to be built with a new enough version
+>> of http-client. This will happen for the linux autobuilders once the new
+>> version reaches Debian. I've updated the OSX autobuilder's http-client
+>> so it will already support proxying and anyone can built git-annex
+>> using the new http-client and get proxy support.
+>>
+>> Calling this [[done]] as nothing remains to do in git-annex. --[[Joey]]
diff --git a/doc/bugs/addurl_+_sync_vs_addurl_+_commit.mdwn b/doc/bugs/addurl_+_sync_vs_addurl_+_commit.mdwn
new file mode 100644
index 0000000..cb86405
--- /dev/null
+++ b/doc/bugs/addurl_+_sync_vs_addurl_+_commit.mdwn
@@ -0,0 +1,24 @@
+### Please describe the problem.
+
+I think this is what happened; I need to go back and check this again (maybe I was just misreading something) but I want to get it written down first.
+
+I've got a git repository, and I just ran git annex init. Then I ran git annex addurl a bunch of times, followed by git annex sync. The result was apparently a repository where the files downloaded by addurl were added using the SHA256 backend rather than the URL backend. I deleted the branches and tried again, but this time after calling git annex addurl a bunch of times I did a normal git commit. This time everything looked fine; the files were all listed in as present in the web remote.
+
+### What steps will reproduce the problem?
+
+[[!format sh """
+git annex init
+git annex addurl "https://archive.org/download/emularity_engine_jsmess/messnapple2e.js.gz" --file "messnapple2e.js.gz"
+git annex sync
+"""]]
+
+### What version of git-annex are you using? On what operating system?
+
+ git-annex version: 5.20150412-g2be4834
+ build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA TorrentParser
+ key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E MD5E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 MD5 WORM URL
+ remote types: git gcrypt S3 bup directory rsync web bittorrent webdav tahoe glacier ddar hook external
+ local repository version: 5
+ supported repository version: 5
+ upgrade supported from repository versions: 0 1 2 4
+This is on Linux.
diff --git a/doc/bugs/addurl_magnet_could_not_download_torrent_file.mdwn b/doc/bugs/addurl_magnet_could_not_download_torrent_file.mdwn
new file mode 100644
index 0000000..f00a63a
--- /dev/null
+++ b/doc/bugs/addurl_magnet_could_not_download_torrent_file.mdwn
@@ -0,0 +1,49 @@
+### Please describe the problem.
+
+Every time I try to `addurl` with `magnet:` I get this error message:
+
+ could not download torrent file
+
+### What steps will reproduce the problem?
+
+ git-annex addurl "magnet:?xt=urn:btih:b548b3b8efce813d71c9355832b4382680b8abf9"
+
+### What version of git-annex are you using? On what operating system?
+
+* git-annex 5.20150409
+* ubuntu 14.04 x64
+
+### Please provide any additional information below.
+
+[[!format sh """
+
+git-annex addurl magnet:?xt=urn:btih:b548b3b8efce813d71c9355832b4382680b8abf9
+(downloading torrent file...)
+
+04/13 17:16:15 [NOTICE] IPv4 DHT: listening on UDP port 6930
+
+04/13 17:16:15 [NOTICE] IPv4 BitTorrent: listening on TCP port 6890
+
+04/13 17:16:15 [NOTICE] IPv6 BitTorrent: listening on TCP port 6890
+[#3e3bb9 74KiB/74KiB(100%) CN:13 SD:1]
+04/13 17:16:33 [NOTICE] Download complete: [METADATA]b548b3b8efce813d71c9355832b4382680b8abf9
+
+04/13 17:16:33 [NOTICE] Saved metadata as ../.git/annex/misctmp/URL--magnet&c,63xt,61urn&cbtih&cb548b3b8efce813d71c9355832b4382680b8abf9/meta/b548b3b8efce813d71c9355832b4382680b8abf9.torrent.
+
+Download Results:
+gid |stat|avg speed |path/URI
+======+====+===========+=======================================================
+3e3bb9|OK | 0B/s|[MEMORY][METADATA]b548b3b8efce813d71c9355832b4382680b8abf9
+
+Status Legend:
+(OK):download completed.
+addurl magnet:?xt=urn:btih:b548b3b8efce813d71c9355832b4382680b8abf9
+ could not download torrent file
+failed
+git-annex: addurl: 1 failed
+
+"""]]
+
+> Looking at the code, it was looking for a file prefixed by ".torrent",
+> but of course that should be suffixed instead. So, [[fixed|done]]
+> --[[Joey]]
diff --git a/doc/bugs/encryption__61__none_doesn__39__t_work_with_enableremote.mdwn b/doc/bugs/encryption__61__none_doesn__39__t_work_with_enableremote.mdwn
index 9eecdf5..991d054 100644
--- a/doc/bugs/encryption__61__none_doesn__39__t_work_with_enableremote.mdwn
+++ b/doc/bugs/encryption__61__none_doesn__39__t_work_with_enableremote.mdwn
@@ -40,3 +40,5 @@ upgrade supported from repository versions: 0 1 2 4
# End of transcript or log.
"""]]
+
+[[!tag moreinfo]]
diff --git a/doc/bugs/false_positives_from_fsck_in_bare_repo.mdwn b/doc/bugs/false_positives_from_fsck_in_bare_repo.mdwn
index cb11639..215db11 100644
--- a/doc/bugs/false_positives_from_fsck_in_bare_repo.mdwn
+++ b/doc/bugs/false_positives_from_fsck_in_bare_repo.mdwn
@@ -43,3 +43,5 @@ $
# End of transcript or log.
"""]]
+
+[[!tag moreinfo]]
diff --git a/doc/bugs/fsck_reports_unsolvable_problem.mdwn b/doc/bugs/fsck_reports_unsolvable_problem.mdwn
new file mode 100644
index 0000000..d0164f8
--- /dev/null
+++ b/doc/bugs/fsck_reports_unsolvable_problem.mdwn
@@ -0,0 +1,20 @@
+### Please describe the problem.
+
+On my bare git-annex repo, `git annex fsck -q` reports:
+
+ ** No known copies exist of SHA256E-s1212237--d2edd369f6a9005e23f022c7d797b166c66b90defc561329dbafab9a0fc0c7fc.jpg
+
+`git log -SSA256E...` returns nothing. `git annex repair` and `git annex forget` do not fix the problem.
+
+This means that running `fsck` from cron or a script will now always fail. There should be a way to recover from this situation.
+
+### What steps will reproduce the problem?
+
+According to IRC this "can happen if you annexed a file and then deleted it without ever committing to git".
+
+
+### What version of git-annex are you using? On what operating system?
+
+5.20140717 from Ubuntu utopic
+
+[[!tag confirmed]]
diff --git a/doc/bugs/git-annex-shell_doesn__39__t_work_as_expected.mdwn b/doc/bugs/git-annex-shell_doesn__39__t_work_as_expected.mdwn
index 93d890d..f77f33a 100644
--- a/doc/bugs/git-annex-shell_doesn__39__t_work_as_expected.mdwn
+++ b/doc/bugs/git-annex-shell_doesn__39__t_work_as_expected.mdwn
@@ -117,3 +117,5 @@ git-annex: unknown command anarc.at
</pre>
Turning off `sshcaching` seems to work around the issue. Note that this happens even if the git repo is moved to a non-NFS filesystem, so I have the feeling it's not directly related to [this bugfix](http://source.git-annex.branchable.com/?p=source.git;a=commit;h=bd110516c09d318b298804efc4ee888270f3d601).
+
+> [[done]]
diff --git a/doc/bugs/git-annex_unused_--from_s3_doesn__39__t.mdwn b/doc/bugs/git-annex_unused_--from_s3_doesn__39__t.mdwn
index 07ae44e..db41d07 100644
--- a/doc/bugs/git-annex_unused_--from_s3_doesn__39__t.mdwn
+++ b/doc/bugs/git-annex_unused_--from_s3_doesn__39__t.mdwn
@@ -27,3 +27,5 @@ arch linux x86_64
### Please provide any additional information below.
The S3 remote is encrypted with the default "hybrid" method
+
+[[!tag moreinfo]]
diff --git a/doc/bugs/--list-tests_runs_tests.mdwn b/doc/bugs/list-tests_runs_tests.mdwn
index cea58db..cea58db 100644
--- a/doc/bugs/--list-tests_runs_tests.mdwn
+++ b/doc/bugs/list-tests_runs_tests.mdwn
diff --git a/doc/devblog/day_274__concurrent_annex_state.mdwn b/doc/devblog/day_274__concurrent_annex_state.mdwn
new file mode 100644
index 0000000..3aa73c0
--- /dev/null
+++ b/doc/devblog/day_274__concurrent_annex_state.mdwn
@@ -0,0 +1,42 @@
+Back working on `git annex get --jobs=N` today. It was going very well,
+until I realized I had a hard problem on my hands.
+
+The hard problem is that the AnnexState structure at the core of git-annex
+is not able to be shared amoung multiple threads at all. There's too much
+complicated mutable state going on in there for that to be feasible at all.
+
+In the git-annex assistant, which uses many threads, I long ago worked
+around this problem, by having a single shared AnnexState and when a thread
+needs to run an Annex action, it blocks until no other thread is using it.
+This worked ok for the assistant, with a little bit of thought to avoid
+long-duration Annex actions that could stall the rest of it.
+
+That won't work for concurrent `get` etc. I spent a while investigating maybe
+making AnnexState thread safe, but it's just not built for it. Too many
+ways that can go wrong. For example, there's a CatFileHandle in the
+AnnexState. If two threads are running, they can both try to talk to the
+same `git cat-file --batch` command at once, with bad results. Worse, yet,
+some parts of the code do things like modifying the AnnexState's Git repo
+to add environment variables to use when running git commands.
+
+It's not all gloom and doom though. Only very isolated parts of the code
+change the working directory or set environment variables. And the
+assistant has surely smoked out other thread concurrency problems already.
+And, separate `git-annex` programs can be run concurrently with no problems
+at all; it uses file locking to avoid different processes getting in
+each-others' way. So AnnexState is the only remaining obstacle to concurrency.
+
+So, here's how I've worked around it: When `git annex get -J10` is run,
+it will start by allocating 10 job slots. A fresh AnnexState will be
+created, and copied into each slot. Each time a job runs, it uses its
+slot's own AnnexState. This means 10 `git cat-file` processes,
+and maybe some contention over lock files, but generally, a nice, easy,
+and hopefully trouble-free multithreaded mode.
+
+And indeed, I've gotten `git annex get -J10` working robustly!
+And from there it was trivial to enable -J for `move` and `copy` and `mirror`
+too!
+
+The only real blocker to merging the concurrentprogress branch is some bugs
+in the ascii-progress library that make it draw very scrambled progress
+bars the way git-annex uses it.
diff --git a/doc/devblog/day_275-276__mostly_Windows.mdwn b/doc/devblog/day_275-276__mostly_Windows.mdwn
new file mode 100644
index 0000000..bcdc946
--- /dev/null
+++ b/doc/devblog/day_275-276__mostly_Windows.mdwn
@@ -0,0 +1,20 @@
+Mostly working on Windows recently. Fixed handling of git
+repos on different drive letters. Fixed crazy start menu loop. Worked around
+stange msysgit version problem.
+
+Also some more work on the `concurrentprogress` branch, making the progress
+display prettier.
+
+Added one nice new feature yesterday: `git annex info $dir` now includes a
+table of repositories that are storing files in the directory, with their
+sizes.
+
+ repositories containing these files:
+ 288.98 MB: ca9c5d52-f03a-11df-ac14-6b772ffe59f9 -- archive-5
+ 288.98 MB: f1c0ce8d-d848-4d21-988c-dd78eed172e8 -- archive-8
+ 10.48 MB: 587b9ccf-4548-4d6f-9765-27faecc4105f -- darkstar
+ 15.18 kB: 42d47daa-45fd-11e0-9827-9f142c1630b3 -- origin
+
+Nice thing about this feature is it's done for free, with no extra work other
+than a little bit of addition. All the heavy location lookup work was already
+being done to get the numcopies stats.
diff --git a/doc/devblog/day_277__thanks.mdwn b/doc/devblog/day_277__thanks.mdwn
new file mode 100644
index 0000000..de82769
--- /dev/null
+++ b/doc/devblog/day_277__thanks.mdwn
@@ -0,0 +1,20 @@
+Recent work has included improving `fsck --from remote` (and fixing a
+reversion caused by the relative path changes in January), and making
+annex.diskreserve be checked in more cases. And added a `git annex
+required` command for setting [[required_content]].
+
+Also, I want to thank several people for their work:
+
+* Roy sent a patch to enable http proxy support.. despite
+ having only learned some haskell by "30 mins with YAHT". I investigated
+ that more, and no patch is actually necessary, but just a newer version
+ of the http-client library.
+* CandyAngel has been posting lots of helpful comments on the website,
+ including [this tip](http://git-annex.branchable.com/forum/__34__git_annex_sync__34___synced_after_8_hours/#comment-890ca1381d800ac833ccbb8c5db175ea)
+ that significantly speeds up a large git repository.
+* Øyvind fixed a lot of typos throughout the git-annex
+ documentation.
+* Yaroslav has created a `git-annex-standalone.deb` package
+ that will work on any system where debian packages can be installed,
+ no matter how out of date it is (within reason), using the same
+ methods as the standalone tarball.
diff --git a/doc/forum/Cant_see_git-annex-shell_via_SSH_in_OSX.mdwn b/doc/forum/Cant_see_git-annex-shell_via_SSH_in_OSX.mdwn
new file mode 100644
index 0000000..76b1d5a
--- /dev/null
+++ b/doc/forum/Cant_see_git-annex-shell_via_SSH_in_OSX.mdwn
@@ -0,0 +1,119 @@
+### Sync Problems using SSH remote in OSX
+
+- Im trying to work out SSH remotes by trying to sync up repos on my home network, following the walkthrough.
+- I have two machines (mini and mbp ) running OSX Mavericks, with RLogin enabled for all users to enable ssh.
+- I can SSH into the remote machine and see *git-annex-shell*, which seems to have ok permissions
+
+```
+
+ johns-mbp:annex johnmccallum$ ssh john@johns-mini-5.home
+
+ Last login: Sun Apr 12 07:31:07 2015 from johns-mbp.home
+
+ johns-mini-5:~ john$ which git-annex-shell
+
+ /usr/local/bin/git-annex-shell
+
+ johns-mini-5:~ john$ ls -l /usr/local/bin/git-annex-shell
+
+ -rwxr-xr-x@ 1 john admin 668 12 Apr 07:03 /usr/local/bin/git-annex-shell
+
+```
+
+- Previously on mini I created and populated a repo
+
+```
+
+ 494 mkdir annex
+
+ 495 cd annex
+
+ 496 git init
+
+ 497 git annex init
+
+ 498 cp ~/Pictures/*.png .
+
+ 499 git annex add .
+
+ 500 git commit -a -m 'added png'
+
+```
+
+- I can git clone this repo to MBP by SSH
+
+
+```
+ johns-mbp:~ johnmccallum$ git clone ssh://john@johns-mini-5.home/Users/john/annex ~/annex
+
+ Cloning into '/Users/johnmccallum/annex'...
+
+ remote: Counting objects: 24, done.
+
+ remote: Compressing objects: 100% (19/19), done.
+
+ remote: Total 24 (delta 3), reused 0 (delta 0)
+
+ Receiving objects: 100% (24/24), done.
+
+ Resolving deltas: 100% (3/3), done.
+
+ Checking connectivity... done
+
+ johns-mbp:~ johnmccallum$ cd annex
+
+ johns-mbp:annex johnmccallum$ git annex init 'MBP'
+
+ init MBP (merging origin/git-annex into git-annex...)
+
+ (recording state in git...)
+
+ ok
+
+ (recording state in git...)
+
+ johns-mbp:annex johnmccallum$ ls -l
+
+ total 16
+
+ lrwxr-xr-x 1 johnmccallum staff 196 12 Apr 08:20 CoGe-Snapshot at 2013-03-22 - 11-27-20.png -> .git/annex/objects/gf/Xp/SHA256E-s367697-- fce3f47f218805cd9855ec3fd4203b52e83587148b34c8e706df512783eb7557.png/SHA256E-s367697--fce3f47f218805cd9855ec3fd4203b52e83587148b34c8e706df512783eb7557.png
+
+ lrwxr-xr-x 1 johnmccallum staff 196 12 Apr 08:20 delicious.png -> .git/annex/objects/ZJ/vX/SHA256E-s112714--057d0faa464f8d588c053dae460838d68ea7803d7eaf7330798679e63f92cecb.png/SHA256E-s112714--057d0faa464f8d588c053dae460838d68ea7803d7eaf7330798679e63f92cecb.png
+
+
+```
+
+ **HOWEVER** _git annex get_ fails as follows:
+
+```
+
+ johns-mbp:annex johnmccallum$ git annex get delicious.png
+
+ get delicious.png bash: git-annex-shell: command not found
+
+ Remote origin does not have git-annex installed; setting annex-ignore
+
+ This could be a problem with the git-annex installation on the remote. Please make sure that git-annex-shell is available in PATH when you ssh into the remote. Once you have fixed the git-annex installation, run: git config remote.origin.annex-ignore false
+ (not available)
+ Try making some of these repositories available:
+ 129620b2-91b1-4541-b7b1-9e5a9d31d5d3 -- john@johns-mini-5.home:~/annex
+ failed
+ git-annex: get: 1 failed
+
+```
+
+This is not the case on the remote host when I SSH in as the same user
+
+```
+
+ johns-mini-5:~ john$ which git-annex-shell
+
+
+ /usr/local/bin/git-annex-shell
+
+```
+
+
+ The only thread on this seems to be https://git-annex.branchable.com/forum/not_finding_git-annex-shell_on_remote/ and Im at a loss to understand it.
+
+Any suggestions would be welcome
diff --git a/doc/forum/How_do_I_hide_files_not_present_in_the_local_annex__63__.mdwn b/doc/forum/How_do_I_hide_files_not_present_in_the_local_annex__63__.mdwn
new file mode 100644
index 0000000..72e39cc
--- /dev/null
+++ b/doc/forum/How_do_I_hide_files_not_present_in_the_local_annex__63__.mdwn
@@ -0,0 +1,2 @@
+Files only present in remotes show up as broken symlinks. That's great for knowing what files exist, but sometimes I just want to browse the files that are actually present. In this case, the many broken symlinks are just clutter.
+Is there a straightforward way to switch to a view that shows only locally present files?
diff --git a/doc/forum/__34__git_annex_sync__34___synced_after_8_hours.mdwn b/doc/forum/__34__git_annex_sync__34___synced_after_8_hours.mdwn
new file mode 100644
index 0000000..2804828
--- /dev/null
+++ b/doc/forum/__34__git_annex_sync__34___synced_after_8_hours.mdwn
@@ -0,0 +1,40 @@
+Hi,
+
+The git annex seem has problem with many files.
+
+For synchronize, the operation lasts 8 hours. Here the sample for synchronizing to my local remote server (sbackup)
+
+start at **20:12** / end at **04:13** / total time = ~ **8 hours**
+
+ git annex sync sbackup
+
+ [2015-04-13 20:12:26 CEST] call: git ["--git-dir=.git","--work-tree=.","push","sbackup","+git-annex:synced/git-annex","master:synced/master"]
+ Counting objects: 792155, done.
+ Delta compression using up to 4 threads.
+ Compressing objects: 100% (789727/789727), done.
+ Writing objects: 100% (792155/792155), 75.73 MiB | 2.35 MiB/s, done.
+ Total 792155 (delta 449604), reused 1 (delta 0)
+ To partage@192.168.253.53:/data/samba/git-annex/docshare
+ ae182f0..fad3aca git-annex -> synced/git-annex
+ e0e67fe..5226a6f master -> synced/master
+ [2015-04-14 04:13:05 CEST] read: git ["--git-dir=.git","--work-tree=.","push","sbackup","git-annex","master"]
+ ok
+
+Another problem, I do not know exactly how many files I own (i use **find . | wc -l** )
+
+.git = 1250633
+
+documents = 61124
+
+medias = 199504
+
+it seem i own ~250000 files, but in the .git **1.2 millions files**.
+
+The following command also very slow
+
+ git annex info
+
+
+What the best pratices for use git annex with many files > 500 000 or maintenance & reduction/cleaning method
+
+Thanks
diff --git a/doc/forum/ga-ncdu/comment_3_c5ce3b663de76b50754de70b3fb23bf0._comment b/doc/forum/ga-ncdu/comment_3_c5ce3b663de76b50754de70b3fb23bf0._comment
new file mode 100644
index 0000000..318441e
--- /dev/null
+++ b/doc/forum/ga-ncdu/comment_3_c5ce3b663de76b50754de70b3fb23bf0._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="CandyAngel"
+ subject="comment 3"
+ date="2015-04-12T22:12:53Z"
+ content="""
+Whelp, didn't realise it had been over two weeks! Got caught up in other stuff (VR).
+
+[Here's the bitbucket repository!](https://bitbucket.org/CandyAngel/ga-ncdu)
+
+I've coded my own JSON output so it doesn't depend on any non-core Perl modules.
+
+Please let me know of any bugs, feature requests etc. Feedback would be appreciated, even just letting me know you are using it would be great!
+
+ ga-ncdu.pl ~/mah_annex | ncdu -f-
+"""]]
diff --git a/doc/git-annex-expire.mdwn b/doc/git-annex-expire.mdwn
index ce07d79..8629036 100644
--- a/doc/git-annex-expire.mdwn
+++ b/doc/git-annex-expire.mdwn
@@ -32,7 +32,7 @@ expired.
* `--no-act`
- Print out what would be done, but not not actually expite or unexpire
+ Print out what would be done, but not not actually expire or unexpire
any repositories.
* `--activity=Name`
diff --git a/doc/git-annex-fromkey.mdwn b/doc/git-annex-fromkey.mdwn
index 9569c42..1126e82 100644
--- a/doc/git-annex-fromkey.mdwn
+++ b/doc/git-annex-fromkey.mdwn
@@ -13,7 +13,7 @@ in the git repository to link to a specified key.
If the key and file are not specified on the command line, they are
instead read from stdin. Any number of lines can be provided in this
-mode, each containing a key and filename, sepearated by a single space.
+mode, each containing a key and filename, separated by a single space.
# OPTIONS
diff --git a/doc/git-annex-info.mdwn b/doc/git-annex-info.mdwn
index 52b145c..31c4227 100644
--- a/doc/git-annex-info.mdwn
+++ b/doc/git-annex-info.mdwn
@@ -26,6 +26,10 @@ for the repository as a whole.
Enable JSON output. This is intended to be parsed by programs that use
git-annex. Each line of output is a JSON object.
+* `--bytes`
+
+ Show file sizes in bytes, disabling the default nicer units.
+
* file matching options
When a directory is specified, the [[git-annex-matching-options]](1)
diff --git a/doc/git-annex-lock.mdwn b/doc/git-annex-lock.mdwn
index aa03d4c..21be9f5 100644
--- a/doc/git-annex-lock.mdwn
+++ b/doc/git-annex-lock.mdwn
@@ -1,6 +1,6 @@
# NAME
-git-annex lock - unco unlock command
+git-annex lock - undo unlock command
# SYNOPSIS
diff --git a/doc/git-annex-preferred-content.mdwn b/doc/git-annex-preferred-content.mdwn
index 9ea19ce..49512f4 100644
--- a/doc/git-annex-preferred-content.mdwn
+++ b/doc/git-annex-preferred-content.mdwn
@@ -10,6 +10,13 @@ using `git annex vicfg` or `git annex wanted`.
They are used by the `--auto` option, by `git annex sync --content`,
and by the git-annex assistant.
+While preferred content expresses a preference, it can be overridden
+by simply using `git annex drop`. On the other hand, required content
+settings are enforced; `git annex drop` will refuse to drop a file if
+doing so would violate its required content settings. A repository's
+required content can be configured using `git annex vicfg` or
+`git annex required`.
+
Preferred content expressions are similar, but not identical to
the [[git-annex-matching-options]](1), just without the dashes.
For example:
@@ -18,7 +25,7 @@ For example:
The main differences are that `exclude=` and `include=` always
match relative to the top of the git repository, and that there is
-no equivilant to `--in`.
+no equivalent to `--in`.
For more details about preferred content expressions, see
See <https://git-annex.branchable.com/preferred_content/>
diff --git a/doc/git-annex-readpresentkey.mdwn b/doc/git-annex-readpresentkey.mdwn
index 3e552e0..6dcc2ca 100644
--- a/doc/git-annex-readpresentkey.mdwn
+++ b/doc/git-annex-readpresentkey.mdwn
@@ -9,7 +9,7 @@ git annex readpresentkey `key uuid`
# DESCRIPTION
This plumbing-level command reads git-annex's records about whether
-the specified key's content is present in the remote with the speficied
+the specified key's content is present in the remote with the specified
uuid.
It exits 0 if the key is recorded to be present and 1 if not.
diff --git a/doc/git-annex-required.mdwn b/doc/git-annex-required.mdwn
new file mode 100644
index 0000000..cde3cd6
--- /dev/null
+++ b/doc/git-annex-required.mdwn
@@ -0,0 +1,29 @@
+# NAME
+
+git-annex required - get or set required content expression
+
+# SYNOPSIS
+
+git annex required `repository [expression]`
+
+# DESCRIPTION
+
+When run with an expression, configures the content that is required
+to be held in the archive. See [[git-annex-preferred-content]](1)
+
+For example:
+
+ git annex required . "include=*.mp3 or include=*.ogg"
+
+Without an expression, displays the current required content setting
+of the repository.
+
+# SEE ALSO
+
+[[git-annex]](1)
+
+# AUTHOR
+
+Joey Hess <id@joeyh.name>
+
+Warning: Automatically converted into a man page by mdwn2man. Edit with care.
diff --git a/doc/git-annex-shell.mdwn b/doc/git-annex-shell.mdwn
index e43d516..4185774 100644
--- a/doc/git-annex-shell.mdwn
+++ b/doc/git-annex-shell.mdwn
@@ -86,7 +86,7 @@ to git-annex-shell are:
* -- fields=val fields=val.. --
- Additional fields may be specified this way, to retain compatability with
+ Additional fields may be specified this way, to retain compatibility with
past versions of git-annex-shell (that ignore these, but would choke
on new dashed options).
diff --git a/doc/git-annex.mdwn b/doc/git-annex.mdwn
index 6fd10ae..3dc54a3 100644
--- a/doc/git-annex.mdwn
+++ b/doc/git-annex.mdwn
@@ -264,8 +264,16 @@ subdirectories).
* `groupwanted groupname [expression]`
+ Get or set groupwanted expression.
+
See [[git-annex-groupwanted]](1) for details.
+* `required repository [expression]`
+
+ Get or set required content expression.
+
+ See [[git-annex-required]](1) for details.
+
* `schedule repository [expression]`
Get or set scheduled jobs.
diff --git a/doc/git-union-merge.mdwn b/doc/git-union-merge.mdwn
index d0ceb3a..ca06d2f 100644
--- a/doc/git-union-merge.mdwn
+++ b/doc/git-union-merge.mdwn
@@ -12,7 +12,7 @@ Does a union merge between two refs, storing the result in the
specified newref.
The union merge will always succeed, but assumes that files can be merged
-simply by concacenating together lines from all the oldrefs, in any order.
+simply by concatenating together lines from all the oldrefs, in any order.
So, this is useful only for branches containing log-type data.
Note that this does not touch the checked out working copy. It operates
diff --git a/doc/install/Windows.mdwn b/doc/install/Windows.mdwn
index 5080fc9..3d4b7a0 100644
--- a/doc/install/Windows.mdwn
+++ b/doc/install/Windows.mdwn
@@ -25,7 +25,7 @@ A daily build is also available, thanks to Yury V. Zaytsev and
## building it yourself
To build git-annex from source on Windows, you need to install
-the Haskell Platform, Mingw, and Cygwin. Use Cygwin to install:
+the Haskell Platform and Cygwin. Use Cygwin to install these packages:
gcc rsync git wget ssh gnupg
Once the prerequisites are installed, run:
@@ -35,5 +35,8 @@ Once the prerequisites are installed, run:
cd gitannex
build
+Note that git from Cygwin is able to clone git-annex's git repository;
+Msysgit cannot due to some characters in filenames.
+
(To build the git-annex installer, you also need to install the NullSoft
installer system.)
diff --git a/doc/news/version_5.20150317.mdwn b/doc/news/version_5.20150317.mdwn
deleted file mode 100644
index fb88941..0000000
--- a/doc/news/version_5.20150317.mdwn
+++ /dev/null
@@ -1,45 +0,0 @@
-git-annex 5.20150317 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
- * fsck: Incremental fsck uses sqlite to store its records, instead
- of abusing the sticky bit. Existing sticky bits are ignored;
- incremental fscks started by old versions won't be resumed by
- this version.
- * fsck: Multiple incremental fscks of different repos (including remotes)
- can now be running at the same time in the same repo without it
- getting confused about which files have been checked for which remotes.
- * unannex: Refuse to unannex when repo is too new to have a HEAD,
- since in this case there must be staged changes in the index
- (if there is anything to unannex), and the unannex code path
- needs to run with a clean index.
- * Linux standalone: Set LOCPATH=/dev/null to work around
- https://ghc.haskell.org/trac/ghc/ticket/7695
- This prevents localization from working, but git-annex
- is not localized anyway.
- * sync: As well as the synced/git-annex push, attempt a
- git-annex:git-annex push, as long as the remote branch
- is an ancestor of the local branch, to better support bare git repos.
- (This used to be done, but it forgot to do it since version 4.20130909.)
- * When re-execing git-annex, use current program location, rather than
- ~/.config/git-annex/program, when possible.
- * Submodules are now supported by git-annex!
- * metadata: Fix encoding problem that led to mojibake when storing
- metadata strings that contained both unicode characters and a space
- (or '!') character.
- * Also potentially fixes encoding problem when embedding credentials
- that contain unicode characters.
- * sync: Fix committing when in a direct mode repo that has no HEAD ref.
- (For example, a newly checked out git submodule.)
- * Added SETURIPRESENT and SETURIMISSING to external special remote protocol,
- useful for things like ipfs that don't use regular urls.
- * addurl: Added --raw option, which bypasses special handling of quvi,
- bittorrent etc urls.
- * git-annex-shell: Improve error message when the specified repository
- doesn't exist or git config fails for some reason.
- * fromkey --force: Skip test that the key has its content in the annex.
- * fromkey: Add stdin mode.
- * registerurl: New plumbing command for mass-adding urls to keys.
- * remotedaemon: Fixed support for notifications of changes to gcrypt
- remotes, which was never tested and didn't quite work before."""]]
-
-Update: The OSX build for this release was missing the webapp. An updated
-build is now available fixing that problem.
diff --git a/doc/news/version_5.20150420.mdwn b/doc/news/version_5.20150420.mdwn
new file mode 100644
index 0000000..e084735
--- /dev/null
+++ b/doc/news/version_5.20150420.mdwn
@@ -0,0 +1,33 @@
+git-annex 5.20150420 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+ * Fix activity log parsing, which caused the log to not retain
+ activity from other uuids.
+ * Union merge could fall over if there was a file in the repository
+ with the same name as a git ref. Now fixed.
+ * info dir: Added information about repositories that
+ contain files in the specified directory.
+ * info: Added --bytes option.
+ * bittorrent: Fix handling of magnet links.
+ * When a key's size is unknown, still check the annex.diskreserve,
+ and avoid getting content if the disk is too full.
+ * Fix fsck --from a git remote in a local directory, and from
+ a directory special remote.
+ This was a reversion caused by the relative path changes in 5.20150113.
+ * fsck --from remote: When bad content is found in the remote,
+ and the local repo does not have a copy of the content, preserve
+ the bad content in .git/annex/bad/ to avoid further data loss.
+ * fsck --from remote: Avoid downloading a key if it would go over
+ the annex.diskreserve limit.
+ * required: New command, like wanted, but for required content.
+ * Removed dependency on haskell SHA library,
+ instead using cryptohash &gt;= 0.11.0.
+ * Make repo init more robust.
+ * New debian/rules build-standalone target, which generates a
+ git-annex-standalone.deb that should work on many old Debian etc
+ systems. Thanks, Yaroslav Halchenko.
+ * Windows: Renamed start menu file to avoid loop in some versions
+ of Windows where the menu file is treated as a git-annex program.
+ * Windows: Fixed support of remotes on other drives.
+ (A reversion introduced in version 5.20150113.)
+ * Windows: Bundled versions of rsync, wget, ssh, and gpg from
+ cygwin all updated. Thanks, Yury V. Zaytsev."""]] \ No newline at end of file
diff --git a/doc/preferred_content.mdwn b/doc/preferred_content.mdwn
index 557305a..d3aa4fa 100644
--- a/doc/preferred_content.mdwn
+++ b/doc/preferred_content.mdwn
@@ -44,7 +44,7 @@ options in commands like this:
git annex get --include='*.mp3' --and -'(' --not --largerthan=100mb -')'
-The equivilant preferred content expression looks like this:
+The equivalent preferred content expression looks like this:
include=*.mp3 and (not largerthan=100mb)
@@ -63,7 +63,7 @@ to not retain those files, like this:
### difference: no "in="
-Preferred content expressions have no direct equivilant to `--in`.
+Preferred content expressions have no direct equivalent to `--in`.
Often, it's best to add repositories to groups, and match against
the groups in a preferred content expression. So rather than
@@ -146,7 +146,7 @@ expression tuned for your needs, and every repository you put in this
group and make its preferred content be "groupwanted" will use it.
For example, the archive group only wants to archive 1 copy of each file,
-spread amoung every repository in the group.
+spread among every repository in the group.
Here's how to configure a group named redundantarchive, that instead
wants to contain 3 copies of each file:
diff --git a/doc/privacy.mdwn b/doc/privacy.mdwn
index 3ac4b1e..5be735d 100644
--- a/doc/privacy.mdwn
+++ b/doc/privacy.mdwn
@@ -41,7 +41,7 @@ output you post, and feel free to remove identifying information.
Note that the git-annex assistant *does* sanitize XMPP protocol information
logged when debugging is enabled.
-If you prefer not to post information publicaly, you can send a GPG
+If you prefer not to post information publically, you can send a GPG
encrypted mail to Joey Hess <id@joeyh.name> (gpg key ID 2512E3C7).
Or you can post a public bug report, and send a followup email with private
details.
diff --git a/doc/related_software.mdwn b/doc/related_software.mdwn
index 4b6f42d..a0462f5 100644
--- a/doc/related_software.mdwn
+++ b/doc/related_software.mdwn
@@ -4,9 +4,9 @@ designed to interoperate with it.
* The [[git-annex assistant|assistant]] is included in git-annex,
and extends its use cases into new territory.
* [gitlab-shell](https://gitlab.com/gitlab-org/gitlab-shell) supports
- git-annex. So git-annex can be used with repositries served by Gitlab,
+ git-annex. So git-annex can be used with repositories served by GitLab,
including gitlab.com, or deploy your own.
- [See Gitlab's announcment](https://about.gitlab.com/2015/02/17/gitlab-annex-solves-the-problem-of-versioning-large-binaries-with-git/)
+ [See GitLab's announcement](https://about.gitlab.com/2015/02/17/gitlab-annex-solves-the-problem-of-versioning-large-binaries-with-git/)
* Emacs Org mode can auto-commit attached files to git-annex.
* [git annex darktable integration](https://github.com/xxv/darktable-git-annex)
* [Magit](http://github.com/magit/magit), an Emacs mode for Git, has
diff --git a/doc/required_content.mdwn b/doc/required_content.mdwn
index 91c5614..e17951d 100644
--- a/doc/required_content.mdwn
+++ b/doc/required_content.mdwn
@@ -6,7 +6,8 @@ archival repositories, and also require that one copy be stored offsite.
The format of required content expressions is the same as
[[preferred_content]] expressions.
-Required content settings can be edited using `git annex vicfg`.
+Required content settings can be edited using `git annex vicfg`
+or set using `git annex required`.
Each repository can have its own settings, and other repositories will
try to honor those settings when interacting with it.
diff --git a/doc/tips/Synology_NAS_and_git_annex.mdwn b/doc/tips/Synology_NAS_and_git_annex.mdwn
index 50c6044..8a6d282 100644
--- a/doc/tips/Synology_NAS_and_git_annex.mdwn
+++ b/doc/tips/Synology_NAS_and_git_annex.mdwn
@@ -19,7 +19,7 @@ This is known to work with DSM 4.3-3810 Update 1 and git-annex standalone versio
(2) Setup ssh key based authentication with the Synology for each computer you want to sync with it. You want a specific key that is used only by git-annex, for each computer. Again, many good guides online.
-(3) In the Synology .ssh/authorized_keys file for your account, add (substituing your username)
+(3) In the Synology .ssh/authorized_keys file for your account, add (substituting your username)
[[!format sh """
command="/home/$yourusername/.ssh/git-annex-shell"
"""]]
diff --git a/doc/tips/file_manager_integration.mdwn b/doc/tips/file_manager_integration.mdwn
index 4429b90..cd4218f 100644
--- a/doc/tips/file_manager_integration.mdwn
+++ b/doc/tips/file_manager_integration.mdwn
@@ -24,9 +24,9 @@ Even more recent git-annex comes with built-in integration with Konqueror.
This is set up by git-annex creating a
`~/.kde/share/kde4/services/ServiceMenus/git-annex.desktop file.
-## XFCE (Thunar)
+## Xfce (Thunar)
-XFCE uses the Thunar file manager, which can also be easily configured to
+Xfce uses the Thunar file manager, which can also be easily configured to
allow for custom actions. Just go to the "Configure custom actions..." item
in the "Edit" menu, and create a custom action for get, drop, and undo with the
following commands:
@@ -72,12 +72,12 @@ This gives me the resulting config on disk, in `.config/Thunar/uca.xml`:
<video-files/>
</action>
-The complete instructions on how to setup actions is [in the XFCE documentation](http://docs.xfce.org/xfce/thunar/custom-actions).
+The complete instructions on how to setup actions is [in the Xfce documentation](http://docs.xfce.org/xfce/thunar/custom-actions).
## OS X (Finder)
For OS X, it is possible to get context menus in Finder. Due to how OS X
-deals with sym links, one needs to operate on folders if using indirect
+deals with symlinks, one needs to operate on folders if using indirect
mode. Direct mode operation has not been tested.
1. Open Automator and create a new Service.
diff --git a/doc/tips/megaannex.mdwn b/doc/tips/megaannex.mdwn
index 46bab4a..b547aaa 100644
--- a/doc/tips/megaannex.mdwn
+++ b/doc/tips/megaannex.mdwn
@@ -1,7 +1,7 @@
megaannex 0.2.0
=========
-Hook program for gitannex to use mega.co.nz as backend
+Hook program for git-annex to use mega.co.nz as backend
# Requirements:
diff --git a/doc/tips/using_gitolite_with_git-annex.mdwn b/doc/tips/using_gitolite_with_git-annex.mdwn
index 31f34c6..0d20c93 100644
--- a/doc/tips/using_gitolite_with_git-annex.mdwn
+++ b/doc/tips/using_gitolite_with_git-annex.mdwn
@@ -92,7 +92,7 @@ Make the ADC directory, and a "ua" subdirectory.
mkdir -p /usr/local/lib/gitolite/adc/ua
</pre>
-Install the git-annex-shell ADC into the "ua" subdirectory from the gitolie repository.
+Install the git-annex-shell ADC into the "ua" subdirectory from the gitolite repository.
<pre>
cd /usr/local/lib/gitolite/adc/ua/
diff --git a/doc/tips/using_the_web_as_a_special_remote.mdwn b/doc/tips/using_the_web_as_a_special_remote.mdwn
index 087d2e2..2dc3419 100644
--- a/doc/tips/using_the_web_as_a_special_remote.mdwn
+++ b/doc/tips/using_the_web_as_a_special_remote.mdwn
@@ -81,7 +81,7 @@ it is a video and download the video content for offline viewing.
Later, in another clone of the repository, you can run `git annex get` on
the file and it will also be downloaded with the help of quvi. This works
even if the video host has transcoded or otherwise changed the video
-in the meantime; the assumption is that these video files are equivilant.
+in the meantime; the assumption is that these video files are equivalent.
There is an `annex.quvi-options` configuration setting that can be used
to pass parameters to quvi. For example, you could set `git config
diff --git a/doc/todo/addurl___8211__force-torrent_option.mdwn b/doc/todo/addurl___8211__force-torrent_option.mdwn
new file mode 100644
index 0000000..acbb953
--- /dev/null
+++ b/doc/todo/addurl___8211__force-torrent_option.mdwn
@@ -0,0 +1 @@
+There are sites that don't provide direct links to `.torrent` files. Currently there is no way to download contents of such torrents with `git annex`, it simply uses web remote instead of bittorrent. Something like `--force-torrent` option could help here.
diff --git a/doc/todo/command_line_interface_for_required_content_setthings.mdwn b/doc/todo/command_line_interface_for_required_content_setthings.mdwn
index 1334b15..30889f8 100644
--- a/doc/todo/command_line_interface_for_required_content_setthings.mdwn
+++ b/doc/todo/command_line_interface_for_required_content_setthings.mdwn
@@ -9,3 +9,5 @@ used feature, and vicfg can already configure it.
one when it comes to that. Oh well.)
--[[Joey]]
+
+> [[done]] --[[Joey]]
diff --git a/doc/todo/git-annex-standalone_Debian_package.mdwn b/doc/todo/git-annex-standalone_Debian_package.mdwn
new file mode 100644
index 0000000..e45a728
--- /dev/null
+++ b/doc/todo/git-annex-standalone_Debian_package.mdwn
@@ -0,0 +1,3 @@
+As proposed with a sketch in https://github.com/joeyh/git-annex/pull/39, for DataLad we would need to get recent annex on older Debian/Ubuntu releases to get our testing farm and perspective users equipped with bleeding edge annex
+
+> merged [[done]] --[[Joey]]
diff --git a/doc/transferring_data.mdwn b/doc/transferring_data.mdwn
index d1ec596..2aab3b0 100644
--- a/doc/transferring_data.mdwn
+++ b/doc/transferring_data.mdwn
@@ -9,7 +9,7 @@ If a data transfer is interrupted, git-annex retains the partial transfer
to allow it to be automatically resumed later.
It's equally easy to transfer a single file to or from a repository,
-or to launch a retrievel of a massive pile of files from whatever
+or to launch a retrieval of a massive pile of files from whatever
repositories they are scattered amongst.
git-annex automatically uses whatever remotes are currently accessible,
diff --git a/doc/trust.mdwn b/doc/trust.mdwn
index 1fd47fd..a33c6dd 100644
--- a/doc/trust.mdwn
+++ b/doc/trust.mdwn
@@ -45,7 +45,7 @@ archival drive, from which you rarely or never remove content. Deciding
when it makes sense to trust the tracking info is up to you.
One way to handle this is just to use `--force` when a command cannot
-access a remote you trust. Or to use `--trust` to specify a repisitory to
+access a remote you trust. Or to use `--trust` to specify a repository to
trust temporarily.
To configure a repository as fully and permanently trusted,
@@ -55,5 +55,5 @@ use the `git annex trust` command.
This is used to indicate that you have no trust that the repository
exists at all. It's appropriate to use when a drive has been lost,
-or a directory irretrevably deleted. It will make git-annex avoid
+or a directory irretrievably deleted. It will make git-annex avoid
even showing the repository as a place where data might still reside.
diff --git a/doc/upgrades.mdwn b/doc/upgrades.mdwn
index 0b43a97..6cf2784 100644
--- a/doc/upgrades.mdwn
+++ b/doc/upgrades.mdwn
@@ -1,9 +1,9 @@
-Occasionally improvments are made to how git-annex stores its data,
+Occasionally improvements are made to how git-annex stores its data,
that require an upgrade process to convert repositories made with an older
version to be used by a newer version. It's annoying, it should happen
rarely, but sometimes, it's worth it.
-There's a committment that git-annex will always support upgrades from all
+There's a commitment that git-annex will always support upgrades from all
past versions. After all, you may have offline drives from an earlier
git-annex, and might want to use them with a newer git-annex.
diff --git a/git-annex.cabal b/git-annex.cabal
index 093c45d..e49bb9a 100644
--- a/git-annex.cabal
+++ b/git-annex.cabal
@@ -1,5 +1,5 @@
Name: git-annex
-Version: 5.20150409
+Version: 5.20150420
Cabal-Version: >= 1.8
License: GPL-3
Maintainer: Joey Hess <id@joeyh.name>
@@ -104,13 +104,13 @@ Flag network-uri
Executable git-annex
Main-Is: git-annex.hs
Build-Depends: MissingH, hslogger, directory, filepath,
- containers, utf8-string, mtl (>= 2),
- bytestring, old-locale, time, dataenc, SHA, process, json,
+ containers (>= 0.5.0.0), utf8-string, mtl (>= 2),
+ bytestring, old-locale, time, dataenc, process, json,
base (>= 4.5 && < 4.9), monad-control, exceptions (>= 0.6), transformers,
IfElse, text, QuickCheck >= 2.1, bloomfilter, edit-distance,
SafeSemaphore, uuid, random, dlist, unix-compat, async, stm (>= 2.3),
data-default, case-insensitive, http-conduit, http-types,
- cryptohash (>= 0.10.0),
+ cryptohash (>= 0.11.0),
esqueleto, persistent-sqlite, persistent, persistent-template,
monad-logger, resourcet
CC-Options: -Wall
diff --git a/man/git-annex-add.1 b/man/git-annex-add.1
index d732d84..5a8adfb 100644
--- a/man/git-annex-add.1
+++ b/man/git-annex-add.1
@@ -1,6 +1,6 @@
.TH git-annex-add 1
.SH NAME
-git\-annex add \- adds files to the git annex
+git-annex add \- adds files to the git annex
.PP
.SH SYNOPSIS
git annex add \fB[path ...]\fP
@@ -29,13 +29,13 @@ Add gitignored files.
Specifies which key\-value backend to use.
.IP
.IP "file matching options"
-Many of the git\-annex\-matching\-options(1)
+Many of the git-annex\-matching\-options(1)
can be used to specify files to add.
.IP
For example: \fB\-\-largerthan=1GB\fP
.IP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-addunused.1 b/man/git-annex-addunused.1
index 12440c0..95b0692 100644
--- a/man/git-annex-addunused.1
+++ b/man/git-annex-addunused.1
@@ -1,6 +1,6 @@
.TH git-annex-addunused 1
.SH NAME
-git\-annex addunused \- add back unused files
+git-annex addunused \- add back unused files
.PP
.SH SYNOPSIS
git annex addunused \fB[number|range ...]\fP
@@ -12,7 +12,7 @@ as listed by the last \fBgit annex unused\fP.
The files will have names starting with "unused."
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-addurl.1 b/man/git-annex-addurl.1
index 17308a9..62c8082 100644
--- a/man/git-annex-addurl.1
+++ b/man/git-annex-addurl.1
@@ -1,6 +1,6 @@
.TH git-annex-addurl 1
.SH NAME
-git\-annex addurl \- add urls to annex
+git-annex addurl \- add urls to annex
.PP
.SH SYNOPSIS
git annex addurl \fB[url ...]\fP
@@ -49,7 +49,7 @@ It can also be negative; \fB\-\-pathdepth=\-2\fP will use the last
two parts of the url.
.IP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-assistant.1 b/man/git-annex-assistant.1
index 688cd89..b1368cc 100644
--- a/man/git-annex-assistant.1
+++ b/man/git-annex-assistant.1
@@ -1,6 +1,6 @@
.TH git-annex-assistant 1
.SH NAME
-git\-annex assistant \- automatically sync changes
+git-annex assistant \- automatically sync changes
.PP
.SH SYNOPSIS
git annex assistant
@@ -9,14 +9,14 @@ git annex assistant
Watches for changes to files in the current directory and its subdirectories,
and automatically syncs them to other remotes.
.PP
-For more details about the git\-annex assistant, see
-<https://git\-annex.branchable.com/assistant/>
+For more details about the git-annex assistant, see
+<https://git-annex.branchable.com/assistant/>
.PP
.SH OPTIONS
.IP "\fB\-\-autostart\fP"
.IP
Automatically starts the assistant running in each repository listed
-in the file \fB~/.config/git\-annex/autostart\fP
+in the file \fB~/.config/git-annex/autostart\fP
.IP
This is typically started at boot, or when you log in.
.IP
@@ -31,7 +31,7 @@ Avoid forking to the background.
Stop a running daemon.
.IP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-checkpresentkey.1 b/man/git-annex-checkpresentkey.1
index d75f313..725470a 100644
--- a/man/git-annex-checkpresentkey.1
+++ b/man/git-annex-checkpresentkey.1
@@ -1,6 +1,6 @@
.TH git-annex-checkpresentkey 1
.SH NAME
-git\-annex checkpresentkey \- check if key is present in remote
+git-annex checkpresentkey \- check if key is present in remote
.PP
.SH SYNOPSIS
git annex \fBkey remote\fP
@@ -14,7 +14,7 @@ be present. If there is a problem checking the remote, the special
exit code 100 is used, and an error message is output to stderr.
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-contentlocation.1 b/man/git-annex-contentlocation.1
index 39cfa3d..f8df807 100644
--- a/man/git-annex-contentlocation.1
+++ b/man/git-annex-contentlocation.1
@@ -1,6 +1,6 @@
.TH git-annex-contentlocation 1
.SH NAME
-git\-annex contentlocation \- looks up content for a key
+git-annex contentlocation \- looks up content for a key
.PP
.SH SYNOPSIS
git annex contentlocation \fB[key ...]\fP
@@ -12,10 +12,10 @@ present in the local repository, nothing is output, and it exits nonzero.
.PP
Note that in direct mode, the file will typically be in the git work
tree, and while its content should correspond to the key, the file
-could become modified at any time after git\-annex checks it.
+could become modified at any time after git-annex checks it.
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-copy.1 b/man/git-annex-copy.1
index d51e977..b2c46b7 100644
--- a/man/git-annex-copy.1
+++ b/man/git-annex-copy.1
@@ -1,6 +1,6 @@
.TH git-annex-copy 1
.SH NAME
-git\-annex copy \- copy content of files to/from another repository
+git-annex copy \- copy content of files to/from another repository
.PP
.SH SYNOPSIS
git annex copy \fB[path ...] [\-\-from=remote|\-\-to=remote]\fP
@@ -21,7 +21,7 @@ to the specified remote.
.IP "\fB\-\-auto\fP"
Rather than copying all files, only copy files that don't yet have
the desired number of copies, or that are preferred content of the
-destination repository. See git\-annex\-preferred\-content(1)
+destination repository. See git-annex\-preferred\-content(1)
.IP
.IP "\fB\-\-fast\fP"
Avoid contacting the remote to check if it has every file when copying
@@ -34,20 +34,20 @@ Force checking the remote for every file when copying \-\-from it.
Rather than specifying a filename or path to copy, this option can be
used to copy all available versions of all files.
.IP
-This is the default behavior when running git\-annex in a bare repository.
+This is the default behavior when running git-annex in a bare repository.
.IP
.IP "\fB\-\-unused\fP"
-Operate on files found by last run of git\-annex unused.
+Operate on files found by last run of git-annex unused.
.IP
.IP "\fB\-\-key=keyname\fP"
Use this option to move a specified key.
.IP
.IP "file matching options"
-The git\-annex\-matching\-options(1)
+The git-annex\-matching\-options(1)
can be used to specify files to copy.
.IP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-dead.1 b/man/git-annex-dead.1
index 787c863..1f7c8a8 100644
--- a/man/git-annex-dead.1
+++ b/man/git-annex-dead.1
@@ -1,6 +1,6 @@
.TH git-annex-dead 1
.SH NAME
-git\-annex trust \- hide a lost repository
+git-annex trust \- hide a lost repository
.PP
.SH SYNOPSIS
git annex dead \fB[repository ...]\fP
@@ -13,7 +13,7 @@ Repositories can be specified using their remote name, their
description, or their UUID.
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-describe.1 b/man/git-annex-describe.1
index e55e976..598f8a2 100644
--- a/man/git-annex-describe.1
+++ b/man/git-annex-describe.1
@@ -1,6 +1,6 @@
.TH git-annex-describe 1
.SH NAME
-git\-annex describe \- change description of a repository
+git-annex describe \- change description of a repository
.PP
.SH SYNOPSIS
git annex describe repository description
@@ -12,12 +12,12 @@ The repository to describe can be specified by git remote name or
by uuid. To change the description of the current repository, use
"here".
.PP
-Repository descriptions are displayed by git\-annex in various places.
-They are most useful when git\-annex knows about a repository, but there is
+Repository descriptions are displayed by git-annex in various places.
+They are most useful when git-annex knows about a repository, but there is
no git remote corresponding to it.
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-diffdriver.1 b/man/git-annex-diffdriver.1
index 1409ffc..1b977c4 100644
--- a/man/git-annex-diffdriver.1
+++ b/man/git-annex-diffdriver.1
@@ -1,6 +1,6 @@
.TH git-annex-diffdriver 1
.SH NAME
-git\-annex diffdriver \- external git diff driver shim
+git-annex diffdriver \- external git diff driver shim
.PP
.SH SYNOPSIS
git annex diffdriver \fB\-\- cmd \-\-opts \-\-\fP
@@ -12,15 +12,15 @@ right, so the external git driver cannot read them in order to perform
smart diffing of their contents. This command works around the problem,
by passing the fixed up files to the real external diff driver.
.PP
-To use, just configure git to use "git\-annex diffdriver \-\- cmd params \-\-"
+To use, just configure git to use "git-annex diffdriver \-\- cmd params \-\-"
as the external diff command, where cmd is the real external diff
command you want to use, and params are any extra parameters to pass
to it. Note the trailing "\-\-", which is required.
.PP
-For example, set \fBGIT_EXTERNAL_DIFF=git\-annex diffdriver \-\- j\-c\-diff \-\-\fP
+For example, set \fBGIT_EXTERNAL_DIFF=git-annex diffdriver \-\- j\-c\-diff \-\-\fP
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-direct.1 b/man/git-annex-direct.1
index e030e3f..5200299 100644
--- a/man/git-annex-direct.1
+++ b/man/git-annex-direct.1
@@ -1,6 +1,6 @@
.TH git-annex-direct 1
.SH NAME
-git\-annex direct \- switch repository to direct mode
+git-annex direct \- switch repository to direct mode
.PP
.SH SYNOPSIS
git annex direct
@@ -16,7 +16,7 @@ run in direct mode repositories. Use \fBgit annex proxy\fP to safely run such
commands.
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-drop.1 b/man/git-annex-drop.1
index 4694189..f1d443f 100644
--- a/man/git-annex-drop.1
+++ b/man/git-annex-drop.1
@@ -1,6 +1,6 @@
.TH git-annex-drop 1
.SH NAME
-git\-annex drop \- indicate content of files not currently wanted
+git-annex drop \- indicate content of files not currently wanted
.PP
.SH SYNOPSIS
git annex drop \fB[path ...]\fP
@@ -9,7 +9,7 @@ git annex drop \fB[path ...]\fP
Drops the content of annexed files from this repository, when
possible.
.PP
-git\-annex will refuse to drop content if it cannot verify it is
+git-annex will refuse to drop content if it cannot verify it is
safe to do so.
.PP
.SH OPTIONS
@@ -22,20 +22,20 @@ contents should be removed.
.IP "\fB\-\-auto\fP"
Rather than trying to drop all specified files, drop only files that
are not preferred content of the repository.
-See git\-annex\-preferred\-content(1)
+See git-annex\-preferred\-content(1)
.IP
.IP "\fB\-\-force\fP"
Use this option with care! It bypasses safety checks, and forces
-git\-annex to delete the content of the specified files, even from
+git-annex to delete the content of the specified files, even from
the last repository that is storing their content. Data loss can
result from using this option.
.IP
.IP "file matching options"
-The git\-annex\-matching\-options(1)
+The git-annex\-matching\-options(1)
can be used to specify files to drop.
.IP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-dropkey.1 b/man/git-annex-dropkey.1
index 78aa552..1fdfafa 100644
--- a/man/git-annex-dropkey.1
+++ b/man/git-annex-dropkey.1
@@ -1,6 +1,6 @@
.TH git-annex-dropkey 1
.SH NAME
-git\-annex dropkey \- drops annexed content for specified keys
+git-annex dropkey \- drops annexed content for specified keys
.PP
.SH SYNOPSIS
git annex dropkey \fB[key ...]\fP
@@ -17,7 +17,7 @@ to have a file in the git repository pointing at them.
exist; using it can easily result in data loss.
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-dropunused.1 b/man/git-annex-dropunused.1
index cd650b5..04ae225 100644
--- a/man/git-annex-dropunused.1
+++ b/man/git-annex-dropunused.1
@@ -1,6 +1,6 @@
.TH git-annex-dropunused 1
.SH NAME
-git\-annex dropunused \- drop unused file content
+git-annex dropunused \- drop unused file content
.PP
.SH SYNOPSIS
git annex dropunused \fB[number|range ...]\fP
@@ -20,12 +20,12 @@ drop them from the remote repository.
.IP
.IP "\fB\-\-force\fP"
Use this option with care! It bypasses safety checks, and forces
-git\-annex to delete the content of the specified files, even from
+git-annex to delete the content of the specified files, even from
the last repository that is storing their content. Data loss can
result from using this option.
.IP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-edit.1 b/man/git-annex-edit.1
index 949d248..46e435d 100644
--- a/man/git-annex-edit.1
+++ b/man/git-annex-edit.1
@@ -1,12 +1,12 @@
.TH git-annex-edit 1
.SH NAME
-git\-annex unlock \- unlock files for modification
+git-annex unlock \- unlock files for modification
.PP
.SH SYNOPSIS
git annex edit \fB[path ...]\fP
.PP
.SH DESCRIPTION
-This is an alias for the \fBunlock\fP command; see git\-annex\-unlock(1)
+This is an alias for the \fBunlock\fP command; see git-annex\-unlock(1)
for details.
.PP
.SH AUTHOR
diff --git a/man/git-annex-enableremote.1 b/man/git-annex-enableremote.1
index c88b133..daa05f4 100644
--- a/man/git-annex-enableremote.1
+++ b/man/git-annex-enableremote.1
@@ -1,6 +1,6 @@
.TH git-annex-enableremote 1
.SH NAME
-git\-annex enableremote \- enables use of an existing special remote
+git-annex enableremote \- enables use of an existing special remote
.PP
.SH SYNOPSIS
git annex enableremote \fBname [param=value ...]\fP
@@ -44,7 +44,7 @@ keyid+= and keyid\-= with such remotes should be used with care, and
make little sense except in cases like the revoked key example above.
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-examinekey.1 b/man/git-annex-examinekey.1
index 58cb9f1..4eb8ca7 100644
--- a/man/git-annex-examinekey.1
+++ b/man/git-annex-examinekey.1
@@ -1,6 +1,6 @@
.TH git-annex-examinekey 1
.SH NAME
-git\-annex examinekey \- prints information from a key
+git-annex examinekey \- prints information from a key
.PP
.SH SYNOPSIS
git annex examinekey \fB[key ...]\fP
@@ -27,7 +27,7 @@ Also, '\\n' is a newline, '\\000' is a NULL, etc.
.IP
.IP "\fB\-\-json\fP"
Enable JSON output. This is intended to be parsed by programs that use
-git\-annex. Each line of output is a JSON object.
+git-annex. Each line of output is a JSON object.
.IP
.SH EXAMPLES
The location a key's value is stored (in indirect mode)
@@ -36,7 +36,7 @@ can be looked up by running:
git annex examinekey $KEY \-\-format='.git/annex/objects/${hashdirmixed}${key}/${key}'
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-expire.1 b/man/git-annex-expire.1
index 8069095..a9e53f4 100644
--- a/man/git-annex-expire.1
+++ b/man/git-annex-expire.1
@@ -1,6 +1,6 @@
.TH git-annex-expire 1
.SH NAME
-git\-annex expire \- expire inactive repositories
+git-annex expire \- expire inactive repositories
.PP
.SH SYNOPSIS
git annex expire \fB[repository:]time ...\fP
@@ -29,7 +29,7 @@ expired.
.SH OPTIONS
.IP "\fB\-\-no\-act\fP"
.IP
-Print out what would be done, but not not actually expite or unexpire
+Print out what would be done, but not not actually expire or unexpire
any repositories.
.IP
.IP "\fB\-\-activity=Name\fP"
@@ -40,19 +40,19 @@ Currently, the only activity that can be performed to avoid expiration
is \fBgit annex fsck\fP. Note that fscking a remote updates the
expiration of the remote repository, not the local repository.
.IP
-The first version of git\-annex that recorded fsck activity was
+The first version of git-annex that recorded fsck activity was
5.20150405.
.IP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
-git\-annex\-fsck(1)
+git-annex\-fsck(1)
.PP
-git\-annex\-schedule(1)
+git-annex\-schedule(1)
.PP
-git\-annex\-dead(1)
+git-annex\-dead(1)
.PP
-git\-annex\-semitrust(1)
+git-annex\-semitrust(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-find.1 b/man/git-annex-find.1
index 23d1997..b04b431 100644
--- a/man/git-annex-find.1
+++ b/man/git-annex-find.1
@@ -1,6 +1,6 @@
.TH git-annex-find 1
.SH NAME
-git\-annex find \- lists available files
+git-annex find \- lists available files
.PP
.SH SYNOPSIS
git annex find \fB[path ...]\fP
@@ -34,10 +34,10 @@ The default output format is the same as \fB\-\-format='${file}\\n'\fP
Output the list of files in JSON format.
.IP
This is intended to be parsed by programs that use
-git\-annex. Each line of output is a JSON object.
+git-annex. Each line of output is a JSON object.
.IP
.IP "matching options"
-The git\-annex\-matching\-options(1)
+The git-annex\-matching\-options(1)
can be used to specify files to list.
.IP
By default, the find command only lists annexed files whose content is
@@ -49,7 +49,7 @@ To list all annexed files, present or not, specify \fB\-\-include "*"\fP.
To list annexed files whose content is not present, specify \fB\-\-not \-\-in=here\fP
.IP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-findref.1 b/man/git-annex-findref.1
index 562692b..bc44ea1 100644
--- a/man/git-annex-findref.1
+++ b/man/git-annex-findref.1
@@ -1,20 +1,20 @@
.TH git-annex-findref 1
.SH NAME
-git\-annex findref \- lists files in a git ref
+git-annex findref \- lists files in a git ref
.PP
.SH SYNOPSIS
git annex findref \fB[ref]\fP
.PP
.SH DESCRIPTION
-This is very similar to the \fBgit\-annex find\fP command, but instead of
+This is very similar to the \fBgit-annex find\fP command, but instead of
finding files in the current work tree, it finds files in the
specified git ref.
.PP
.SH OPTIONS
-Same as git\-annex\-find(1)
+Same as git-annex\-find(1)
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-fix.1 b/man/git-annex-fix.1
index ea274a5..9f4f197 100644
--- a/man/git-annex-fix.1
+++ b/man/git-annex-fix.1
@@ -1,6 +1,6 @@
.TH git-annex-fix 1
.SH NAME
-git\-annex fix \- fix up symlinks to point to annexed content
+git-annex fix \- fix up symlinks to point to annexed content
.PP
.SH SYNOPSIS
git annex fix \fB[path ...]\fP
@@ -15,11 +15,11 @@ but is done automatically when committing a change with git too.
.SH OPTIONS
.IP "file matching options"
.IP
-The git\-annex\-matching\-options(1)
+The git-annex\-matching\-options(1)
can be used to specify files to fix.
.IP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-forget.1 b/man/git-annex-forget.1
index 292f27f..f91fbd9 100644
--- a/man/git-annex-forget.1
+++ b/man/git-annex-forget.1
@@ -1,22 +1,22 @@
.TH git-annex-forget 1
.SH NAME
-git\-annex forget \- prune git\-annex branch history
+git-annex forget \- prune git-annex branch history
.PP
.SH SYNOPSIS
git annex forget
.PP
.SH DESCRIPTION
-Causes the git\-annex branch to be rewritten, throwing away historical
+Causes the git-annex branch to be rewritten, throwing away historical
data about past locations of files. The resulting branch will use less
space, but \fBgit annex log\fP will not be able to show where
files used to be located.
.PP
When this rewritten branch is merged into other clones of
-the repository, \fBgit\-annex\fP will automatically perform the same rewriting
-to their local \fBgit\-annex\fP branches. So the forgetfulness will automatically
+the repository, \fBgit-annex\fP will automatically perform the same rewriting
+to their local \fBgit-annex\fP branches. So the forgetfulness will automatically
propagate out from its starting point until all repositories running
-git\-annex have forgotten their old history. (You may need to force
-git to push the branch to any git repositories not running git\-annex.)
+git-annex have forgotten their old history. (You may need to force
+git to push the branch to any git repositories not running git-annex.)
.PP
.SH OPTIONS
.IP "\fB\-\-drop\-dead\fP"
@@ -24,7 +24,7 @@ git to push the branch to any git repositories not running git\-annex.)
Also prune references to repositories that have been marked as dead.
.IP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-fromkey.1 b/man/git-annex-fromkey.1
index c77e6bf..abb390a 100644
--- a/man/git-annex-fromkey.1
+++ b/man/git-annex-fromkey.1
@@ -1,6 +1,6 @@
.TH git-annex-fromkey 1
.SH NAME
-git\-annex fromkey \- adds a file using a specific key
+git-annex fromkey \- adds a file using a specific key
.PP
.SH SYNOPSIS
git annex fromkey \fB[key file]\fP
@@ -11,16 +11,16 @@ in the git repository to link to a specified key.
.PP
If the key and file are not specified on the command line, they are
instead read from stdin. Any number of lines can be provided in this
-mode, each containing a key and filename, sepearated by a single space.
+mode, each containing a key and filename, separated by a single space.
.PP
.SH OPTIONS
.IP "\fB\-\-force\fP"
.IP
Allow making a file link to a key whose content is not in the local
-repository. The key may not be known to git\-annex at all.
+repository. The key may not be known to git-annex at all.
.IP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-fsck.1 b/man/git-annex-fsck.1
index c2a9e93..24421db 100644
--- a/man/git-annex-fsck.1
+++ b/man/git-annex-fsck.1
@@ -1,6 +1,6 @@
.TH git-annex-fsck 1
.SH NAME
-git\-annex fsck \- check for problems
+git-annex fsck \- check for problems
.PP
.SH SYNOPSIS
git annex fsck \fB[path ...]\fP
@@ -56,21 +56,21 @@ use \fB\-\-numcopies=1\fP.
Normally only the files in the currently checked out branch
are fscked. This option causes all versions of all files to be fscked.
.IP
-This is the default behavior when running git\-annex in a bare repository.
+This is the default behavior when running git-annex in a bare repository.
.IP
.IP "\fB\-\-unused\fP"
-Operate on files found by last run of git\-annex unused.
+Operate on files found by last run of git-annex unused.
.IP
.IP "\fB\-\-key=keyname\fP"
Use this option to fsck a specified key.
.IP
.IP "file matching options"
-The git\-annex\-matching\-options(1)
+The git-annex\-matching\-options(1)
can be used to specify files to fsck.
.IP
.SH OPTIONS
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-fuzztest.1 b/man/git-annex-fuzztest.1
index f053443..b885fed 100644
--- a/man/git-annex-fuzztest.1
+++ b/man/git-annex-fuzztest.1
@@ -1,6 +1,6 @@
.TH git-annex-fuzztest 1
.SH NAME
-git\-annex fuzztest \- generates fuzz test files
+git-annex fuzztest \- generates fuzz test files
.PP
.SH SYNOPSIS
git annex fuzztest
@@ -11,7 +11,7 @@ for use in testing the assistant. This is dangerous, so it will not
do anything unless \-\-forced.
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-get.1 b/man/git-annex-get.1
index 799d4ac..ed3d08f 100644
--- a/man/git-annex-get.1
+++ b/man/git-annex-get.1
@@ -1,6 +1,6 @@
.TH git-annex-get 1
.SH NAME
-git\-annex get \- make content of annexed files available
+git-annex get \- make content of annexed files available
.PP
.SH SYNOPSIS
git annex get \fB[path ...]\fP
@@ -15,32 +15,32 @@ or transferring them from some kind of key\-value store.
.IP
Rather than getting all files, get only files that don't yet have
the desired number of copies, or that are preferred content of the
-repository. See git\-annex\-preferred\-content(1)
+repository. See git-annex\-preferred\-content(1)
.IP
.IP "\fB\-\-from=remote\fP"
-Normally git\-annex will choose which remotes to get the content
+Normally git-annex will choose which remotes to get the content
from. Use this option to specify which remote to use.
.IP
.IP "\fB\-\-all\fP"
Rather than specifying a filename or path to get, this option can be
used to get all available versions of all files.
.IP
-This is the default behavior when running git\-annex in a bare repository.
+This is the default behavior when running git-annex in a bare repository.
.IP
.IP "\fB\-\-unused\fP"
-Operate on files found by last run of git\-annex unused.
+Operate on files found by last run of git-annex unused.
.IP
.IP "\fB\-\-key=keyname\fP"
Use this option to get a specified key.
.IP
.IP "file matching options"
-The git\-annex\-matching\-options(1)
+The git-annex\-matching\-options(1)
can be used to specify files to get.
.IP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
-git\-annex\-drop(1)
+git-annex\-drop(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-group.1 b/man/git-annex-group.1
index 35a737b..4c35c6a 100644
--- a/man/git-annex-group.1
+++ b/man/git-annex-group.1
@@ -1,6 +1,6 @@
.TH git-annex-group 1
.SH NAME
-git\-annex group \- add a repository to a group
+git-annex group \- add a repository to a group
.PP
.SH SYNOPSIS
git annex group \fBrepository groupname\fP
@@ -12,12 +12,12 @@ The groupname must be a single word.
Omit the groupname to show the current groups that a repository is in.
.PP
There are some standard groups that have different default preferred content
-settings. See <https://git\-annex.branchable.com/preferred_content/standard_groups/>
+settings. See <https://git-annex.branchable.com/preferred_content/standard_groups/>
.PP
A repository can be in multiple groups at the same time.
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-groupwanted.1 b/man/git-annex-groupwanted.1
index 24bfa32..73f215f 100644
--- a/man/git-annex-groupwanted.1
+++ b/man/git-annex-groupwanted.1
@@ -1,6 +1,6 @@
.TH git-annex-groupwanted 1
.SH NAME
-git\-annex groupwanted \- get or set groupwanted expression
+git-annex groupwanted \- get or set groupwanted expression
.PP
.SH SYNOPSIS
git annex groupwanted \fBgroupname [expression]\fP
@@ -20,7 +20,7 @@ make repositories in the group want to contain 3 copies of every file:
done
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-import.1 b/man/git-annex-import.1
index a27d3ab..706b4e7 100644
--- a/man/git-annex-import.1
+++ b/man/git-annex-import.1
@@ -1,6 +1,6 @@
.TH git-annex-import 1
.SH NAME
-git\-annex import \- move and add files from outside git working copy
+git-annex import \- move and add files from outside git working copy
.PP
.SH SYNOPSIS
git annex import \fB[path ...]\fP
@@ -13,8 +13,8 @@ If a directory is specified, the entire directory is imported.
git annex import /media/camera/DCIM/*
.PP
When importing files, there's a possibility of importing a duplicate
-of a file that is already known to git\-annex \-\- its content is either
-present in the local repository already, or git\-annex knows of anther
+of a file that is already known to git-annex \-\- its content is either
+present in the local repository already, or git-annex knows of anther
repository that contains it.
.PP
By default, importing a duplicate of a known file will result in
@@ -47,7 +47,7 @@ Does not import any files, but any files found in the import location
that are duplicates are deleted.
.IP
.IP "file matching options"
-Many of the git\-annex\-matching\-options(1)
+Many of the git-annex\-matching\-options(1)
can be used to specify files to import.
.IP
git annex import /dir \-\-include='*.png'
@@ -57,7 +57,7 @@ Note that using \fB\-\-deduplicate\fP or \fB\-\-clean\-duplicates\fP with the WO
backend does not look at file content, but filename and mtime.
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-importfeed.1 b/man/git-annex-importfeed.1
index 3d7bcb6..d1d6a8d 100644
--- a/man/git-annex-importfeed.1
+++ b/man/git-annex-importfeed.1
@@ -1,6 +1,6 @@
.TH git-annex-importfeed 1
.SH NAME
-git\-annex importfeed \- import files from podcast feeds
+git-annex importfeed \- import files from podcast feeds
.PP
.SH SYNOPSIS
git annex importfeed \fB[url ...]\fP
@@ -31,10 +31,10 @@ The default template is '${feedtitle}/${itemtitle}${extension}'
Other available variables for templates: feedauthor, itemauthor, itemsummary, itemdescription, itemrights, itemid, itempubdate, title, author
.IP
.IP "\fB\-\-relaxed\fP, \fB\-\-fast\fP, \fB\-\-raw\fP, \fB\-\-template\fP"
-These options behave the same as when using git\-annex\-addurl(1).
+These options behave the same as when using git-annex\-addurl(1).
.IP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-indirect.1 b/man/git-annex-indirect.1
index 291749c..872869d 100644
--- a/man/git-annex-indirect.1
+++ b/man/git-annex-indirect.1
@@ -1,6 +1,6 @@
.TH git-annex-indirect 1
.SH NAME
-git\-annex indirect \- switch repository to indirect mode
+git-annex indirect \- switch repository to indirect mode
.PP
.SH SYNOPSIS
git annex indirect
@@ -9,12 +9,12 @@ git annex indirect
Switches a repository back from direct mode to the default, indirect
mode.
.PP
-Some systems cannot support git\-annex in indirect mode, because they
+Some systems cannot support git-annex in indirect mode, because they
do not support symbolic links. Repositories on such systems instead
default to using direct mode.
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-info.1 b/man/git-annex-info.1
index 47c93e1..e0f5f89 100644
--- a/man/git-annex-info.1
+++ b/man/git-annex-info.1
@@ -1,6 +1,6 @@
.TH git-annex-info 1
.SH NAME
-git\-annex info \- shows information about the specified item or the repository as a whole
+git-annex info \- shows information about the specified item or the repository as a whole
.PP
.SH SYNOPSIS
git annex info \fB[directory|file|remote|uuid ...]\fP
@@ -20,10 +20,13 @@ Only show the data that can be gathered quickly.
.IP
.IP "\fB\-\-json\fP"
Enable JSON output. This is intended to be parsed by programs that use
-git\-annex. Each line of output is a JSON object.
+git-annex. Each line of output is a JSON object.
+.IP
+.IP "\fB\-\-bytes\fP"
+Show file sizes in bytes, disabling the default nicer units.
.IP
.IP "file matching options"
-When a directory is specified, the git\-annex\-matching\-options(1)
+When a directory is specified, the git-annex\-matching\-options(1)
can be used to select the files in the directory that are included
in the statistics.
.IP
@@ -35,7 +38,7 @@ Then run:
git annex info \-\-fast . \-\-not \-\-in here
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-init.1 b/man/git-annex-init.1
index 842bbee..2296322 100644
--- a/man/git-annex-init.1
+++ b/man/git-annex-init.1
@@ -1,13 +1,13 @@
.TH git-annex-init 1
.SH NAME
-git\-annex init \- initialize git\-annex
+git-annex init \- initialize git-annex
.PP
.SH SYNOPSIS
git annex init \fB[description]\fP
.PP
.SH DESCRIPTION
Until a repository (or one of its remotes) has been initialized,
-git\-annex will refuse to operate on it, to avoid accidentally
+git-annex will refuse to operate on it, to avoid accidentally
using it in a repository that was not intended to have an annex.
.PP
It's useful, but not mandatory, to initialize each new clone
@@ -15,7 +15,7 @@ of a repository with its own description. If you don't provide one,
one will be generated using the username, hostname and the path.
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-initremote.1 b/man/git-annex-initremote.1
index fa64223..7d0c000 100644
--- a/man/git-annex-initremote.1
+++ b/man/git-annex-initremote.1
@@ -1,6 +1,6 @@
.TH git-annex-initremote 1
.SH NAME
-git\-annex initremote \- creates a special (non\-git) remote
+git-annex initremote \- creates a special (non\-git) remote
.PP
.SH SYNOPSIS
git annex initremote \fBname type=value [param=value ...]\fP
@@ -12,8 +12,8 @@ Example Amazon S3 remote:
.PP
git annex initremote mys3 type=S3 encryption=hybrid keyid=me@example.com datacenter=EU
.PP
-Many different types of special remotes are supported by git\-annex.
-For a list and details, see <https://git\-annex.branchable.com/special_remotes/>
+Many different types of special remotes are supported by git-annex.
+For a list and details, see <https://git-annex.branchable.com/special_remotes/>
.PP
The remote's configuration is specified by the parameters passed
to this command. Different types of special remotes need different
@@ -44,7 +44,7 @@ and re\-run with \fB\-\-fast\fP, which causes it to use a lower\-quality source
randomness. (Ie, /dev/urandom instead of /dev/random)
.IP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-list.1 b/man/git-annex-list.1
index 6b99223..11401c1 100644
--- a/man/git-annex-list.1
+++ b/man/git-annex-list.1
@@ -1,6 +1,6 @@
.TH git-annex-list 1
.SH NAME
-git\-annex list \- show which remotes contain files
+git-annex list \- show which remotes contain files
.PP
.SH SYNOPSIS
git annex list \fB[path ...]\fP
@@ -16,11 +16,11 @@ Only configured remotes are shown by default; this option
adds all known repositories to the list.
.IP
.IP "file matching options"
-The git\-annex\-matching\-options(1)
+The git-annex\-matching\-options(1)
can be used to specify files to list.
.IP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-lock.1 b/man/git-annex-lock.1
index 318ef36..5e92377 100644
--- a/man/git-annex-lock.1
+++ b/man/git-annex-lock.1
@@ -1,6 +1,6 @@
.TH git-annex-lock 1
.SH NAME
-git\-annex lock \- unco unlock command
+git-annex lock \- undo unlock command
.PP
.SH SYNOPSIS
git annex lock \fB[path ...]\fP
@@ -12,11 +12,11 @@ the files, or have made modifications you want to discard.
.SH OPTIONS
.IP "file matching options"
.IP
-The git\-annex\-matching\-options(1)
+The git-annex\-matching\-options(1)
can be used to specify files to lock.
.IP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-log.1 b/man/git-annex-log.1
index 25f6de4..84589a4 100644
--- a/man/git-annex-log.1
+++ b/man/git-annex-log.1
@@ -1,6 +1,6 @@
.TH git-annex-log 1
.SH NAME
-git\-annex log \- shows location log
+git-annex log \- shows location log
.PP
.SH SYNOPSIS
git annex log \fB[path ...]\fP
@@ -21,12 +21,12 @@ For example: \fB\-\-since "1 month ago"\fP
Generates output suitable for the \fBgource\fP visualization program.
.IP
.IP "file matching options"
-The git\-annex\-matching\-options(1)
+The git-annex\-matching\-options(1)
can be used to specify files to act on.
.IP
.SH OPTIONS
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-lookupkey.1 b/man/git-annex-lookupkey.1
index fb4128b..c6d6563 100644
--- a/man/git-annex-lookupkey.1
+++ b/man/git-annex-lookupkey.1
@@ -1,6 +1,6 @@
.TH git-annex-lookupkey 1
.SH NAME
-git\-annex lookupkey \- looks up key used for file
+git-annex lookupkey \- looks up key used for file
.PP
.SH SYNOPSIS
git annex lookupkey \fB[file ...]\fP
@@ -8,11 +8,11 @@ git annex lookupkey \fB[file ...]\fP
.SH DESCRIPTION
This plumbing\-level command looks up the key used for a file in the
index. The key is output to stdout. If there is no key (because
-the file is not present in the index, or is not a git\-annex managed file),
+the file is not present in the index, or is not a git-annex managed file),
nothing is output, and it exits nonzero.
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-map.1 b/man/git-annex-map.1
index e5396dd..a049b10 100644
--- a/man/git-annex-map.1
+++ b/man/git-annex-map.1
@@ -1,6 +1,6 @@
.TH git-annex-map 1
.SH NAME
-git\-annex map \- generate map of repositories
+git-annex map \- generate map of repositories
.PP
.SH SYNOPSIS
git annex map
@@ -19,7 +19,7 @@ Also, if connecting to a host requires a password, you might have to enter
it several times as the map is being built.
.PP
Note that this subcommand can be used to graph any git repository; it
-is not limited to git\-annex repositories.
+is not limited to git-annex repositories.
.PP
.SH OPTIONS
.IP "\fB\-\-fast\fP"
@@ -27,7 +27,7 @@ is not limited to git\-annex repositories.
Disable using \fBdot\fP to display the generated Graphviz file.
.IP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-matching-options.1 b/man/git-annex-matching-options.1
index 642c991..65d8659 100644
--- a/man/git-annex-matching-options.1
+++ b/man/git-annex-matching-options.1
@@ -1,9 +1,9 @@
.TH git-annex-matching-options 1
.SH NAME
-git\-annex\-matching\-options \- specifying files to act on
+git-annex\-matching\-options \- specifying files to act on
.PP
.SH DESCRIPTION
-Many git\-annex commands support using these options to specify which
+Many git-annex commands support using these options to specify which
files they act on.
.PP
Arbitrarily complicated expressions can be built using these options.
@@ -11,7 +11,7 @@ For example:
.PP
\-\-exclude '*.mp3' \-\-and \-\-not \-( \-\-in=usbdrive \-\-or \-\-in=archive \-)
.PP
-The above example prevents git\-annex from working on mp3 files whose
+The above example prevents git-annex from working on mp3 files whose
file contents are present at either of two repositories.
.PP
.SH OPTIONS
@@ -33,7 +33,7 @@ For example, to include only mp3 and ogg files:
Note that this will not skip anything when using \-\-all or \-\-unused.
.IP
.IP "\fB\-\-in=repository\fP"
-Matches only files that git\-annex believes have their contents present
+Matches only files that git-annex believes have their contents present
in a repository. Note that it does not check the repository to verify
that it still has the content.
.IP
@@ -54,12 +54,12 @@ free up disk space. The next day, you can get back the files you dropped
using \fBgit annex get . \-\-in=here@{yesterday}\fP
.IP
.IP "\fB\-\-copies=number\fP"
-Matches only files that git\-annex believes to have the specified number
+Matches only files that git-annex believes to have the specified number
of copies, or more. Note that it does not check remotes to verify that
the copies still exist.
.IP
.IP "\fB\-\-copies=trustlevel:number\fP"
-Matches only files that git\-annex believes have the specified number of
+Matches only files that git-annex believes have the specified number of
copies, on remotes with the specified trust level. For example,
\fB\-\-copies=trusted:2\fP
.IP
@@ -67,12 +67,12 @@ To match any trust level at or higher than a given level,
use 'trustlevel+'. For example, \fB\-\-copies=semitrusted+:2\fP
.IP
.IP "\fB\-\-copies=groupname:number\fP"
-Matches only files that git\-annex believes have the specified number of
+Matches only files that git-annex believes have the specified number of
copies, on remotes in the specified group. For example,
\fB\-\-copies=archive:2\fP
.IP
.IP "\fB\-\-lackingcopies=number\fP"
-Matches only files that git\-annex believes need the specified number or
+Matches only files that git-annex believes need the specified number or
more additional copies to be made in order to satisfy their numcopies
settings.
.IP
@@ -85,7 +85,7 @@ Matches only files whose content is stored using the specified key\-value
backend.
.IP
.IP "\fB\-\-inallgroup=groupname\fP"
-Matches only files that git\-annex believes are present in all repositories
+Matches only files that git-annex believes are present in all repositories
in the specified group.
.IP
.IP "\fB\-\-smallerthan=size\fP"
@@ -133,7 +133,7 @@ Opens a group of matching options.
Closes a group of matching options.
.IP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-merge.1 b/man/git-annex-merge.1
index 4998a04..20e1708 100644
--- a/man/git-annex-merge.1
+++ b/man/git-annex-merge.1
@@ -1,6 +1,6 @@
.TH git-annex-merge 1
.SH NAME
-git\-annex merge \- automatically merge changes from remotes
+git-annex merge \- automatically merge changes from remotes
.PP
.SH SYNOPSIS
git annex merge
@@ -15,7 +15,7 @@ post\-receive hook. Then any syncs to the repository will update its
working copy automatically.
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-metadata.1 b/man/git-annex-metadata.1
index 29f26df..507f776 100644
--- a/man/git-annex-metadata.1
+++ b/man/git-annex-metadata.1
@@ -1,6 +1,6 @@
.TH git-annex-metadata 1
.SH NAME
-git\-annex metadata \- sets or gets metadata of a file
+git-annex metadata \- sets or gets metadata of a file
.PP
.SH SYNOPSIS
git annex metadata \fB[path ...]\fP
@@ -47,12 +47,12 @@ throughout the files in a directory. This option enables such recursive
setting.
.IP
.IP "file matching options"
-The git\-annex\-matching\-options(1)
+The git-annex\-matching\-options(1)
can be used to specify files to act on.
.IP
.IP "\fB\-\-json\fP"
Enable JSON output. This is intended to be parsed by programs that use
-git\-annex. Each line of output is a JSON object.
+git-annex. Each line of output is a JSON object.
.IP
.SH EXAMPLES
To set some tags on a file and also its author:
@@ -60,7 +60,7 @@ To set some tags on a file and also its author:
git annex metadata annexscreencast.ogv \-t video \-t screencast \-s author+=Alice
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-migrate.1 b/man/git-annex-migrate.1
index 8b8aa14..e5c99cf 100644
--- a/man/git-annex-migrate.1
+++ b/man/git-annex-migrate.1
@@ -1,6 +1,6 @@
.TH git-annex-migrate 1
.SH NAME
-git\-annex migrate \- switch data to different backend
+git-annex migrate \- switch data to different backend
.PP
.SH SYNOPSIS
git annex migrate \fB[path ...]\fP
@@ -29,11 +29,11 @@ Specify the new key\-value backend to use for migrated data.
Force migration of keys that are already using the new backend.
.IP
.IP "file matching options"
-The git\-annex\-matching\-options(1)
+The git-annex\-matching\-options(1)
can be used to specify files to migrate.
.IP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-mirror.1 b/man/git-annex-mirror.1
index 946f50a..3a68854 100644
--- a/man/git-annex-mirror.1
+++ b/man/git-annex-mirror.1
@@ -1,6 +1,6 @@
.TH git-annex-mirror 1
.SH NAME
-git\-annex mirror \- mirror content of files to/from another repository
+git-annex mirror \- mirror content of files to/from another repository
.PP
.SH SYNOPSIS
git annex mirror \fB[path ...] [\-\-to=remote|\-\-from=remote]\fP
@@ -34,14 +34,14 @@ currently existing files.
However, this bypasses checking the .gitattributes annex.numcopies
setting when dropping files.
.IP
-This is the default behavior when running git\-annex in a bare repository.
+This is the default behavior when running git-annex in a bare repository.
.IP
.IP "file matching options"
-The git\-annex\-matching\-options(1)
+The git-annex\-matching\-options(1)
can be used to specify files to mirror.
.IP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-move.1 b/man/git-annex-move.1
index 6561492..2f62b80 100644
--- a/man/git-annex-move.1
+++ b/man/git-annex-move.1
@@ -1,6 +1,6 @@
.TH git-annex-move 1
.SH NAME
-git\-annex move \- move content of files to/from another repository
+git-annex move \- move content of files to/from another repository
.PP
.SH SYNOPSIS
git annex move \fB[path ...] [\-\-from=remote|\-\-to=remote]\fP
@@ -22,20 +22,20 @@ to the specified remote.
Rather than specifying a filename or path to move, this option can be
used to move all available versions of all files.
.IP
-This is the default behavior when running git\-annex in a bare repository.
+This is the default behavior when running git-annex in a bare repository.
.IP
.IP "\fB\-\-unused\fP"
-Operate on files found by last run of git\-annex unused.
+Operate on files found by last run of git-annex unused.
.IP
.IP "\fB\-\-key=keyname\fP"
Use this option to move a specified key.
.IP
.IP "file matching options"
-The git\-annex\-matching\-options(1)
+The git-annex\-matching\-options(1)
can be used to specify files to move.
.IP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-numcopies.1 b/man/git-annex-numcopies.1
index af9ca0e..d66b93c 100644
--- a/man/git-annex-numcopies.1
+++ b/man/git-annex-numcopies.1
@@ -1,17 +1,17 @@
.TH git-annex-numcopies 1
.SH NAME
-git\-annex numcopies \- configure desired number of copies
+git-annex numcopies \- configure desired number of copies
.PP
.SH SYNOPSIS
git annex numcopies \fBN\fP
.PP
.SH DESCRIPTION
-Tells git\-annex how many copies it should preserve of files, over all
+Tells git-annex how many copies it should preserve of files, over all
repositories. The default is 1.
.PP
Run without a number to get the current value.
.PP
-When git\-annex is asked to drop a file, it first verifies that the
+When git-annex is asked to drop a file, it first verifies that the
required number of copies can be satisfied among all the other
repositories that have a copy of the file.
.PP
@@ -19,7 +19,7 @@ This can be overridden on a per\-file basis by the annex.numcopies setting
in .gitattributes files.
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-pre-commit.1 b/man/git-annex-pre-commit.1
index 714dc5c..b7e3f20 100644
--- a/man/git-annex-pre-commit.1
+++ b/man/git-annex-pre-commit.1
@@ -1,6 +1,6 @@
.TH git-annex-pre-commit 1
.SH NAME
-git\-annex pre\-commit \- run by git pre\-commit hook
+git-annex pre\-commit \- run by git pre\-commit hook
.PP
.SH SYNOPSIS
git annex \fB[path ...]\fP
@@ -15,7 +15,7 @@ files into the annex. When in a view, updates metadata to reflect changes
made to files in the view.
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-preferred-content.1 b/man/git-annex-preferred-content.1
index bf27f99..dafb949 100644
--- a/man/git-annex-preferred-content.1
+++ b/man/git-annex-preferred-content.1
@@ -1,47 +1,54 @@
.TH git-annex-preferred-content 1
.SH NAME
-git\-annex\-preferred\-content \-
+git-annex\-preferred\-content \-
.PP
.SH DESCRIPTION
Each repository has a preferred content setting, which specifies content
that the repository wants to have present. These settings can be configured
using \fBgit annex vicfg\fP or \fBgit annex wanted\fP.
They are used by the \fB\-\-auto\fP option, by \fBgit annex sync \-\-content\fP,
-and by the git\-annex assistant.
+and by the git-annex assistant.
+.PP
+While preferred content expresses a preference, it can be overridden
+by simply using \fBgit annex drop\fP. On the other hand, required content
+settings are enforced; \fBgit annex drop\fP will refuse to drop a file if
+doing so would violate its required content settings. A repository's
+required content can be configured using \fBgit annex vicfg\fP or
+\fBgit annex required\fP.
.PP
Preferred content expressions are similar, but not identical to
-the git\-annex\-matching\-options(1), just without the dashes.
+the git-annex\-matching\-options(1), just without the dashes.
For example:
.PP
exclude=archive/* and (include=*.mp3 or smallerthan=1mb)
.PP
The main differences are that \fBexclude=\fP and \fBinclude=\fP always
match relative to the top of the git repository, and that there is
-no equivilant to \fB\-\-in\fP.
+no equivalent to \fB\-\-in\fP.
.PP
For more details about preferred content expressions, see
-See <https://git\-annex.branchable.com/preferred_content/>
+See <https://git-annex.branchable.com/preferred_content/>
.PP
When a repository is in one of the standard predefined groups, like "backup"
and "client", setting its preferred content to "standard" will use a
built\-in preferred content expression developed for that group.
-See <https://git\-annex.branchable.com/preferred_content/standard_groups/>
+See <https://git-annex.branchable.com/preferred_content/standard_groups/>
.PP
If you have set a groupwanted expression for a group, it will be used
when a repository in the group has its preferred content set to
"groupwanted".
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
-git\-annex\-vicfg(1)
+git-annex\-vicfg(1)
.PP
-git\-annex\-wanted(1)
+git-annex\-wanted(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
.PP
-<http://git\-annex.branchable.com/>
+<http://git-annex.branchable.com/>
.PP
.PP
diff --git a/man/git-annex-proxy.1 b/man/git-annex-proxy.1
index 6631917..3caea10 100644
--- a/man/git-annex-proxy.1
+++ b/man/git-annex-proxy.1
@@ -1,6 +1,6 @@
.TH git-annex-proxy 1
.SH NAME
-git\-annex proxy \- safely bypass direct mode guard
+git-annex proxy \- safely bypass direct mode guard
.PP
.SH SYNOPSIS
git annex proxy \fB\-\- git cmd [options]\fP
@@ -24,9 +24,9 @@ To rename a directory:
git annex proxy \-\- git mv mydir newname
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
-git\-annex\-direct(1)
+git-annex\-direct(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-readpresentkey.1 b/man/git-annex-readpresentkey.1
index ee428f4..4c9c527 100644
--- a/man/git-annex-readpresentkey.1
+++ b/man/git-annex-readpresentkey.1
@@ -1,13 +1,13 @@
.TH git-annex-readpresentkey 1
.SH NAME
-git\-annex readpresentkey \- read records of where key is present
+git-annex readpresentkey \- read records of where key is present
.PP
.SH SYNOPSIS
git annex readpresentkey \fBkey uuid\fP
.PP
.SH DESCRIPTION
-This plumbing\-level command reads git\-annex's records about whether
-the specified key's content is present in the remote with the speficied
+This plumbing\-level command reads git-annex's records about whether
+the specified key's content is present in the remote with the specified
uuid.
.PP
It exits 0 if the key is recorded to be present and 1 if not.
@@ -16,7 +16,7 @@ Note that this does not do an active check to verify if the key
is present. To do such a check, use checkpresentkey(1)
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-registerurl.1 b/man/git-annex-registerurl.1
index 2702750..cfa8f36 100644
--- a/man/git-annex-registerurl.1
+++ b/man/git-annex-registerurl.1
@@ -1,6 +1,6 @@
.TH git-annex-registerurl 1
.SH NAME
-git\-annex registerurl \- registers an url for a key
+git-annex registerurl \- registers an url for a key
.PP
.SH SYNOPSIS
git annex registerurl \fB[key url]\fP
@@ -16,7 +16,7 @@ instead read from stdin. Any number of lines can be provided in this
mode, each containing a key and url, separated by a single space.
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-reinit.1 b/man/git-annex-reinit.1
index b66b0dc..494aaf8 100644
--- a/man/git-annex-reinit.1
+++ b/man/git-annex-reinit.1
@@ -1,6 +1,6 @@
.TH git-annex-reinit 1
.SH NAME
-git\-annex reinit \- initialize repository, reusing old UUID
+git-annex reinit \- initialize repository, reusing old UUID
.PP
.SH SYNOPSIS
git annex reinit \fBuuid|description\fP
@@ -16,7 +16,7 @@ repositories with the same UUID. Also, you will probably want to run
a fsck.
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-reinject.1 b/man/git-annex-reinject.1
index 716755d..18554bf 100644
--- a/man/git-annex-reinject.1
+++ b/man/git-annex-reinject.1
@@ -1,6 +1,6 @@
.TH git-annex-reinject 1
.SH NAME
-git\-annex reinject \- sets content of annexed file
+git-annex reinject \- sets content of annexed file
.PP
.SH SYNOPSIS
git annex reinject \fBsrc dest\fP
@@ -20,7 +20,7 @@ Example:
git annex reinject /tmp/foo.iso foo.iso
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-rekey.1 b/man/git-annex-rekey.1
index 559687d..5d0ca62 100644
--- a/man/git-annex-rekey.1
+++ b/man/git-annex-rekey.1
@@ -1,6 +1,6 @@
.TH git-annex-rekey 1
.SH NAME
-git\-annex rekey \- change keys used for files
+git-annex rekey \- change keys used for files
.PP
.SH SYNOPSIS
git annex rekey \fB[file key ...]\fP
@@ -19,7 +19,7 @@ Use with caution.
.IP
.SH OPTIONS
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-remotedaemon.1 b/man/git-annex-remotedaemon.1
index d327f60..0bdf42b 100644
--- a/man/git-annex-remotedaemon.1
+++ b/man/git-annex-remotedaemon.1
@@ -1,6 +1,6 @@
.TH git-annex-remotedaemon 1
.SH NAME
-git\-annex remotedaemon \- detects when remotes have changed, and fetches from them
+git-annex remotedaemon \- detects when remotes have changed, and fetches from them
.PP
.SH SYNOPSIS
git annex remotedaemon
@@ -10,19 +10,19 @@ This plumbing\-level command is used by the assistant to detect
when remotes have received git pushes, so the changes can be promptly
fetched and the local repository updated.
.PP
-This is a better alternative to the git\-annex\-xmppgit(1)
+This is a better alternative to the git-annex\-xmppgit(1)
hack.
.PP
For the remotedaemon to work, the git remote must have
-git\-annex\-shell(1) installed, with notifychanges support.
-The first version of git\-annex\-shell that supports it is 5.20140405.
+git-annex\-shell(1) installed, with notifychanges support.
+The first version of git-annex\-shell that supports it is 5.20140405.
.PP
It's normal for this process to be running when the assistant is running.
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
-git\-annex\-assistant(1)
+git-annex\-assistant(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-repair.1 b/man/git-annex-repair.1
index ceeaf89..d2f6ee2 100644
--- a/man/git-annex-repair.1
+++ b/man/git-annex-repair.1
@@ -1,6 +1,6 @@
.TH git-annex-repair 1
.SH NAME
-git\-annex repair \- recover broken git repository
+git-annex repair \- recover broken git repository
.PP
.SH SYNOPSIS
git annex repair
@@ -8,12 +8,12 @@ git annex repair
.SH DESCRIPTION
This can repair many of the problems with git repositories that \fBgit fsck\fP
detects, but does not itself fix. It's useful if a repository has become
-badly damaged. One way this can happen is if a repository used by git\-annex
+badly damaged. One way this can happen is if a repository used by git-annex
is on a removable drive that gets unplugged at the wrong time.
.PP
This command can actually be used inside git repositories that do not
-use git\-annex at all; when used in a repository using git\-annex, it
-does additional repairs of the git\-annex branch.
+use git-annex at all; when used in a repository using git-annex, it
+does additional repairs of the git-annex branch.
.PP
It works by deleting any corrupt objects from the git repository, and
retrieving all missing objects it can from the remotes of the repository.
@@ -33,7 +33,7 @@ recovered. This command does not try to clean up either the reflog or the
stash.
.PP
It is also a good idea to run \fBgit annex fsck \-\-fast\fP after this command,
-to make sure that the git\-annex branch reflects reality.
+to make sure that the git-annex branch reflects reality.
.PP
.SH OPTIONS
.IP "\fB\-\-force\fP"
@@ -42,7 +42,7 @@ Enable repair actions that involve deleting data that has been
lost due to git repository corruption.
.IP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-required.1 b/man/git-annex-required.1
new file mode 100644
index 0000000..c1c3d3a
--- /dev/null
+++ b/man/git-annex-required.1
@@ -0,0 +1,26 @@
+.TH git-annex-required 1
+.SH NAME
+git-annex required \- get or set required content expression
+.PP
+.SH SYNOPSIS
+git annex required \fBrepository [expression]\fP
+.PP
+.SH DESCRIPTION
+When run with an expression, configures the content that is required
+to be held in the archive. See git-annex\-preferred\-content(1)
+.PP
+For example:
+.PP
+ git annex required . "include=*.mp3 or include=*.ogg"
+.PP
+Without an expression, displays the current required content setting
+of the repository.
+.PP
+.SH SEE ALSO
+git-annex(1)
+.PP
+.SH AUTHOR
+Joey Hess <id@joeyh.name>
+.PP
+.PP
+
diff --git a/man/git-annex-resolvemerge.1 b/man/git-annex-resolvemerge.1
index 2e0ec4e..7311f67 100644
--- a/man/git-annex-resolvemerge.1
+++ b/man/git-annex-resolvemerge.1
@@ -1,6 +1,6 @@
.TH git-annex-resolvemerge 1
.SH NAME
-git\-annex resolvemerge \- resolve merge conflicts
+git-annex resolvemerge \- resolve merge conflicts
.PP
.SH SYNOPSIS
git annex resolvemerge
@@ -15,7 +15,7 @@ Merge conflicts between two files that are not annexed will not be
automatically resolved.
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-rmurl.1 b/man/git-annex-rmurl.1
index 36f4fad..2cbfd5e 100644
--- a/man/git-annex-rmurl.1
+++ b/man/git-annex-rmurl.1
@@ -1,6 +1,6 @@
.TH git-annex-rmurl 1
.SH NAME
-git\-annex rmurl \- record file is not available at url
+git-annex rmurl \- record file is not available at url
.PP
.SH SYNOPSIS
git annex rmurl \fBfile url\fP
@@ -9,7 +9,7 @@ git annex rmurl \fBfile url\fP
Record that the file is no longer available at the url.
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-schedule.1 b/man/git-annex-schedule.1
index 4556640..81d05d4 100644
--- a/man/git-annex-schedule.1
+++ b/man/git-annex-schedule.1
@@ -1,14 +1,14 @@
.TH git-annex-schedule 1
.SH NAME
-git\-annex schedule \- get or set scheduled jobs
+git-annex schedule \- get or set scheduled jobs
.PP
.SH SYNOPSIS
git annex schedule \fBrepository [expression]\fP
.PP
.SH DESCRIPTION
-The git\-annex\-assistant(1) daemon can be configured to run scheduled jobs.
+The git-annex\-assistant(1) daemon can be configured to run scheduled jobs.
This is similar to cron and anacron (and you can use them if you prefer),
-but has the advantage of being integrated into git\-annex, and so being able
+but has the advantage of being integrated into git-annex, and so being able
to e.g., fsck a repository on a removable drive when the drive gets
connected.
.PP
@@ -34,7 +34,7 @@ fsck self 1h on day 1 of every month at any time
fsck self 1h every week divisible by 2 at any time
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-semitrust.1 b/man/git-annex-semitrust.1
index a905f2e..4102f95 100644
--- a/man/git-annex-semitrust.1
+++ b/man/git-annex-semitrust.1
@@ -1,6 +1,6 @@
.TH git-annex-semitrust 1
.SH NAME
-git\-annex semitrust \- return repository to default trust level
+git-annex semitrust \- return repository to default trust level
.PP
.SH SYNOPSIS
git annex semitrust \fB[repository ...]\fP
@@ -12,7 +12,7 @@ Repositories can be specified using their remote name, their
description, or their UUID. For the current repository, use "here".
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-setpresentkey.1 b/man/git-annex-setpresentkey.1
index 698907d..3d44d69 100644
--- a/man/git-annex-setpresentkey.1
+++ b/man/git-annex-setpresentkey.1
@@ -1,19 +1,19 @@
.TH git-annex-setpresentkey 1
.SH NAME
-git\-annex setpresentkey \- change records of where key is present
+git-annex setpresentkey \- change records of where key is present
.PP
.SH SYNOPSIS
git annex setpresentkey \fBkey uuid [1|0]\fP
.PP
.SH DESCRIPTION
-This plumbing\-level command changes git\-annex's records about whether
+This plumbing\-level command changes git-annex's records about whether
the specified key's content is present in a remote with the specified uuid.
.PP
Use 1 to indicate the key is present, or 0 to indicate the key is
not present.
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-shell.1 b/man/git-annex-shell.1
index 1260d22..002bd36 100644
--- a/man/git-annex-shell.1
+++ b/man/git-annex-shell.1
@@ -1,12 +1,12 @@
.TH git-annex-shell 1
.SH NAME
-git\-annex\-shell \- Restricted login shell for git\-annex only SSH access
+git-annex\-shell \- Restricted login shell for git-annex only SSH access
.PP
.SH SYNOPSIS
-git\-annex\-shell [\-c] command [params ...]
+git-annex\-shell [\-c] command [params ...]
.PP
.SH DESCRIPTION
-git\-annex\-shell is a restricted shell, similar to git\-shell, which
+git-annex\-shell is a restricted shell, similar to git\-shell, which
can be used as a login shell for SSH accounts.
.PP
Since its syntax is identical to git\-shell's, it can be used as a drop\-in
@@ -26,7 +26,7 @@ This outputs a subset of the git configuration, in the same form as
repository.
.IP
When run in a repository that does not yet have an annex.uuid, one
-will be created, as long as a git\-annex branch has already been pushed to
+will be created, as long as a git-annex branch has already been pushed to
the repository.
.IP
.IP "inannex directory [key ...]"
@@ -52,34 +52,34 @@ It reads lines from standard input, each giving the number of bytes
that have been received so far.
.IP
.IP "commit directory"
-This commits any staged changes to the git\-annex branch.
+This commits any staged changes to the git-annex branch.
It also runs the annex\-content hook.
.IP
.IP "notifychanges"
-This is used by \fBgit\-annex remotedaemon\fP to be notified when
+This is used by \fBgit-annex remotedaemon\fP to be notified when
refs in the remote repository are changed.
.IP
.IP "gcryptsetup gcryptid"
Sets up a repository as a gcrypt repository.
.IP
.SH OPTIONS
-Most options are the same as in git\-annex. The ones specific
-to git\-annex\-shell are:
+Most options are the same as in git-annex. The ones specific
+to git-annex\-shell are:
.PP
.IP "\-\-uuid=UUID"
-git\-annex uses this to specify the UUID of the repository it was expecting
-git\-annex\-shell to access, as a sanity check.
+git-annex uses this to specify the UUID of the repository it was expecting
+git-annex\-shell to access, as a sanity check.
.IP
.IP "\-\- fields=val fields=val.. \-\-"
-Additional fields may be specified this way, to retain compatability with
-past versions of git\-annex\-shell (that ignore these, but would choke
+Additional fields may be specified this way, to retain compatibility with
+past versions of git-annex\-shell (that ignore these, but would choke
on new dashed options).
.IP
Currently used fields include remoteuuid=, associatedfile=,
and direct=
.IP
.SH HOOK
-After content is received or dropped from the repository by git\-annex\-shell,
+After content is received or dropped from the repository by git-annex\-shell,
it runs a hook, \fB.git/hooks/annex\-content\fP (or \fBhooks/annex\-content\fP on a bare
repository). The hook is not currently passed any information about what
changed.
@@ -96,18 +96,18 @@ For that, you also need ...
If set, disallows running git\-shell to handle unknown commands.
.IP
.IP "GIT_ANNEX_SHELL_DIRECTORY"
-If set, git\-annex\-shell will refuse to run commands that do not operate
+If set, git-annex\-shell will refuse to run commands that do not operate
on the specified directory.
.IP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
git\-shell(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
.PP
-<http://git\-annex.branchable.com/>
+<http://git-annex.branchable.com/>
.PP
.PP
diff --git a/man/git-annex-status.1 b/man/git-annex-status.1
index 1fd352d..ae01886 100644
--- a/man/git-annex-status.1
+++ b/man/git-annex-status.1
@@ -1,6 +1,6 @@
.TH git-annex-status 1
.SH NAME
-git\-annex status \- show the working tree status
+git-annex status \- show the working tree status
.PP
.SH SYNOPSIS
git annex status \fB[path ...]\fP
@@ -16,10 +16,10 @@ Particularly useful in direct mode.
.IP "\fB\-\-json\fP"
.IP
Enable JSON output. This is intended to be parsed by programs that use
-git\-annex. Each line of output is a JSON object.
+git-annex. Each line of output is a JSON object.
.IP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-sync.1 b/man/git-annex-sync.1
index 0aa7726..23e6d18 100644
--- a/man/git-annex-sync.1
+++ b/man/git-annex-sync.1
@@ -1,6 +1,6 @@
.TH git-annex-sync 1
.SH NAME
-git\-annex sync \- synchronize local repository with remotes
+git-annex sync \- synchronize local repository with remotes
.PP
.SH SYNOPSIS
git annex sync \fB[remote ...]\fP
@@ -13,7 +13,7 @@ sync with all remotes.
.PP
The sync process involves first committing any local changes to files
that have previously been added to the repository,
-then fetching and merging the \fBsynced/master\fP and the \fBgit\-annex\fP branch
+then fetching and merging the \fBsynced/master\fP and the \fBgit-annex\fP branch
from the remote repositories, and finally pushing the changes back to
those branches on the remote repositories. You can use standard git
commands to do each of those steps by hand, or if you don't want to
@@ -42,13 +42,13 @@ as necessary.
By default, this tries to get each annexed file that the local repository
does not yet have, and then copies each file to every remote that it is
syncing with. This behavior can be overridden by configuring the preferred
-content of a repository. See [git\-annex\-preferred\-content](1)
+content of a repository. See [git-annex\-preferred\-content](1)
.IP
.IP "\fB\-\-message=msg\fP"
Use this option to specify a commit message.
.IP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-test.1 b/man/git-annex-test.1
index 67fd5e2..a30267a 100644
--- a/man/git-annex-test.1
+++ b/man/git-annex-test.1
@@ -1,25 +1,25 @@
.TH git-annex-test 1
.SH NAME
-git\-annex test \- run built\-in test suite
+git-annex test \- run built\-in test suite
.PP
.SH SYNOPSIS
git annex test
.PP
.SH DESCRIPTION
-This runs git\-annex's built\-in test suite.
+This runs git-annex's built\-in test suite.
.PP
The test suite runs in the \fB.t\fP subdirectory of the current directory
(it refuses to run if \fB.t\fP already exists).
.PP
It can be useful to run the test suite on different filesystems,
-or to verify your local installation of git\-annex.
+or to verify your local installation of git-annex.
.PP
.SH OPTIONS
There are several options, provided by Haskell's tasty test
framework. Pass \-\-help for details.
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-testremote.1 b/man/git-annex-testremote.1
index 03a9839..4c36c09 100644
--- a/man/git-annex-testremote.1
+++ b/man/git-annex-testremote.1
@@ -1,6 +1,6 @@
.TH git-annex-testremote 1
.SH NAME
-git\-annex testremote \- test transfers to/from a remote
+git-annex testremote \- test transfers to/from a remote
.PP
.SH SYNOPSIS
git annex testremote \fBremote\fP
@@ -25,7 +25,7 @@ Perform a smaller set of tests.
Tune the base size of the generated objects. The default is 1MiB.
.IP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-transferkey.1 b/man/git-annex-transferkey.1
index 18d0b64..f09b8b3 100644
--- a/man/git-annex-transferkey.1
+++ b/man/git-annex-transferkey.1
@@ -1,6 +1,6 @@
.TH git-annex-transferkey 1
.SH NAME
-git\-annex transferkey \- transfers a key from or to a remote
+git-annex transferkey \- transfers a key from or to a remote
.PP
.SH SYNOPSIS
git annex transferkey \fBkey [\-\-from=remote|\-\-to=remote]\fP
@@ -22,7 +22,7 @@ Provides a hint about the name of the file associated with the key.
(This name is only used in progress displays.)
.IP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-transferkeys.1 b/man/git-annex-transferkeys.1
index 625c4ba..a9e63b3 100644
--- a/man/git-annex-transferkeys.1
+++ b/man/git-annex-transferkeys.1
@@ -1,6 +1,6 @@
.TH git-annex-transferkeys 1
.SH NAME
-git\-annex transferkeys \- transfers keys
+git-annex transferkeys \- transfers keys
.PP
.SH SYNOPSIS
git annex transferkeys
@@ -15,9 +15,9 @@ It's normal to have a transferkeys process running when the assistant is
running.
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
-git\-annex\-assistant(1)
+git-annex\-assistant(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-trust.1 b/man/git-annex-trust.1
index 93cd3b8..3b64b1b 100644
--- a/man/git-annex-trust.1
+++ b/man/git-annex-trust.1
@@ -1,6 +1,6 @@
.TH git-annex-trust 1
.SH NAME
-git\-annex trust \- trust a repository
+git-annex trust \- trust a repository
.PP
.SH SYNOPSIS
git annex trust \fB[repository ...]\fP
@@ -13,7 +13,7 @@ Repositories can be specified using their remote name, their
description, or their UUID. To trust the current repository, use "here".
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-unannex.1 b/man/git-annex-unannex.1
index 40e88d9..73693ee 100644
--- a/man/git-annex-unannex.1
+++ b/man/git-annex-unannex.1
@@ -1,6 +1,6 @@
.TH git-annex-unannex 1
.SH NAME
-git\-annex unannex \- undo accidental add command
+git-annex unannex \- undo accidental add command
.PP
.SH SYNOPSIS
git annex unannex \fB[path ...]\fP
@@ -25,11 +25,11 @@ But use \-\-fast mode with caution, because editing the file will
change the content in the annex.
.IP
.IP "file matching options"
-The git\-annex\-matching\-options(1)
+The git-annex\-matching\-options(1)
can be used to specify files to unannex.
.IP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-undo.1 b/man/git-annex-undo.1
index 14875f7..53cd1cb 100644
--- a/man/git-annex-undo.1
+++ b/man/git-annex-undo.1
@@ -1,6 +1,6 @@
.TH git-annex-undo 1
.SH NAME
-git\-annex undo \- undo last change to a file or directory
+git-annex undo \- undo last change to a file or directory
.PP
.SH SYNOPSIS
git annex \fB[filename|directory] ...\fP
@@ -21,7 +21,7 @@ Note that this does not undo get/drop of a file's content; it only
operates on the file tree committed to git.
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-ungroup.1 b/man/git-annex-ungroup.1
index 02a4bf4..a436f38 100644
--- a/man/git-annex-ungroup.1
+++ b/man/git-annex-ungroup.1
@@ -1,6 +1,6 @@
.TH git-annex-ungroup 1
.SH NAME
-git\-annex ungroup \- remove a repository from a group
+git-annex ungroup \- remove a repository from a group
.PP
.SH SYNOPSIS
git annex ungroup \fBrepository groupname\fP
@@ -9,7 +9,7 @@ git annex ungroup \fBrepository groupname\fP
Removes a repository from a group.
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-uninit.1 b/man/git-annex-uninit.1
index 2c6c362..ae36e86 100644
--- a/man/git-annex-uninit.1
+++ b/man/git-annex-uninit.1
@@ -1,19 +1,19 @@
.TH git-annex-uninit 1
.SH NAME
-git\-annex uninit \- de\-initialize git\-annex and clean out repository
+git-annex uninit \- de\-initialize git-annex and clean out repository
.PP
.SH SYNOPSIS
git annex uninit
.PP
.SH DESCRIPTION
Use this to stop using git annex. It will unannex every file in the
-repository, and remove all of git\-annex's other data, leaving you with a
+repository, and remove all of git-annex's other data, leaving you with a
git repository plus the previously annexed files.
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
-git\-annex\-unannex(1)
+git-annex\-unannex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-unlock.1 b/man/git-annex-unlock.1
index 7be9693..95a6fdb 100644
--- a/man/git-annex-unlock.1
+++ b/man/git-annex-unlock.1
@@ -1,6 +1,6 @@
.TH git-annex-unlock 1
.SH NAME
-git\-annex unlock \- unlock files for modification
+git-annex unlock \- unlock files for modification
.PP
.SH SYNOPSIS
git annex unlock \fB[path ...]\fP
@@ -15,11 +15,11 @@ it back into the annex.
.SH OPTIONS
.IP "file matching options"
.IP
-The git\-annex\-matching\-options(1)
+The git-annex\-matching\-options(1)
can be used to specify files to unlock.
.IP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-untrust.1 b/man/git-annex-untrust.1
index d11d0b4..c910c59 100644
--- a/man/git-annex-untrust.1
+++ b/man/git-annex-untrust.1
@@ -1,6 +1,6 @@
.TH git-annex-untrust 1
.SH NAME
-git\-annex untrust \- do not trust a repository
+git-annex untrust \- do not trust a repository
.PP
.SH SYNOPSIS
git annex untrust \fB[repository ...]\fP
@@ -13,7 +13,7 @@ Repositories can be specified using their remote name, their
description, or their UUID. To untrust the current repository, use "here".
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-unused.1 b/man/git-annex-unused.1
index 76147b2..0cd2e3c 100644
--- a/man/git-annex-unused.1
+++ b/man/git-annex-unused.1
@@ -1,6 +1,6 @@
.TH git-annex-unused 1
.SH NAME
-git\-annex unused \- look for unused file content
+git-annex unused \- look for unused file content
.PP
.SH SYNOPSIS
git annex unused
@@ -10,7 +10,7 @@ Checks the annex for data that does not correspond to any files present
in any tag or branch, and prints a numbered list of the data.
.PP
After running this command, you can use the \fB\-\-unused\fP option with many
-other git\-annex commands to operate on all the unused data that was found.
+other git-annex commands to operate on all the unused data that was found.
.PP
For example, to move all unused data to origin:
.PP
@@ -25,7 +25,7 @@ Only show unused temp and bad files.
Check for unused data on a remote.
.IP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-upgrade.1 b/man/git-annex-upgrade.1
index 853ffe7..ca66d25 100644
--- a/man/git-annex-upgrade.1
+++ b/man/git-annex-upgrade.1
@@ -1,6 +1,6 @@
.TH git-annex-upgrade 1
.SH NAME
-git\-annex upgrade \- upgrade repository layout
+git-annex upgrade \- upgrade repository layout
.PP
.SH SYNOPSIS
git annex upgrade
@@ -8,19 +8,19 @@ git annex upgrade
.SH DESCRIPTION
Upgrades the repository to current layout.
.PP
-Each git\-annex repository has an annex.version in its git configuration,
-that indicates the repository version. If git\-annex changes to a new
-layout, you must upgrade the repository before git\-annex can be used in it.
+Each git-annex repository has an annex.version in its git configuration,
+that indicates the repository version. If git-annex changes to a new
+layout, you must upgrade the repository before git-annex can be used in it.
.PP
To see version information, run \fBgit annex version\fP.
.PP
-Currently, git\-annex supports upgrades all the way back to version 0, which
-was only used by its author. It's expected that git\-annex will always
+Currently, git-annex supports upgrades all the way back to version 0, which
+was only used by its author. It's expected that git-annex will always
support upgrading from all past repository versions \-\- this is necessary to
allow archives to be taken offline for years and later used.
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-vadd.1 b/man/git-annex-vadd.1
index 878e451..8eba355 100644
--- a/man/git-annex-vadd.1
+++ b/man/git-annex-vadd.1
@@ -1,6 +1,6 @@
.TH git-annex-vadd 1
.SH NAME
-git\-annex vadd \- add subdirs to current view
+git-annex vadd \- add subdirs to current view
.PP
.SH SYNOPSIS
git annex vadd \fB[field=glob ...] [field=value ...] [tag ...]\fP
@@ -16,15 +16,15 @@ So will \fBvadd year=2014 year=2013\fP, but limiting the years in view
to only those two.
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
-git\-annex\-view(1)
+git-annex\-view(1)
.PP
-git\-annex\-vpop(1)
+git-annex\-vpop(1)
.PP
-git\-annex\-vfilter(1)
+git-annex\-vfilter(1)
.PP
-git\-annex\-vcycle(1)
+git-annex\-vcycle(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-vcycle.1 b/man/git-annex-vcycle.1
index a747c10..c0a2865 100644
--- a/man/git-annex-vcycle.1
+++ b/man/git-annex-vcycle.1
@@ -1,6 +1,6 @@
.TH git-annex-vcycle 1
.SH NAME
-git\-annex vcycle \- switch view to next layout
+git-annex vcycle \- switch view to next layout
.PP
.SH SYNOPSIS
git annex vcycle
@@ -12,15 +12,15 @@ For example, when the view is by year/author/tag, \fBvcycle\fP will switch
it to author/tag/year.
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
-git\-annex\-view(1)
+git-annex\-view(1)
.PP
-git\-annex\-vpop(1)
+git-annex\-vpop(1)
.PP
-git\-annex\-vadd(1)
+git-annex\-vadd(1)
.PP
-git\-annex\-vfilter(1)
+git-annex\-vfilter(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-version.1 b/man/git-annex-version.1
index 762915e..43782bc 100644
--- a/man/git-annex-version.1
+++ b/man/git-annex-version.1
@@ -1,29 +1,29 @@
.TH git-annex-version 1
.SH NAME
-git\-annex version \- show version info
+git-annex version \- show version info
.PP
.SH SYNOPSIS
git annex version
.PP
.SH DESCRIPTION
-Shows the version of git\-annex, as well as repository version information.
+Shows the version of git-annex, as well as repository version information.
.PP
-git\-annex's version is in the form MAJOR.DATE, where MAJOR is a number
+git-annex's version is in the form MAJOR.DATE, where MAJOR is a number
like 5, which corresponds to the current repository version, and DATE
is the date of the last release, like 20150320.
.PP
-Daily builds of git\-annex will append a "\-gREF" to the version, which
-corresponds to the git ref from git\-annex's source repository that was
+Daily builds of git-annex will append a "\-gREF" to the version, which
+corresponds to the git ref from git-annex's source repository that was
built. Therefore, "5.20150320\-gdd35cf3" is a daily build, and
"5.20150401" is an April 1st release made a bit later.
.PP
.SH OPTIONS
.IP "\fB\-\-raw\fP"
.IP
-Causes only git\-annex's version to be output, and nothing else.
+Causes only git-annex's version to be output, and nothing else.
.IP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-vfilter.1 b/man/git-annex-vfilter.1
index 6a30eee..8e02c69 100644
--- a/man/git-annex-vfilter.1
+++ b/man/git-annex-vfilter.1
@@ -1,6 +1,6 @@
.TH git-annex-vfilter 1
.SH NAME
-git\-annex vfilter \- filter current view
+git-annex vfilter \- filter current view
.PP
.SH SYNOPSIS
git annex vfilter \fB[tag ...] [field=value ...] [!tag ...] [field!=value ...]\fP
@@ -10,15 +10,15 @@ Filters the current view to only the files that have the
specified field values and tags.
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
-git\-annex\-view(1)
+git-annex\-view(1)
.PP
-git\-annex\-vpop(1)
+git-annex\-vpop(1)
.PP
-git\-annex\-vadd(1)
+git-annex\-vadd(1)
.PP
-git\-annex\-vcycle(1)
+git-annex\-vcycle(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-vicfg.1 b/man/git-annex-vicfg.1
index 719ad74..f49ff06 100644
--- a/man/git-annex-vicfg.1
+++ b/man/git-annex-vicfg.1
@@ -1,17 +1,17 @@
.TH git-annex-vicfg 1
.SH NAME
-git\-annex vicfg \- edit git\-annex's configuration
+git-annex vicfg \- edit git-annex's configuration
.PP
.SH SYNOPSIS
git annex vicfg
.PP
.SH DESCRIPTION
-Opens EDITOR on a temp file containing all of git\-annex's global
+Opens EDITOR on a temp file containing all of git-annex's global
configuration settings, and when it exits, stores any
-changes made back to the git\-annex branch.
+changes made back to the git-annex branch.
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-view.1 b/man/git-annex-view.1
index 99bc4dc..89a037d 100644
--- a/man/git-annex-view.1
+++ b/man/git-annex-view.1
@@ -1,6 +1,6 @@
.TH git-annex-view 1
.SH NAME
-git\-annex view \- enter a view branch
+git-annex view \- enter a view branch
.PP
.SH SYNOPSIS
git annex view \fB[tag ...] [field=value ...] [field=glob ...] [!tag ...] [field!=value ...]\fP
@@ -29,17 +29,17 @@ directory in the view, while \fBpodcasts/=*\fP will preserve the
subdirectories of the podcasts directory in the view.
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
-git\-annex\-metadata(1)
+git-annex\-metadata(1)
.PP
-git\-annex\-vpop(1)
+git-annex\-vpop(1)
.PP
-git\-annex\-vfilter(1)
+git-annex\-vfilter(1)
.PP
-git\-annex\-vadd(1)
+git-annex\-vadd(1)
.PP
-git\-annex\-vcycle(1)
+git-annex\-vcycle(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-vpop.1 b/man/git-annex-vpop.1
index 365b439..4b354ca 100644
--- a/man/git-annex-vpop.1
+++ b/man/git-annex-vpop.1
@@ -1,6 +1,6 @@
.TH git-annex-vpop 1
.SH NAME
-git\-annex vpop \- switch back to previous view
+git-annex vpop \- switch back to previous view
.PP
.SH SYNOPSIS
git annex vpop \fB[N]\fP
@@ -12,15 +12,15 @@ Or, from the first view back to original branch.
The optional number tells how many views to pop.
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
-git\-annex\-view(1)
+git-annex\-view(1)
.PP
-git\-annex\-vfilter(1)
+git-annex\-vfilter(1)
.PP
-git\-annex\-vadd(1)
+git-annex\-vadd(1)
.PP
-git\-annex\-vcycle(1)
+git-annex\-vcycle(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-wanted.1 b/man/git-annex-wanted.1
index 7327823..c9bb53d 100644
--- a/man/git-annex-wanted.1
+++ b/man/git-annex-wanted.1
@@ -1,13 +1,13 @@
.TH git-annex-wanted 1
.SH NAME
-git\-annex wanted \- get or set preferred content expression
+git-annex wanted \- get or set preferred content expression
.PP
.SH SYNOPSIS
git annex wanted \fBrepository [expression]\fP
.PP
.SH DESCRIPTION
When run with an expression, configures the content that is preferred
-to be held in the archive. See git\-annex\-preferred\-content(1)
+to be held in the archive. See git-annex\-preferred\-content(1)
.PP
For example:
.PP
@@ -17,7 +17,7 @@ Without an expression, displays the current preferred content setting
of the repository.
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-watch.1 b/man/git-annex-watch.1
index 1b32e11..8d1235b 100644
--- a/man/git-annex-watch.1
+++ b/man/git-annex-watch.1
@@ -1,6 +1,6 @@
.TH git-annex-watch 1
.SH NAME
-git\-annex watch \- watch for changes
+git-annex watch \- watch for changes
.PP
.SH SYNOPSIS
git annex watch
@@ -29,7 +29,7 @@ Avoid forking to the background.
Stop a running daemon.
.IP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-webapp.1 b/man/git-annex-webapp.1
index ff80707..4e1b09a 100644
--- a/man/git-annex-webapp.1
+++ b/man/git-annex-webapp.1
@@ -1,13 +1,13 @@
.TH git-annex-webapp 1
.SH NAME
-git\-annex webapp \- launch webapp
+git-annex webapp \- launch webapp
.PP
.SH SYNOPSIS
git annex webapp
.PP
.SH DESCRIPTION
-Opens a web app, that allows easy setup of a git\-annex repository,
-and control of the git\-annex assistant. If the assistant is not
+Opens a web app, that allows easy setup of a git-annex repository,
+and control of the git-annex assistant. If the assistant is not
already running, it will be started.
.PP
By default, the webapp can only be accessed from localhost, and running
@@ -35,7 +35,7 @@ one way to generate those files, using a self\-signed certificate:
openssl req \-new \-x509 \-key .git/annex/privkey.pem > .git/annex/certificate.pem
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-whereis.1 b/man/git-annex-whereis.1
index 128fc48..562ef34 100644
--- a/man/git-annex-whereis.1
+++ b/man/git-annex-whereis.1
@@ -1,6 +1,6 @@
.TH git-annex-whereis 1
.SH NAME
-git\-annex whereis \- lists repositories that have file content
+git-annex whereis \- lists repositories that have file content
.PP
.SH SYNOPSIS
git annex whereis \fB[path ...]\fP
@@ -22,14 +22,14 @@ For example:
.IP "\fB\-\-json\fP"
.IP
Enable JSON output. This is intended to be parsed by programs that use
-git\-annex. Each line of output is a JSON object.
+git-annex. Each line of output is a JSON object.
.IP
.IP "file matching options"
-The git\-annex\-matching\-options(1)
+The git-annex\-matching\-options(1)
can be used to specify files to act on.
.IP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-xmppgit.1 b/man/git-annex-xmppgit.1
index 7cba366..b0f6f43 100644
--- a/man/git-annex-xmppgit.1
+++ b/man/git-annex-xmppgit.1
@@ -1,6 +1,6 @@
.TH git-annex-xmppgit 1
.SH NAME
-git\-annex xmppgit \- git to XMPP relay
+git-annex xmppgit \- git to XMPP relay
.PP
.SH SYNOPSIS
git annex xmppgit
@@ -9,9 +9,9 @@ git annex xmppgit
This command is used internally by the assistant to perform git pulls over XMPP.
.PP
.SH SEE ALSO
-git\-annex(1)
+git-annex(1)
.PP
-git\-annex\-assistant(1)
+git-annex\-assistant(1)
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/man/git-annex.1 b/man/git-annex.1
index fdbdbfb..23f8fd9 100644
--- a/man/git-annex.1
+++ b/man/git-annex.1
@@ -1,12 +1,12 @@
.TH git-annex 1
.SH NAME
-git\-annex \- manage files with git, without checking their contents in
+git-annex \- manage files with git, without checking their contents in
.PP
.SH SYNOPSIS
git annex command [params ...]
.PP
.SH DESCRIPTION
-git\-annex allows managing files with git, without checking the file
+git-annex allows managing files with git, without checking the file
contents into git. While that may seem paradoxical, it is useful when
dealing with files larger than git can currently easily handle, whether due
to limitations in memory, checksumming time, or disk space.
@@ -22,7 +22,7 @@ revision control.
When a file is annexed, its content is moved into a key\-value store, and
a symlink is made that points to the content. These symlinks are checked into
git and versioned like regular files. You can move them around, delete
-them, and so on. Pushing to another git repository will make git\-annex
+them, and so on. Pushing to another git repository will make git-annex
there aware of the annexed file, and it can be used to retrieve its
content from the key\-value store.
.PP
@@ -50,9 +50,9 @@ content from the key\-value store.
move iso/Debian_5.0.iso (moving to usbdrive...) ok
.PP
.SH COMMONLY USED COMMANDS
-Like many git commands, git\-annex can be passed a path that
+Like many git commands, git-annex can be passed a path that
is either a file or a directory. In the latter case it acts on all relevant
-files in the directory. When no path is specified, most git\-annex commands
+files in the directory. When no path is specified, most git-annex commands
default to acting on all relevant files in the current directory (and
subdirectories).
.PP
@@ -65,38 +65,38 @@ For help on a specific command, use \fBgit annex help command\fP
Adds files in the path to the annex. If no path is specified, adds
files from the current directory and below.
.IP
-See git\-annex\-add(1) for details.
+See git-annex\-add(1) for details.
.IP
.IP "\fBget [path ...]\fP"
Makes the content of annexed files available in this repository.
.IP
-See git\-annex\-get(1) for details.
+See git-annex\-get(1) for details.
.IP
.IP "\fBdrop [path ...]\fP"
Drops the content of annexed files from this repository.
.IP
-See git\-annex\-drop(1) for details.
+See git-annex\-drop(1) for details.
.IP
.IP "\fBmove [path ...] [\-\-from=remote|\-\-to=remote]\fP"
Moves the content of files from or to another remote.
.IP
-See git\-annex\-move(1) for details.
+See git-annex\-move(1) for details.
.IP
.IP "\fBcopy [path ...] [\-\-from=remote|\-\-to=remote]\fP"
Copies the content of files from or to another remote.
.IP
-See git\-annex\-copy(1) for details.
+See git-annex\-copy(1) for details.
.IP
.IP "\fBstatus [path ...]\fP"
Similar to \fBgit status \-\-short\fP, displays the status of the files in the
working tree. Particularly useful in direct mode.
.IP
-See git\-annex\-status(1) for details.
+See git-annex\-status(1) for details.
.IP
.IP "\fBunlock [path ...]\fP"
Unlock annexed files for modification.
.IP
-See git\-annex\-unlock(1) for details.
+See git-annex\-unlock(1) for details.
.IP
.IP "\fBedit [path ...]\fP"
This is an alias for the unlock command. May be easier to remember,
@@ -106,151 +106,158 @@ if you think of this as allowing you to edit an annexed file.
Use this to undo an unlock command if you don't want to modify
the files, or have made modifications you want to discard.
.IP
-See git\-annex\-lock(1) for details.
+See git-annex\-lock(1) for details.
.IP
.IP "\fBsync [remote ...]\fP"
Synchronize local repository with remotes.
.IP
-See git\-annex\-sync(1) for details.
+See git-annex\-sync(1) for details.
.IP
.IP "\fBmirror [path ...] [\-\-to=remote|\-\-from=remote]\fP"
Mirror content of files to/from another repository.
.IP
-See git\-annex\-mirror(1) for details.
+See git-annex\-mirror(1) for details.
.IP
.IP "\fBaddurl [url ...]\fP"
Downloads each url to its own file, which is added to the annex.
.IP
-See git\-annex\-addurl(1) for details.
+See git-annex\-addurl(1) for details.
.IP
.IP "\fBrmurl file url\fP"
Record that the file is no longer available at the url.
.IP
-See git\-annex\-rmurl(1) for details.
+See git-annex\-rmurl(1) for details.
.IP
.IP "\fBimport [path ...]\fP"
Move and add files from outside git working copy into the annex.
.IP
-See git\-annex\-import(1) for details.
+See git-annex\-import(1) for details.
.IP
.IP "\fBimportfeed [url ...]\fP"
Imports the contents of podcast feeds into the annex.
.IP
-See git\-annex\-importfeed(1) for details.
+See git-annex\-importfeed(1) for details.
.IP
.IP "\fBundo [filename|directory] ...\fP"
Undo last change to a file or directory.
.IP
-See git\-annex\-undo(1) for details.
+See git-annex\-undo(1) for details.
.IP
.IP "\fBwatch\fP"
Watch for changes and autocommit.
.IP
-See git\-annex\-watch(1) for details.
+See git-annex\-watch(1) for details.
.IP
.IP "\fBassistant\fP"
Automatically sync folders between devices.
.IP
-See git\-annex\-assistant(1) for details.
+See git-annex\-assistant(1) for details.
.IP
.IP "\fBwebapp\fP"
-Opens a web app, that allows easy setup of a git\-annex repository,
-and control of the git\-annex assistant. If the assistant is not
+Opens a web app, that allows easy setup of a git-annex repository,
+and control of the git-annex assistant. If the assistant is not
already running, it will be started.
.IP
-See git\-annex\-webapp(1) for details.
+See git-annex\-webapp(1) for details.
.IP
.SH REPOSITORY SETUP COMMANDS
.IP "\fBinit [description]\fP"
.IP
Until a repository (or one of its remotes) has been initialized,
-git\-annex will refuse to operate on it, to avoid accidentally
+git-annex will refuse to operate on it, to avoid accidentally
using it in a repository that was not intended to have an annex.
.IP
-See git\-annex\-init(1) for details.
+See git-annex\-init(1) for details.
.IP
.IP "\fBdescribe repository description\fP"
Changes the description of a repository.
.IP
-See git\-annex\-describe(1) for details.
+See git-annex\-describe(1) for details.
.IP
.IP "\fBinitremote name type=value [param=value ...]\fP"
Creates a new special remote, and adds it to \fB.git/config\fP.
.IP
-See git\-annex\-initremote(1) for details.
+See git-annex\-initremote(1) for details.
.IP
.IP "\fBenableremote name [param=value ...]\fP"
Enables use of an existing special remote in the current repository.
.IP
-See git\-annex\-enableremote(1) for details.
+See git-annex\-enableremote(1) for details.
.IP
.IP "\fBnumcopies [N]\fP"
Configure desired number of copies.
.IP
-See git\-annex\-numcopies(1) for details.
+See git-annex\-numcopies(1) for details.
.IP
.IP "\fBtrust [repository ...]\fP"
Records that a repository is trusted to not unexpectedly lose
content. Use with care.
.IP
-See git\-annex\-trust(1) for details.
+See git-annex\-trust(1) for details.
.IP
.IP "\fBuntrust [repository ...]\fP"
Records that a repository is not trusted and could lose content
at any time.
.IP
-See git\-annex\-untrust(1) for details.
+See git-annex\-untrust(1) for details.
.IP
.IP "\fBsemitrust [repository ...]\fP"
Returns a repository to the default semi trusted state.
.IP
-See git\-annex\-semitrust(1) for details.
+See git-annex\-semitrust(1) for details.
.IP
.IP "\fBdead [repository ...]\fP"
Indicates that the repository has been irretrievably lost.
.IP
-See git\-annex\-dead(1) for details.
+See git-annex\-dead(1) for details.
.IP
.IP "\fBgroup repository groupname\fP"
Add a repository to a group.
.IP
-See git\-annex\-group(1) for details.
+See git-annex\-group(1) for details.
.IP
.IP "\fBungroup repository groupname\fP"
Removes a repository from a group.
.IP
-See git\-annex\-ungroup(1) for details.
+See git-annex\-ungroup(1) for details.
.IP
.IP "\fBwanted repository [expression]\fP"
Get or set preferred content expression.
.IP
-See git\-annex\-wanted(1) for details.
+See git-annex\-wanted(1) for details.
.IP
.IP "\fBgroupwanted groupname [expression]\fP"
-See git\-annex\-groupwanted(1) for details.
+Get or set groupwanted expression.
+.IP
+See git-annex\-groupwanted(1) for details.
+.IP
+.IP "\fBrequired repository [expression]\fP"
+Get or set required content expression.
+.IP
+See git-annex\-required(1) for details.
.IP
.IP "\fBschedule repository [expression]\fP"
Get or set scheduled jobs.
.IP
-See git\-annex\-schedule(1) for details.
+See git-annex\-schedule(1) for details.
.IP
.IP "\fBvicfg\fP"
Opens EDITOR on a temp file containing most of the above configuration
settings, as well as a few others, and when it exits, stores any changes
-made back to the git\-annex branch.
+made back to the git-annex branch.
.IP
-See git\-annex\-vicfg(1) for details.
+See git-annex\-vicfg(1) for details.
.IP
.IP "\fBdirect\fP"
Switches a repository to use direct mode, where rather than symlinks to
files, the files are directly present in the repository.
.IP
-See git\-annex\-direct(1) for details.
+See git-annex\-direct(1) for details.
.IP
.IP "\fBindirect\fP"
Switches a repository back from direct mode to the default, indirect mode.
.IP
-See git\-annex\-indirect(1) for details.
+See git-annex\-indirect(1) for details.
.IP
.SH REPOSITORY MAINTENANCE COMMANDS
.IP "\fBfsck [path ...]\fP"
@@ -258,7 +265,7 @@ See git\-annex\-indirect(1) for details.
Checks the annex consistency, and warns about or fixes any problems found.
This is a good complement to \fBgit fsck\fP.
.IP
-See git\-annex\-fsck(1) for details.
+See git-annex\-fsck(1) for details.
.IP
.IP "\fBexpire [repository:]time ...\fP"
Expires repositories that have not recently performed an activity
@@ -268,48 +275,48 @@ Expires repositories that have not recently performed an activity
Checks the annex for data that does not correspond to any files present
in any tag or branch, and prints a numbered list of the data.
.IP
-See git\-annex\-unused(1) for details.
+See git-annex\-unused(1) for details.
.IP
.IP "\fBdropunused [number|range ...]\fP"
Drops the data corresponding to the numbers, as listed by the last
\fBgit annex unused\fP
.IP
-See git\-annex\-dropunused(1) for details.
+See git-annex\-dropunused(1) for details.
.IP
.IP "\fBaddunused [number|range ...]\fP"
Adds back files for the content corresponding to the numbers or ranges,
as listed by the last \fBgit annex unused\fP.
.IP
-See git\-annex\-addunused(1) for details.
+See git-annex\-addunused(1) for details.
.IP
.IP "\fBfix [path ...]\fP"
Fixes up symlinks that have become broken to again point to annexed content.
.IP
-See git\-annex\-fix(1) for details.
+See git-annex\-fix(1) for details.
.IP
.IP "\fBmerge\fP"
Automatically merge changes from remotes.
.IP
-See git\-annex\-merge(1) for details.
+See git-annex\-merge(1) for details.
.IP
.IP "\fBupgrade\fP"
Upgrades the repository to current layout.
.IP
-See git\-annex\-upgrade(1) for details.
+See git-annex\-upgrade(1) for details.
.IP
.IP "\fBforget\fP"
-Causes the git\-annex branch to be rewritten, throwing away historical
+Causes the git-annex branch to be rewritten, throwing away historical
data about past locations of files.
.IP
-See git\-annex\-forget(1) for details.
+See git-annex\-forget(1) for details.
.IP
.IP "\fBrepair\fP"
This can repair many of the problems with git repositories that \fBgit fsck\fP
detects, but does not itself fix. It's useful if a repository has become
-badly damaged. One way this can happen is if a repository used by git\-annex
+badly damaged. One way this can happen is if a repository used by git-annex
is on a removable drive that gets unplugged at the wrong time.
.IP
-See git\-annex\-repair(1) for details.
+See git-annex\-repair(1) for details.
.IP
.SH QUERY COMMANDS
.IP "\fBfind [path ...]\fP"
@@ -317,24 +324,24 @@ See git\-annex\-repair(1) for details.
Outputs a list of annexed files in the specified path. With no path,
finds files in the current directory and its subdirectories.
.IP
-See git\-annex\-find(1) for details.
+See git-annex\-find(1) for details.
.IP
.IP "\fBwhereis [path ...]\fP"
Displays information about where the contents of files are located.
.IP
-See git\-annex\-whereis(1) for details.
+See git-annex\-whereis(1) for details.
.IP
.IP "\fBlist [path ...]\fP"
Displays a table of remotes that contain the contents of the specified
files. This is similar to whereis but a more compact display.
.IP
-See git\-annex\-list(1) for details.
+See git-annex\-list(1) for details.
.IP
.IP "\fBlog [path ...]\fP"
Displays the location log for the specified file or files,
showing each repository they were added to ("+") and removed from ("\-").
.IP
-See git\-annex\-log(1) for details.
+See git-annex\-log(1) for details.
.IP
.IP "\fBinfo [directory|file|remote|uuid ...]\fP"
Displays statistics and other information for the specified item,
@@ -344,17 +351,17 @@ repository.
When no item is specified, displays statistics and information
for the repository as a whole.
.IP
-See git\-annex\-info(1) for details.
+See git-annex\-info(1) for details.
.IP
.IP "\fBversion\fP"
-Shows the version of git\-annex, as well as repository version information.
+Shows the version of git-annex, as well as repository version information.
.IP
-See git\-annex\-version(1) for details.
+See git-annex\-version(1) for details.
.IP
.IP "\fBmap\fP"
Generate map of repositories.
.IP
-See git\-annex\-map(1) for details.
+See git-annex\-map(1) for details.
.IP
.SH METADATA COMMANDS
.IP "\fBmetadata [path ...]\fP"
@@ -366,7 +373,7 @@ have any number of values.
This command can be used to set metadata, or show the currently set
metadata.
.IP
-See git\-annex\-metadata(1) for details.
+See git-annex\-metadata(1) for details.
.IP
.IP "\fBview [tag ...] [field=value ...] [field=glob ...] [!tag ...] [field!=value ...]\fP"
Uses metadata to build a view branch of the files in the current branch,
@@ -374,60 +381,60 @@ and checks out the view branch. Only files in the current branch whose
metadata matches all the specified field values and tags will be
shown in the view.
.IP
-See git\-annex\-view(1) for details.
+See git-annex\-view(1) for details.
.IP
.IP "\fBvpop [N]\fP"
Switches from the currently active view back to the previous view.
Or, from the first view back to original branch.
.IP
-See git\-annex\-vpop(1) for details.
+See git-annex\-vpop(1) for details.
.IP
.IP "\fBvfilter [tag ...] [field=value ...] [!tag ...] [field!=value ...]\fP"
Filters the current view to only the files that have the
specified field values and tags.
.IP
-See git\-annex\-vfilter(1) for details.
+See git-annex\-vfilter(1) for details.
.IP
.IP "\fBvadd [field=glob ...] [field=value ...] [tag ...]\fP"
Changes the current view, adding an additional level of directories
to categorize the files.
.IP
-See git\-annex\-vfilter(1) for details.
+See git-annex\-vfilter(1) for details.
.IP
.IP "\fBvcycle\fP"
When a view involves nested subdirectories, this cycles the order.
.IP
-See git\-annex\-vcycle(1) for details.
+See git-annex\-vcycle(1) for details.
.IP
.SH UTILITY COMMANDS
.IP "\fBmigrate [path ...]\fP"
.IP
Changes the specified annexed files to use a different key\-value backend.
.IP
-See git\-annex\-migrate(1) for details.
+See git-annex\-migrate(1) for details.
.IP
.IP "\fBreinject src dest\fP"
Moves the src file into the annex as the content of the dest file.
This can be useful if you have obtained the content of a file from
elsewhere and want to put it in the local annex.
.IP
-See git\-annex\-reinject(1) for details.
+See git-annex\-reinject(1) for details.
.IP
.IP "\fBunannex [path ...]\fP"
Use this to undo an accidental \fBgit annex add\fP command. It puts the
file back how it was before the add.
.IP
-See git\-annex\-unannex(1) for details.
+See git-annex\-unannex(1) for details.
.IP
.IP "\fBuninit\fP"
-De\-initialize git\-annex and clean out repository.
+De\-initialize git-annex and clean out repository.
.IP
-See git\-annex\-unannex(1) for details.
+See git-annex\-unannex(1) for details.
.IP
.IP "\fBreinit uuid|description\fP"
Initialize repository, reusing old UUID.
.IP
-See git\-annex\-reinit(1) for details.
+See git-annex\-reinit(1) for details.
.IP
.SH PLUMBING COMMANDS
.IP "\fBpre\-commit [path ...]\fP"
@@ -435,111 +442,111 @@ See git\-annex\-reinit(1) for details.
This is meant to be called from git's pre\-commit hook. \fBgit annex init\fP
automatically creates a pre\-commit hook using this.
.IP
-See git\-annex\-pre\-commit(1) for details.
+See git-annex\-pre\-commit(1) for details.
.IP
.IP "\fBlookupkey [file ...]\fP"
Looks up key used for file.
.IP
-See git\-annex\-lookupkey(1) for details.
+See git-annex\-lookupkey(1) for details.
.IP
.IP "\fBcontentlocation [key ..]\fP"
Looks up location of annexed content for a key.
.IP
-See git\-annex\-contentlocation(1) for details.
+See git-annex\-contentlocation(1) for details.
.IP
.IP "\fBexaminekey [key ...]\fP"
Print information that can be determined purely by looking at the key.
.IP
-See git\-annex\-examinekey(1) for details.
+See git-annex\-examinekey(1) for details.
.IP
.IP "\fBfromkey [key file]\fP"
Manually set up a file in the git repository to link to a specified key.
.IP
-See git\-annex\-fromkey(1) for details.
+See git-annex\-fromkey(1) for details.
.IP
.IP "\fBregisterurl [key url]\fP"
Registers an url for a key.
.IP
-See git\-annex\-registerurl(1) for details.
+See git-annex\-registerurl(1) for details.
.IP
.IP "\fBdropkey [key ...]\fP"
Drops annexed content for specified keys.
.IP
-See git\-annex\-dropkey(1) for details.
+See git-annex\-dropkey(1) for details.
.IP
.IP "\fBtransferkey key [\-\-from=remote|\-\-to=remote]\fP"
Transfers a key from or to a remote.
.IP
-See git\-annex\-transferkey(1) for details.
+See git-annex\-transferkey(1) for details.
.IP
.IP "\fBtransferkeys\fP"
Used internally by the assistant.
.IP
-See git\-annex\-transferkey(1) for details.
+See git-annex\-transferkey(1) for details.
.IP
.IP "\fBsetpresentkey key uuid [1|0]\fP"
-This plumbing\-level command changes git\-annex's records about whether
+This plumbing\-level command changes git-annex's records about whether
the specified key's content is present in a remote with the specified uuid.
.IP
-See git\-annex\-setpresentkey(1) for details.
+See git-annex\-setpresentkey(1) for details.
.IP
.IP "\fBreadpresentkey key uuid\fP"
Read records of where key is present.
.IP
-See git\-annex\-readpresentkey(1) for details.
+See git-annex\-readpresentkey(1) for details.
.IP
.IP "\fBcheckpresentkey key remote\fP"
Check if key is present in remote.
.IP
-See git\-annex\-checkpresentkey(1) for details.
+See git-annex\-checkpresentkey(1) for details.
.IP
.IP "\fBrekey [file key ...]\fP"
Change keys used for files.
.IP
-See git\-annex\-rekey(1) for details.
+See git-annex\-rekey(1) for details.
.IP
.IP "\fBfindref [ref]\fP"
Lists files in a git ref.
.IP
-See git\-annex\-findref(1) for details.
+See git-annex\-findref(1) for details.
.IP
.IP "\fBproxy \-\- git cmd [options]\fP"
Only useful in a direct mode repository, this runs the specified git
command with a temporary work tree, and updates the working tree to
reflect any changes staged or committed by the git command.
.IP
-See git\-annex\-proxy(1) for details.
+See git-annex\-proxy(1) for details.
.IP
.IP "\fBresolvemerge\fP"
Resolves a conflicted merge, by adding both conflicting versions of the
file to the tree, using variants of their filename. This is done
automatically when using \fBgit annex sync\fP or \fBgit annex merge\fP.
.IP
-See git\-annex\-resolvemerge(1) for details.
+See git-annex\-resolvemerge(1) for details.
.IP
.IP "\fBdiffdriver\fP"
This can be used to make \fBgit diff\fP use an external diff driver with
annexed files.
.IP
-See git\-annex\-diffdriver(1) for details.
+See git-annex\-diffdriver(1) for details.
.IP
.IP "\fBremotedaemon\fP"
Detects when network remotes have received git pushes and fetches from them.
.IP
-See git\-annex\-remotedaemon(1) for details.
+See git-annex\-remotedaemon(1) for details.
.IP
.IP "\fBxmppgit\fP"
This command is used internally by the assistant to perform git pulls
over XMPP.
.IP
-See git\-annex\-xmppgit(1) for details.
+See git-annex\-xmppgit(1) for details.
.IP
.SH TESTING COMMANDS
.IP "\fBtest\fP"
.IP
-This runs git\-annex's built\-in test suite.
+This runs git-annex's built\-in test suite.
.IP
-See git\-annex\-test(1) for details.
+See git-annex\-test(1) for details.
.IP
.IP "\fBtestremote remote\fP"
This tests a remote by generating some random objects and sending them to
@@ -548,18 +555,18 @@ the remote, then redownloading them, removing them from the remote, etc.
It's safe to run in an existing repository (the repository contents are
not altered), although it may perform expensive data transfers.
.IP
-See git\-annex\-testremote(1) for details.
+See git-annex\-testremote(1) for details.
.IP
.IP "\fBfuzztest\fP"
Generates random changes to files in the current repository,
for use in testing the assistant.
.IP
-See git\-annex\-fuzztest(1) for details.
+See git-annex\-fuzztest(1) for details.
.IP
.SH COMMON OPTIONS
-These common options are accepted by all git\-annex commands, and
+These common options are accepted by all git-annex commands, and
may not be explicitly listed on their individual man pages.
-(Many commands also accept the git\-annex\-matching\-options(1).)
+(Many commands also accept the git-annex\-matching\-options(1).)
.PP
.IP "\fB\-\-force\fP"
Force unsafe actions, such as dropping a file's content when no other
@@ -583,19 +590,19 @@ Show debug messages.
Disable debug messages.
.IP
.IP "\fB\-\-numcopies=n\fP"
-Overrides the numcopies setting, forcing git\-annex to ensure the
+Overrides the numcopies setting, forcing git-annex to ensure the
specified number of copies exist.
.IP
Note that setting numcopies to 0 is very unsafe.
.IP
.IP "\fB\-\-time\-limit=time\fP"
-Limits how long a git\-annex command runs. The time can be something
+Limits how long a git-annex command runs. The time can be something
like "5h", or "30m" or even "45s" or "10d".
.IP
-Note that git\-annex may continue running a little past the specified
+Note that git-annex may continue running a little past the specified
time limit, in order to finish processing a file.
.IP
-Also, note that if the time limit prevents git\-annex from doing all it
+Also, note that if the time limit prevents git-annex from doing all it
was asked to, it will exit with a special code, 101.
.IP
.IP "\fB\-\-trust=repository\fP"
@@ -608,7 +615,7 @@ or the UUID or description of a repository.
.IP
.IP "\fB\-\-trust\-glacier\-inventory\fP"
Amazon Glacier inventories take hours to retrieve, and may not represent
-the current state of a repository. So git\-annex does not trust that
+the current state of a repository. So git-annex does not trust that
files that the inventory claims are in Glacier are really there.
This switch can be used to allow it to trust the inventory.
.IP
@@ -640,7 +647,7 @@ or download has started, or when a file is dropped.
Overrides git configuration settings. May be specified multiple times.
.IP
.SH CONFIGURATION VIA .git/config
-Like other git commands, git\-annex is configured via \fB.git/config\fP.
+Like other git commands, git-annex is configured via \fB.git/config\fP.
Here are all the supported configuration settings.
.PP
.IP "\fBannex.uuid\fP"
@@ -682,7 +689,7 @@ never been configured.
Note that setting numcopies to 0 is very unsafe.
.IP
.IP "\fBannex.genmetadata\fP"
-Set this to \fBtrue\fP to make git\-annex automatically generate some metadata
+Set this to \fBtrue\fP to make git-annex automatically generate some metadata
when adding files to the repository.
.IP
In particular, it stores year and month metadata, from the file's
@@ -692,7 +699,7 @@ When importfeed is used, it stores additional metadata from the feed,
such as the author, title, etc.
.IP
.IP "\fBannex.queuesize\fP"
-git\-annex builds a queue of git commands, in order to combine similar
+git-annex builds a queue of git commands, in order to combine similar
commands for speed. By default the size of the queue is limited to
10240 commands; this can be used to change the size. If you have plenty
of memory and are working with very large numbers of files, increasing
@@ -703,7 +710,7 @@ The \fBgit annex unused\fP command uses a bloom filter to determine
what data is no longer used. The default bloom filter is sized to handle
up to 500000 keys. If your repository is larger than that,
you can adjust this to avoid \fBgit annex unused\fP not noticing some unused
-data files. Increasing this will make \fBgit\-annex unused\fP consume more memory;
+data files. Increasing this will make \fBgit-annex unused\fP consume more memory;
run \fBgit annex info\fP for memory usage numbers.
.IP
.IP "\fBannex.bloomaccuracy\fP"
@@ -714,12 +721,12 @@ the accuracy will make \fBgit annex unused\fP consume more memory;
run \fBgit annex info\fP for memory usage numbers.
.IP
.IP "\fBannex.sshcaching\fP"
-By default, git\-annex caches ssh connections using ssh's
+By default, git-annex caches ssh connections using ssh's
ControlMaster and ControlPersist settings
(if built using a new enough ssh). To disable this, set to \fBfalse\fP.
.IP
.IP "\fBannex.alwayscommit\fP"
-By default, git\-annex automatically commits data to the git\-annex branch
+By default, git-annex automatically commits data to the git-annex branch
after each command is run. If you have a series
of commands that you want to make a single commit, you can
run the commands with \fB\-c annex.alwayscommit=false\fP. You can later
@@ -734,7 +741,7 @@ Use with caution \-\- This can invalidate numcopies counting, since
with hard links, fewer copies of a file can exist. So, it is a good
idea to mark a repository using this setting as untrusted.
.IP
-When a repository is set up using \fBgit clone \-\-shared\fP, git\-annex init
+When a repository is set up using \fBgit clone \-\-shared\fP, git-annex init
will automatically set annex.hardlink and mark the repository as
untrusted.
.IP
@@ -767,20 +774,20 @@ and prompt if they should be upgraded to. When set to true, automatically
upgrades without prompting (on some supported platforms). When set to
false, disables any upgrade checking.
.IP
-Note that upgrade checking is only done when git\-annex is installed
+Note that upgrade checking is only done when git-annex is installed
from one of the prebuilt images from its website. This does not
bypass e.g., a Linux distribution's own upgrade handling code.
.IP
-This setting also controls whether to restart the git\-annex assistant
-when the git\-annex binary is detected to have changed. That is useful
-no matter how you installed git\-annex.
+This setting also controls whether to restart the git-annex assistant
+when the git-annex binary is detected to have changed. That is useful
+no matter how you installed git-annex.
.IP
.IP "\fBannex.autocommit\fP"
-Set to false to prevent the git\-annex assistant from automatically
+Set to false to prevent the git-annex assistant from automatically
committing changes to files in the repository.
.IP
.IP "\fBannex.startupscan\fP"
-Set to false to prevent the git\-annex assistant from scanning the
+Set to false to prevent the git-annex assistant from scanning the
repository for new and changed files on startup. This will prevent it
from noticing changes that were made while it was not running, but can be
a useful performance tweak for a large repository.
@@ -818,54 +825,54 @@ This allows varying the cost based on e.g., the current network. The
cost\-command can be any shell command line.
.IP
.IP "\fBremote.<name>.annex\-start\-command\fP"
-A command to run when git\-annex begins to use the remote. This can
+A command to run when git-annex begins to use the remote. This can
be used to, for example, mount the directory containing the remote.
.IP
-The command may be run repeatedly when multiple git\-annex processes
+The command may be run repeatedly when multiple git-annex processes
are running concurrently.
.IP
.IP "\fBremote.<name>.annex\-stop\-command\fP"
-A command to run when git\-annex is done using the remote.
+A command to run when git-annex is done using the remote.
.IP
-The command will only be run once *all* running git\-annex processes
+The command will only be run once *all* running git-annex processes
are finished using the remote.
.IP
.IP "\fBremote.<name>.annex\-shell\fP"
-Specify an alternative git\-annex\-shell executable on the remote
-instead of looking for "git\-annex\-shell" on the PATH.
+Specify an alternative git-annex\-shell executable on the remote
+instead of looking for "git-annex\-shell" on the PATH.
.IP
-This is useful if the git\-annex\-shell program is outside the PATH
+This is useful if the git-annex\-shell program is outside the PATH
or has a non\-standard name.
.IP
.IP "\fBremote.<name>.annex\-ignore\fP"
-If set to \fBtrue\fP, prevents git\-annex
+If set to \fBtrue\fP, prevents git-annex
from storing file contents on this remote by default.
(You can still request it be used by the \fB\-\-from\fP and \fB\-\-to\fP options.)
.IP
This is, for example, useful if the remote is located somewhere
-without git\-annex\-shell. (For example, if it's on GitHub).
+without git-annex\-shell. (For example, if it's on GitHub).
Or, it could be used if the network connection between two
repositories is too slow to be used normally.
.IP
-This does not prevent git\-annex sync (or the git\-annex assistant) from
+This does not prevent git-annex sync (or the git-annex assistant) from
syncing the git repository to the remote.
.IP
.IP "\fBremote.<name>.annex\-sync\fP"
-If set to \fBfalse\fP, prevents git\-annex sync (and the git\-annex assistant)
+If set to \fBfalse\fP, prevents git-annex sync (and the git-annex assistant)
from syncing with this remote.
.IP
.IP "\fBremote.<name>.annex\-readonly\fP"
-If set to \fBtrue\fP, prevents git\-annex from making changes to a remote.
-This both prevents git\-annex sync from pushing changes, and prevents
+If set to \fBtrue\fP, prevents git-annex from making changes to a remote.
+This both prevents git-annex sync from pushing changes, and prevents
storing or removing files from read\-only remote.
.IP
.IP "\fBremote.<name>.annexUrl\fP"
Can be used to specify a different url than the regular \fBremote.<name>.url\fP
-for git\-annex to use when talking with the remote. Similar to the \fBpushUrl\fP
+for git-annex to use when talking with the remote. Similar to the \fBpushUrl\fP
used by git\-push.
.IP
.IP "\fBremote.<name>.annex\-uuid\fP"
-git\-annex caches UUIDs of remote repositories here.
+git-annex caches UUIDs of remote repositories here.
.IP
.IP "\fBremote.<name>.annex\-trustlevel\fP"
Configures a local trust level for the remote. This overrides the value
@@ -873,12 +880,12 @@ configured by the trust and untrust commands. The value can be any of
"trusted", "semitrusted" or "untrusted".
.IP
.IP "\fBremote.<name>.annex\-availability\fP"
-Can be used to tell git\-annex whether a remote is LocallyAvailable
-or GloballyAvailable. Normally, git\-annex determines this automatically.
+Can be used to tell git-annex whether a remote is LocallyAvailable
+or GloballyAvailable. Normally, git-annex determines this automatically.
.IP
.IP "\fBremote.<name>.annex\-bare\fP"
-Can be used to tell git\-annex if a remote is a bare repository
-or not. Normally, git\-annex determines this automatically.
+Can be used to tell git-annex if a remote is a bare repository
+or not. Normally, git-annex determines this automatically.
.IP
.IP "\fBremote.<name>.annex\-ssh\-options\fP"
Options to use when using ssh to talk to this remote.
@@ -955,7 +962,7 @@ In the command line, %url is replaced with the url to download,
and %file is replaced with the file that it should be saved to.
.IP
.IP "\fBannex.secure\-erase\-command\fP"
-This can be set to a command that should be run whenever git\-annex
+This can be set to a command that should be run whenever git-annex
removes the content of a file from the repository.
.IP
In the command line, %file is replaced with the file that should be
@@ -1002,14 +1009,14 @@ Points to the configuration directory for tahoe.
.IP
.IP "\fBremote.<name>.annex\-xmppaddress\fP"
Used to identify the XMPP address of a Jabber buddy.
-Normally this is set up by the git\-annex assistant when pairing over XMPP.
+Normally this is set up by the git-annex assistant when pairing over XMPP.
.IP
.IP "\fBremote.<name>.gcrypt\fP"
Used to identify gcrypt special remotes.
Normally this is automatically set up by \fBgit annex initremote\fP.
.IP
It is set to "true" if this is a gcrypt remote.
-If the gcrypt remote is accessible over ssh and has git\-annex\-shell
+If the gcrypt remote is accessible over ssh and has git-annex\-shell
available to manage it, it's set to "shell".
.IP
.IP "\fBremote.<name>.hooktype\fP, \fBremote.<name>.externaltype\fP"
@@ -1019,7 +1026,7 @@ the type of the remote.
.IP "\fBannex.tune.objecthash1\fP, \fBannex.tune.objecthashlower\fP, \fBannex.tune.branchhash1\fP"
These can be passed to \fBgit annex init\fP to tune the repository.
They cannot be safely changed in a running repository.
-For details, see <http://git\-annex.branchable.com/tuning/>.
+For details, see <http://git-annex.branchable.com/tuning/>.
.IP
.SH CONFIGURATION VIA .gitattributes
The key\-value backend used when adding a new file to the annex can be
@@ -1042,9 +1049,9 @@ for flac files:
.PP
Note that setting numcopies to 0 is very unsafe.
.PP
-These settings are honored by git\-annex whenever it's operating on a
+These settings are honored by git-annex whenever it's operating on a
matching file. However, when using \-\-all, \-\-unused, or \-\-key to specify
-keys to operate on, git\-annex is operating on keys and not files, so will
+keys to operate on, git-annex is operating on keys and not files, so will
not honor the settings from .gitattributes.
.PP
Also note that when using views, only the toplevel .gitattributes file is
@@ -1052,37 +1059,37 @@ preserved in the view, so other settings in other files won't have any
effect.
.PP
.SH FILES
-These files are used by git\-annex:
+These files are used by git-annex:
.PP
\fB.git/annex/objects/\fP in your git repository contains the annexed file
contents that are currently available. Annexed files in your git
repository symlink to that content.
.PP
\fB.git/annex/\fP in your git repository contains other run\-time information
-used by git\-annex.
+used by git-annex.
.PP
-\fB~/.config/git\-annex/autostart\fP is a list of git repositories
-to start the git\-annex assistant in.
+\fB~/.config/git-annex/autostart\fP is a list of git repositories
+to start the git-annex assistant in.
.PP
\fB.git/hooks/pre\-commit\-annex\fP in your git repository will be run whenever
-a commit is made to the HEAD branch, either by git commit, git\-annex
-sync, or the git\-annex assistant.
+a commit is made to the HEAD branch, either by git commit, git-annex
+sync, or the git-annex assistant.
.PP
\fB.git/hooks/post\-update\-annex\fP in your git repository will be run
-whenever the git\-annex branch is updated. You can make this hook run
-\fBgit update\-server\-info\fP when publishing a git\-annex repository by http.
+whenever the git-annex branch is updated. You can make this hook run
+\fBgit update\-server\-info\fP when publishing a git-annex repository by http.
.PP
.SH SEE ALSO
-More git\-annex documentation is available on its web site,
-<http://git\-annex.branchable.com/>
+More git-annex documentation is available on its web site,
+<http://git-annex.branchable.com/>
.PP
-If git\-annex is installed from a package, a copy of its documentation
-should be included, in, for example, \fB/usr/share/doc/git\-annex/\fP.
+If git-annex is installed from a package, a copy of its documentation
+should be included, in, for example, \fB/usr/share/doc/git-annex/\fP.
.PP
.SH AUTHOR
Joey Hess <id@joeyh.name>
.PP
-<http://git\-annex.branchable.com/>
+<http://git-annex.branchable.com/>
.PP
.PP
diff --git a/standalone/android/cabal.config b/standalone/android/cabal.config
index 4eecbfe..f39dee9 100644
--- a/standalone/android/cabal.config
+++ b/standalone/android/cabal.config
@@ -6,7 +6,6 @@ constraints: Crypto ==4.2.5.1,
MissingH ==1.2.1.0,
MonadRandom ==0.1.13,
QuickCheck ==2.7.6,
- SHA ==1.6.1,
SafeSemaphore ==0.10.1,
aeson ==0.7.0.6,
ansi-terminal ==0.6.1.1,
@@ -82,9 +81,9 @@ constraints: Crypto ==4.2.5.1,
hinotify ==0.3.5,
hjsmin ==0.1.4.7,
hslogger ==1.2.1,
- http-client ==0.3.8.2,
+ http-client ==0.4.11.1,
http-client-tls ==0.2.2,
- http-conduit ==2.1.2.3,
+ http-conduit ==2.1.5,
http-date ==0.0.2,
http-types ==0.8.5,
hxt ==9.3.1.4,
diff --git a/standalone/linux/cabal.config b/standalone/linux/cabal.config
index 4eecbfe..f39dee9 100644
--- a/standalone/linux/cabal.config
+++ b/standalone/linux/cabal.config
@@ -6,7 +6,6 @@ constraints: Crypto ==4.2.5.1,
MissingH ==1.2.1.0,
MonadRandom ==0.1.13,
QuickCheck ==2.7.6,
- SHA ==1.6.1,
SafeSemaphore ==0.10.1,
aeson ==0.7.0.6,
ansi-terminal ==0.6.1.1,
@@ -82,9 +81,9 @@ constraints: Crypto ==4.2.5.1,
hinotify ==0.3.5,
hjsmin ==0.1.4.7,
hslogger ==1.2.1,
- http-client ==0.3.8.2,
+ http-client ==0.4.11.1,
http-client-tls ==0.2.2,
- http-conduit ==2.1.2.3,
+ http-conduit ==2.1.5,
http-date ==0.0.2,
http-types ==0.8.5,
hxt ==9.3.1.4,
diff --git a/standalone/linux/skel/runshell b/standalone/linux/skel/runshell
index f6db1da..6d84610 100755
--- a/standalone/linux/skel/runshell
+++ b/standalone/linux/skel/runshell
@@ -31,16 +31,18 @@ cd "$orig"
# assistant.
if [ ! -e "$HOME/.ssh/git-annex-shell" ]; then
mkdir "$HOME/.ssh" >/dev/null 2>&1 || true
- (
- echo "#!/bin/sh"
- echo "set -e"
- echo "if [ \"x\$SSH_ORIGINAL_COMMAND\" != \"x\" ]; then"
- echo "exec $base/runshell git-annex-shell -c \"\$SSH_ORIGINAL_COMMAND\""
- echo "else"
- echo "exec $base/runshell git-annex-shell -c \"\$@\""
- echo "fi"
- ) > "$HOME/.ssh/git-annex-shell"
- chmod +x "$HOME/.ssh/git-annex-shell"
+ if [ -e "$HOME/.ssh" ]; then
+ (
+ echo "#!/bin/sh"
+ echo "set -e"
+ echo "if [ \"x\$SSH_ORIGINAL_COMMAND\" != \"x\" ]; then"
+ echo "exec $base/runshell git-annex-shell -c \"\$SSH_ORIGINAL_COMMAND\""
+ echo "else"
+ echo "exec $base/runshell git-annex-shell -c \"\$@\""
+ echo "fi"
+ ) > "$HOME/.ssh/git-annex-shell"
+ chmod +x "$HOME/.ssh/git-annex-shell"
+ fi
fi
# And this shim is used by the webapp when adding a remote ssh server.
diff --git a/standalone/osx/git-annex.app/Contents/MacOS/runshell b/standalone/osx/git-annex.app/Contents/MacOS/runshell
index c5d689c..534e970 100755
--- a/standalone/osx/git-annex.app/Contents/MacOS/runshell
+++ b/standalone/osx/git-annex.app/Contents/MacOS/runshell
@@ -33,16 +33,18 @@ cd "$orig"
# assistant.
if [ ! -e "$HOME/.ssh/git-annex-shell" ]; then
mkdir "$HOME/.ssh" >/dev/null 2>&1 || true
- (
- echo "#!/bin/sh"
- echo "set -e"
- echo "if [ \"x\$SSH_ORIGINAL_COMMAND\" != \"x\" ]; then"
- echo "exec $base/runshell git-annex-shell -c \"\$SSH_ORIGINAL_COMMAND\""
- echo "else"
- echo "exec $base/runshell git-annex-shell -c \"\$@\""
- echo "fi"
- ) > "$HOME/.ssh/git-annex-shell"
- chmod +x "$HOME/.ssh/git-annex-shell"
+ if [ -e "$HOME/.ssh" ]; then
+ (
+ echo "#!/bin/sh"
+ echo "set -e"
+ echo "if [ \"x\$SSH_ORIGINAL_COMMAND\" != \"x\" ]; then"
+ echo "exec $base/runshell git-annex-shell -c \"\$SSH_ORIGINAL_COMMAND\""
+ echo "else"
+ echo "exec $base/runshell git-annex-shell -c \"\$@\""
+ echo "fi"
+ ) > "$HOME/.ssh/git-annex-shell"
+ chmod +x "$HOME/.ssh/git-annex-shell"
+ fi
fi
# And this shim is used by the webapp when adding a remote ssh server.
diff --git a/standalone/windows/build.sh b/standalone/windows/build.sh
index 09161c5..ef99000 100755
--- a/standalone/windows/build.sh
+++ b/standalone/windows/build.sh
@@ -9,7 +9,7 @@ set -e
# Path to the Haskell Platform.
#HP="/c/haskell/2014.2.0.0" # now in the default PATH
-PATH="/c/Program Files (x86)/NSIS:/c/msysgit/cmd:$PATH"
+PATH="/c/Program Files (x86)/NSIS:/c/msysgit/cmd:/c/msysgit/bin:$PATH"
# Run a command with the cygwin environment available.
# However, programs not from cygwin are preferred.
@@ -22,6 +22,12 @@ withcygpreferred () {
# This tells git-annex where to upgrade itself from.
UPGRADE_LOCATION=http://downloads.kitenet.net/git-annex/windows/current/git-annex-installer.exe
+export UPGRADE_LOCATION
+
+# This can be used to force git-annex to build supporting a particular
+# version of git, instead of the version installed at build time.
+#FORCE_GIT_VERSION=1.9.5
+#export FORCE_GIT_VERSION
# Uncomment to get rid of cabal installed libraries.
#rm -rf /c/Users/jenkins/AppData/Roaming/cabal /c/Users/jenkins/AppData/Roaming/ghc