packages feed

git-annex 4.20130601 → 4.20130627

raw patch · 368 files changed

+35251/−528 lines, 368 filesdep +yesod-coredep ~yesoddep ~yesod-defaultdep ~yesod-formbinary-added

Dependencies added: yesod-core

Dependency ranges changed: yesod, yesod-default, yesod-form, yesod-static

Files

.gitignore view
@@ -13,8 +13,6 @@ doc/.ikiwiki html *.tix-*.o-*.hi .hpc dist # Sandboxed builds@@ -26,3 +24,5 @@ .virthualenv tags Setup+*.hi+*.o
Annex/Content/Direct.hs view
@@ -7,6 +7,7 @@  module Annex.Content.Direct ( 	associatedFiles,+	associatedFilesRelative, 	removeAssociatedFile, 	removeAssociatedFileUnchecked, 	addAssociatedFile,@@ -232,6 +233,7 @@ writeInodeSentinalFile :: Annex () writeInodeSentinalFile = do 	sentinalfile <- fromRepo gitAnnexInodeSentinal+	createAnnexDirectory (parentDir sentinalfile) 	sentinalcachefile <- fromRepo gitAnnexInodeSentinalCache 	liftIO $ writeFile sentinalfile "" 	liftIO $ maybe noop (writeFile sentinalcachefile . showInodeCache)
Annex/Exception.hs view
@@ -13,24 +13,27 @@ module Annex.Exception ( 	bracketIO, 	tryAnnex,-	throw,+	throwAnnex, 	catchAnnex, ) where -import Prelude hiding (catch)-import "MonadCatchIO-transformers" Control.Monad.CatchIO (bracket, try, throw, catch)-import Control.Exception hiding (handle, try, throw, bracket, catch)+import qualified "MonadCatchIO-transformers" Control.Monad.CatchIO as M+import Control.Exception  import Common.Annex  {- Runs an Annex action, with setup and cleanup both in the IO monad. -} bracketIO :: IO v -> (v -> IO b) -> (v -> Annex a) -> Annex a-bracketIO setup cleanup go = bracket (liftIO setup) (liftIO . cleanup) go+bracketIO setup cleanup go = M.bracket (liftIO setup) (liftIO . cleanup) go  {- try in the Annex monad -} tryAnnex :: Annex a -> Annex (Either SomeException a)-tryAnnex = try+tryAnnex = M.try +{- throw in the Annex monad -}+throwAnnex :: Exception e => e -> Annex a+throwAnnex = M.throw+ {- catch in the Annex monad -} catchAnnex :: Exception e => Annex a -> (e -> Annex a) -> Annex a-catchAnnex = catch+catchAnnex = M.catch
Annex/Link.hs view
@@ -29,7 +29,7 @@ {- Gets the link target of a symlink.  -  - On a filesystem that does not support symlinks, fall back to getting the- - link target by looking inside the file. (Only return at first 8k of the+ - link target by looking inside the file. (Only return first 8k of the  - file, more than enough for any symlink target.)  -  - Returns Nothing if the file is not a symlink, or not a link to annex@@ -52,7 +52,8 @@ 	readfilestart f = do 		h <- openFile f ReadMode 		fileEncoding h-		take 8192 <$> hGetContents h+		s <- take 8192 <$> hGetContents h+		length s `seq` (hClose h >> return s)  {- Creates a link on disk.  -
Assistant/Drop.hs view
@@ -18,6 +18,7 @@ import Annex.Wanted import Annex.Exception import Config+import Annex.Content.Direct  import qualified Data.Set as S @@ -35,20 +36,30 @@ {- The UUIDs are ones where the content is believed to be present.  - The Remote list can include other remotes that do not have the content;  - only ones that match the UUIDs will be dropped from.- - If allows to drop fromhere, that drop will be tried first. -}+ - If allowed to drop fromhere, that drop will be tried first.+ -+ - In direct mode, all associated files are checked, and only if all+ - of them are unwanted are they dropped.+ -} handleDropsFrom :: [UUID] -> [Remote] -> Reason -> Bool -> Key -> AssociatedFile -> Maybe Remote -> Assistant () handleDropsFrom _ _ _ _ _ Nothing _ = noop-handleDropsFrom locs rs reason fromhere key (Just f) knownpresentremote-	| fromhere = do-		n <- getcopies-		if checkcopies n Nothing-			then go rs =<< dropl n-			else go rs n-	| otherwise = go rs =<< getcopies+handleDropsFrom locs rs reason fromhere key (Just afile) knownpresentremote = do+	fs <- liftAnnex $ ifM isDirect+		( do+			l <- associatedFilesRelative key+			if null l+				then return [afile]+				else return l+		, return [afile]+		)+	n <- getcopies fs+	if fromhere && checkcopies n Nothing+		then go fs rs =<< dropl fs n+		else go fs rs n   where-	getcopies = liftAnnex $ do+	getcopies fs = liftAnnex $ do 		(untrusted, have) <- trustPartition UnTrusted locs-		numcopies <- getNumCopies =<< numCopies f+		numcopies <- maximum <$> mapM (getNumCopies <=< numCopies) fs 		return (length have, numcopies, S.fromList untrusted)  	{- Check that we have enough copies still to drop the content.@@ -66,20 +77,20 @@ 		| S.member u untrusted = v 		| otherwise = decrcopies v Nothing -	go [] _ = noop-	go (r:rest) n-		| uuid r `S.notMember` slocs = go rest n+	go _ [] _ = noop+	go fs (r:rest) n+		| uuid r `S.notMember` slocs = go fs rest n 		| checkcopies n (Just $ Remote.uuid r) =-			dropr r n >>= go rest+			dropr fs r n >>= go fs rest 		| otherwise = noop -	checkdrop n@(have, numcopies, _untrusted) u a =-		ifM (liftAnnex $ wantDrop True u (Just f))+	checkdrop fs n@(have, numcopies, _untrusted) u a =+		ifM (liftAnnex $ allM (wantDrop True u . Just) fs) 			( ifM (liftAnnex $ safely $ doCommand $ a (Just numcopies)) 				( do 					debug 						[ "dropped"-						, f+						, afile 						, "(from " ++ maybe "here" show u ++ ")" 						, "(copies now " ++ show (have - 1) ++ ")" 						, ": " ++ reason@@ -90,11 +101,11 @@ 			, return n 			) -	dropl n = checkdrop n Nothing $ \numcopies ->-		Command.Drop.startLocal f numcopies key knownpresentremote+	dropl fs n = checkdrop fs n Nothing $ \numcopies ->+		Command.Drop.startLocal afile numcopies key knownpresentremote -	dropr r n  = checkdrop n (Just $ Remote.uuid r) $ \numcopies ->-		Command.Drop.startRemote f numcopies key r+	dropr fs r n  = checkdrop fs n (Just $ Remote.uuid r) $ \numcopies ->+		Command.Drop.startRemote afile numcopies key r  	safely a = either (const False) id <$> tryAnnex a 
Assistant/Install/AutoStart.o view

binary file changed (3364 → 3364 bytes)

Assistant/Install/Menu.o view

binary file changed (3216 → 3216 bytes)

Assistant/MakeRemote.hs view
@@ -49,6 +49,7 @@ 		h = sshHostName sshdata 		d 			| T.pack "/" `T.isPrefixOf` sshDirectory sshdata = sshDirectory sshdata+			| T.pack "~/" `T.isPrefixOf` sshDirectory sshdata = T.concat [T.pack "/", sshDirectory sshdata] 			| otherwise = T.concat [T.pack "/~/", sshDirectory sshdata] 	 {- Runs an action that returns a name of the remote, and finishes adding it. -}
Assistant/Ssh.hs view
@@ -16,6 +16,7 @@ import Data.Text (Text) import qualified Data.Text as T import Data.Char+import Network.URI  data SshData = SshData 	{ sshHostName :: Text@@ -64,7 +65,10 @@ {- Ensure that the ssh public key doesn't include any ssh options, like  - command=foo, or other weirdness -} validateSshPubKey :: SshPubKey -> IO ()-validateSshPubKey pubkey = either error return $ check $ words pubkey+validateSshPubKey pubkey+	| length (lines pubkey) == 1 =+		either error return $ check $ words pubkey+	| otherwise = error "too many lines in ssh public key"   where 	check [prefix, _key, comment] = do 		checkprefix prefix@@ -82,9 +86,10 @@ 	  where 		(ssh, keytype) = separate (== '-') prefix -	checkcomment comment-		| all (\c -> isAlphaNum c || c == '@' || c == '-' || c == '_' || c == '.') comment = ok-		| otherwise = err "bad comment in ssh public key"+	checkcomment comment = case filter (not . safeincomment) comment of+		[] -> ok+		badstuff -> err $ "bad comment in ssh public key (contains: \"" ++ badstuff ++ "\")"+	safeincomment c = isAlphaNum c || c == '@' || c == '-' || c == '_' || c == '.'  addAuthorizedKeys :: Bool -> FilePath -> SshPubKey -> IO Bool addAuthorizedKeys rsynconly dir pubkey = boolSystem "sh"@@ -212,10 +217,16 @@  {- This hostname is specific to a given repository on the ssh host,  - so it is based on the real hostname, the username, and the directory.+ -+ - The mangled hostname has the form "git-annex-realhostname-username_dir".+ - The only use of "-" is to separate the parts shown; this is necessary+ - to allow unMangleSshHostName to work. Any unusual characters in the+ - username or directory are url encoded, except using "." rather than "%"+ - (the latter has special meaning to ssh).  -} mangleSshHostName :: SshData -> String mangleSshHostName sshdata = "git-annex-" ++ T.unpack (sshHostName sshdata)-	++ "-" ++ filter safe extra+	++ "-" ++ escape extra   where 	extra = intercalate "_" $ map T.unpack $ catMaybes 		[ sshUserName sshdata@@ -225,6 +236,7 @@ 		| isAlphaNum c = True 		| c == '_' = True 		| otherwise = False+	escape s = replace "%" "." $ escapeURIString safe s  {- Extracts the real hostname from a mangled ssh hostname. -} unMangleSshHostName :: String -> String
Assistant/Threads/PairListener.hs view
@@ -37,6 +37,7 @@ 	go reqs cache sock = liftIO (getmsg sock []) >>= \msg -> case readish msg of 		Nothing -> go reqs cache sock 		Just m -> do+			debug ["received", show msg] 			sane <- checkSane msg 			(pip, verified) <- verificationCheck m 				=<< (pairingInProgress <$> getDaemonStatus)
Assistant/Threads/SanityChecker.hs view
@@ -19,6 +19,7 @@ import Utility.ThreadScheduler import qualified Assistant.Threads.Watcher as Watcher import Utility.LogFile+import Utility.Batch import Config  import Data.Time.Clock.POSIX@@ -42,7 +43,7 @@ 		modifyDaemonStatus_ $ \s -> s { sanityCheckRunning = True }  		now <- liftIO $ getPOSIXTime -- before check started-		r <- either showerr return =<< tryIO <~> dailyCheck+		r <- either showerr return =<< (tryIO . batch) <~> dailyCheck  		modifyDaemonStatus_ $ \s -> s 			{ sanityCheckRunning = False
Assistant/Threads/TransferScanner.hs view
@@ -24,6 +24,7 @@ import qualified Types.Remote as Remote import Utility.ThreadScheduler import Utility.NotificationBroadcaster+import Utility.Batch import qualified Git.LsFiles as LsFiles import qualified Backend import Annex.Content@@ -114,7 +115,7 @@  - since we need to look at the locations of all keys anyway.  -} expensiveScan :: UrlRenderer -> [Remote] -> Assistant ()-expensiveScan urlrenderer rs = unless onlyweb $ do+expensiveScan urlrenderer rs = unless onlyweb $ batch <~> do 	debug ["starting scan of", show visiblers]  	unwantedrs <- liftAnnex $ S.fromList
Assistant/Threads/WebApp.hs view
@@ -5,7 +5,8 @@  - Licensed under the GNU GPL version 3 or higher.  -} -{-# LANGUAGE TypeFamilies, QuasiQuotes, MultiParamTypeClasses, TemplateHaskell, OverloadedStrings, RankNTypes, CPP #-}+{-# LANGUAGE TemplateHaskell, MultiParamTypeClasses #-}+{-# LANGUAGE CPP #-} {-# OPTIONS_GHC -fno-warn-orphans #-}  module Assistant.Threads.WebApp where@@ -50,7 +51,7 @@ 	-> UrlRenderer 	-> Bool 	-> Maybe HostName-	-> Maybe (IO String)+	-> Maybe (IO Url) 	-> Maybe (Url -> FilePath -> IO ()) 	-> NamedThread webAppThread assistantdata urlrenderer noannex listenhost postfirstrun onstartup = thread $ liftIO $ do
Assistant/WebApp.hs view
@@ -15,19 +15,18 @@ import Utility.NotificationBroadcaster import Utility.Yesod -import Yesod import Data.Text (Text) import Control.Concurrent import qualified Network.Wai as W import qualified Data.ByteString.Char8 as S8 import qualified Data.Text as T -waitNotifier :: forall sub. (Assistant NotificationBroadcaster) -> NotificationId -> GHandler sub WebApp ()+waitNotifier :: Assistant NotificationBroadcaster -> NotificationId -> Handler () waitNotifier getbroadcaster nid = liftAssistant $ do 	b <- getbroadcaster 	liftIO $ waitNotification $ notificationHandleFromId b nid -newNotifier :: forall sub. (Assistant NotificationBroadcaster) -> GHandler sub WebApp NotificationId+newNotifier :: Assistant NotificationBroadcaster -> Handler NotificationId newNotifier getbroadcaster = liftAssistant $ do 	b <- getbroadcaster 	liftIO $ notificationHandleToId <$> newNotificationHandle True b@@ -36,7 +35,7 @@  - every form. -} webAppFormAuthToken :: Widget webAppFormAuthToken = do-	webapp <- lift getYesod+	webapp <- liftH getYesod 	[whamlet|<input type="hidden" name="auth" value="#{secretToken webapp}">|]  {- A button with an icon, and maybe label or tooltip, that can be
Assistant/WebApp/Common.hs view
@@ -12,7 +12,6 @@ import Assistant.WebApp.Page as X import Assistant.WebApp.Form as X import Assistant.WebApp.Types as X-import Utility.Yesod as X+import Utility.Yesod as X hiding (textField, passwordField, insertBy, replace, joinPath, deleteBy, delete, insert, Key, Option)  import Data.Text as X (Text)-import Yesod as X hiding (textField, passwordField, insertBy, replace, joinPath, deleteBy, delete, insert, Key, Option)
Assistant/WebApp/Configurators.hs view
@@ -5,7 +5,7 @@  - Licensed under the GNU AGPL version 3 or higher.  -} -{-# LANGUAGE TypeFamilies, QuasiQuotes, MultiParamTypeClasses, TemplateHaskell, OverloadedStrings, RankNTypes, CPP #-}+{-# LANGUAGE QuasiQuotes, TemplateHaskell, OverloadedStrings, CPP #-}  module Assistant.WebApp.Configurators where @@ -16,7 +16,7 @@ #endif  {- The main configuration screen. -}-getConfigurationR :: Handler RepHtml+getConfigurationR :: Handler Html getConfigurationR = ifM (inFirstRun) 	( redirect FirstRepositoryR 	, page "Configuration" (Just Configuration) $ do@@ -28,7 +28,7 @@ 		$(widgetFile "configurators/main") 	) -getAddRepositoryR :: Handler RepHtml+getAddRepositoryR :: Handler Html getAddRepositoryR = page "Add Repository" (Just Configuration) $ do 	let repolist = repoListDisplay mainRepoSelector 	$(widgetFile "configurators/addrepository")
Assistant/WebApp/Configurators/AWS.hs view
@@ -5,7 +5,7 @@  - Licensed under the GNU AGPL version 3 or higher.  -} -{-# LANGUAGE CPP, FlexibleContexts, TypeFamilies, QuasiQuotes, MultiParamTypeClasses, TemplateHaskell, OverloadedStrings, RankNTypes #-}+{-# LANGUAGE CPP, QuasiQuotes, TemplateHaskell, OverloadedStrings #-}  module Assistant.WebApp.Configurators.AWS where @@ -29,10 +29,10 @@ import qualified Data.Map as M import Data.Char -awsConfigurator :: Widget -> Handler RepHtml+awsConfigurator :: Widget -> Handler Html awsConfigurator = page "Add an Amazon repository" (Just Configuration) -glacierConfigurator :: Widget -> Handler RepHtml+glacierConfigurator :: Widget -> Handler Html glacierConfigurator a = do 	ifM (liftIO $ inPath "glacier") 		( awsConfigurator a@@ -63,7 +63,7 @@ extractCreds :: AWSInput -> AWSCreds extractCreds i = AWSCreds (accessKeyID i) (secretAccessKey i) -s3InputAForm :: Maybe CredPair -> AForm WebApp WebApp AWSInput+s3InputAForm :: Maybe CredPair -> MkAForm AWSInput s3InputAForm defcreds = AWSInput 	<$> accessKeyIDFieldWithHelp (T.pack . fst <$> defcreds) 	<*> secretAccessKeyField (T.pack . snd <$> defcreds)@@ -78,7 +78,7 @@ 		, ("Reduced redundancy (costs less)", ReducedRedundancy) 		] -glacierInputAForm :: Maybe CredPair -> AForm WebApp WebApp AWSInput+glacierInputAForm :: Maybe CredPair -> MkAForm AWSInput glacierInputAForm defcreds = AWSInput 	<$> accessKeyIDFieldWithHelp (T.pack . fst <$> defcreds) 	<*> secretAccessKeyField (T.pack . snd <$> defcreds)@@ -87,15 +87,15 @@ 	<*> areq textField "Repository name" (Just "glacier") 	<*> enableEncryptionField -awsCredsAForm :: Maybe CredPair -> AForm WebApp WebApp AWSCreds+awsCredsAForm :: Maybe CredPair -> MkAForm AWSCreds awsCredsAForm defcreds = AWSCreds 	<$> accessKeyIDFieldWithHelp (T.pack . fst <$> defcreds) 	<*> secretAccessKeyField (T.pack . snd <$> defcreds) -accessKeyIDField :: Widget -> Maybe Text -> AForm WebApp WebApp Text+accessKeyIDField :: Widget -> Maybe Text -> MkAForm Text accessKeyIDField help def = areq (textField `withNote` help) "Access Key ID" def -accessKeyIDFieldWithHelp :: Maybe Text -> AForm WebApp WebApp Text+accessKeyIDFieldWithHelp :: Maybe Text -> MkAForm Text accessKeyIDFieldWithHelp def = accessKeyIDField help def   where 	help = [whamlet|@@ -103,26 +103,26 @@   Get Amazon access keys |] -secretAccessKeyField :: Maybe Text -> AForm WebApp WebApp Text+secretAccessKeyField :: Maybe Text -> MkAForm Text secretAccessKeyField def = areq passwordField "Secret Access Key" def -datacenterField :: AWS.Service -> AForm WebApp WebApp Text+datacenterField :: AWS.Service -> MkAForm Text datacenterField service = areq (selectFieldList list) "Datacenter" defregion   where 	list = M.toList $ AWS.regionMap service 	defregion = Just $ AWS.defaultRegion service -getAddS3R :: Handler RepHtml+getAddS3R :: Handler Html getAddS3R = postAddS3R -postAddS3R :: Handler RepHtml+postAddS3R :: Handler Html #ifdef WITH_S3 postAddS3R = awsConfigurator $ do 	defcreds <- liftAnnex previouslyUsedAWSCreds-	((result, form), enctype) <- lift $+	((result, form), enctype) <- liftH $ 		runFormPost $ renderBootstrap $ s3InputAForm defcreds 	case result of-		FormSuccess input -> lift $ do+		FormSuccess input -> liftH $ do 			let name = T.unpack $ repoName input 			makeAWSRemote S3.remote (extractCreds input) name setgroup $ M.fromList 				[ configureEncryption $ enableEncryption input@@ -138,17 +138,17 @@ postAddS3R = error "S3 not supported by this build" #endif -getAddGlacierR :: Handler RepHtml+getAddGlacierR :: Handler Html getAddGlacierR = postAddGlacierR -postAddGlacierR :: Handler RepHtml+postAddGlacierR :: Handler Html #ifdef WITH_S3 postAddGlacierR = glacierConfigurator $ do 	defcreds <- liftAnnex previouslyUsedAWSCreds-	((result, form), enctype) <- lift $+	((result, form), enctype) <- liftH $ 		runFormPost $ renderBootstrap $ glacierInputAForm defcreds 	case result of-		FormSuccess input -> lift $ do+		FormSuccess input -> liftH $ do 			let name = T.unpack $ repoName input 			makeAWSRemote Glacier.remote (extractCreds input) name setgroup $ M.fromList 				[ configureEncryption $ enableEncryption input@@ -163,7 +163,7 @@ postAddGlacierR = error "S3 not supported by this build" #endif -getEnableS3R :: UUID -> Handler RepHtml+getEnableS3R :: UUID -> Handler Html #ifdef WITH_S3 getEnableS3R uuid = do 	m <- liftAnnex readRemoteLog@@ -174,27 +174,27 @@ getEnableS3R = postEnableS3R #endif -postEnableS3R :: UUID -> Handler RepHtml+postEnableS3R :: UUID -> Handler Html #ifdef WITH_S3 postEnableS3R uuid = awsConfigurator $ enableAWSRemote S3.remote uuid #else postEnableS3R _ = error "S3 not supported by this build" #endif -getEnableGlacierR :: UUID -> Handler RepHtml+getEnableGlacierR :: UUID -> Handler Html getEnableGlacierR = postEnableGlacierR -postEnableGlacierR :: UUID -> Handler RepHtml+postEnableGlacierR :: UUID -> Handler Html postEnableGlacierR = glacierConfigurator . enableAWSRemote Glacier.remote  enableAWSRemote :: RemoteType -> UUID -> Widget #ifdef WITH_S3 enableAWSRemote remotetype uuid = do 	defcreds <- liftAnnex previouslyUsedAWSCreds-	((result, form), enctype) <- lift $+	((result, form), enctype) <- liftH $ 		runFormPost $ renderBootstrap $ awsCredsAForm defcreds 	case result of-		FormSuccess creds -> lift $ do+		FormSuccess creds -> liftH $ do 			m <- liftAnnex readRemoteLog 			let name = fromJust $ M.lookup "name" $ 				fromJust $ M.lookup uuid m
Assistant/WebApp/Configurators/Delete.hs view
@@ -5,7 +5,7 @@  - Licensed under the GNU AGPL version 3 or higher.  -} -{-# LANGUAGE TypeFamilies, QuasiQuotes, MultiParamTypeClasses, TemplateHaskell, OverloadedStrings, RankNTypes #-}+{-# LANGUAGE QuasiQuotes, TemplateHaskell, OverloadedStrings #-}  module Assistant.WebApp.Configurators.Delete where @@ -28,24 +28,24 @@ import qualified Data.Map as M import System.Path -notCurrentRepo :: UUID -> Handler RepHtml -> Handler RepHtml+notCurrentRepo :: UUID -> Handler Html -> Handler Html notCurrentRepo uuid a = go =<< liftAnnex (Remote.remoteFromUUID uuid)   where   	go Nothing = redirect DeleteCurrentRepositoryR 	go (Just _) = a -getDisableRepositoryR :: UUID -> Handler RepHtml+getDisableRepositoryR :: UUID -> Handler Html getDisableRepositoryR uuid = notCurrentRepo uuid $ do 	void $ liftAssistant $ disableRemote uuid 	redirect DashboardR -getDeleteRepositoryR :: UUID -> Handler RepHtml+getDeleteRepositoryR :: UUID -> Handler Html getDeleteRepositoryR uuid = notCurrentRepo uuid $ 	deletionPage $ do 		reponame <- liftAnnex $ Remote.prettyUUID uuid 		$(widgetFile "configurators/delete/start") -getStartDeleteRepositoryR :: UUID -> Handler RepHtml+getStartDeleteRepositoryR :: UUID -> Handler Html getStartDeleteRepositoryR uuid = do 	remote <- fromMaybe (error "unknown remote") 		<$> liftAnnex (Remote.remoteFromUUID uuid)@@ -55,7 +55,7 @@ 	liftAssistant $ addScanRemotes True [remote] 	redirect DashboardR -getFinishDeleteRepositoryR :: UUID -> Handler RepHtml+getFinishDeleteRepositoryR :: UUID -> Handler Html getFinishDeleteRepositoryR uuid = deletionPage $ do 	void $ liftAssistant $ removeRemote uuid @@ -64,22 +64,22 @@ 	gitrepo <- liftAnnex $ M.notMember uuid <$> readRemoteLog 	$(widgetFile "configurators/delete/finished")	 -getDeleteCurrentRepositoryR :: Handler RepHtml+getDeleteCurrentRepositoryR :: Handler Html getDeleteCurrentRepositoryR = deleteCurrentRepository -postDeleteCurrentRepositoryR :: Handler RepHtml+postDeleteCurrentRepositoryR :: Handler Html postDeleteCurrentRepositoryR = deleteCurrentRepository -deleteCurrentRepository :: Handler RepHtml+deleteCurrentRepository :: Handler Html deleteCurrentRepository = dangerPage $ do-	reldir <- fromJust . relDir <$> lift getYesod+	reldir <- fromJust . relDir <$> liftH getYesod 	havegitremotes <- haveremotes syncGitRemotes 	havedataremotes <- haveremotes syncDataRemotes-	((result, form), enctype) <- lift $+	((result, form), enctype) <- liftH $ 		runFormPost $ renderBootstrap $ sanityVerifierAForm $ 			SanityVerifier magicphrase 	case result of-		FormSuccess _ -> lift $ do+		FormSuccess _ -> liftH $ do 			dir <- liftAnnex $ fromRepo Git.repoPath 			liftIO $ removeAutoStartFile dir @@ -107,7 +107,7 @@ data SanityVerifier = SanityVerifier T.Text 	deriving (Eq) -sanityVerifierAForm :: SanityVerifier -> AForm WebApp WebApp SanityVerifier+sanityVerifierAForm :: SanityVerifier -> MkAForm SanityVerifier sanityVerifierAForm template = SanityVerifier 	<$> areq checksanity "Confirm deletion?" Nothing   where@@ -116,10 +116,10 @@ 	 	insane = "Maybe this is not a good idea..." :: Text -deletionPage :: Widget -> Handler RepHtml+deletionPage :: Widget -> Handler Html deletionPage = page "Delete repository" (Just Configuration) -dangerPage :: Widget -> Handler RepHtml+dangerPage :: Widget -> Handler Html dangerPage = page "Danger danger danger" (Just Configuration)  magicphrase :: Text
Assistant/WebApp/Configurators/Edit.hs view
@@ -5,7 +5,7 @@  - Licensed under the GNU AGPL version 3 or higher.  -} -{-# LANGUAGE CPP, TypeFamilies, QuasiQuotes, MultiParamTypeClasses, TemplateHaskell, OverloadedStrings, RankNTypes #-}+{-# LANGUAGE CPP, QuasiQuotes, TemplateHaskell, OverloadedStrings #-}  module Assistant.WebApp.Configurators.Edit where @@ -132,9 +132,10 @@  	legalName = makeLegalName . T.unpack . repoName -editRepositoryAForm :: RepoConfig -> AForm WebApp WebApp RepoConfig-editRepositoryAForm def = RepoConfig-	<$> areq textField "Name" (Just $ repoName def)+editRepositoryAForm :: Bool -> RepoConfig -> MkAForm RepoConfig+editRepositoryAForm ishere def = RepoConfig+	<$> areq (if ishere then readonlyTextField else textField)+		"Name" (Just $ repoName def) 	<*> aopt textField "Description" (Just $ repoDescription def) 	<*> areq (selectFieldList groups `withNote` help) "Repository group" (Just $ repoGroup def) 	<*> associateddirectory@@ -154,33 +155,33 @@ 		Nothing -> aopt hiddenField "" Nothing 		Just d -> aopt textField "Associated directory" (Just $ Just d) -getEditRepositoryR :: UUID -> Handler RepHtml+getEditRepositoryR :: UUID -> Handler Html getEditRepositoryR = postEditRepositoryR -postEditRepositoryR :: UUID -> Handler RepHtml+postEditRepositoryR :: UUID -> Handler Html postEditRepositoryR = editForm False -getEditNewRepositoryR :: UUID -> Handler RepHtml+getEditNewRepositoryR :: UUID -> Handler Html getEditNewRepositoryR = postEditNewRepositoryR -postEditNewRepositoryR :: UUID -> Handler RepHtml+postEditNewRepositoryR :: UUID -> Handler Html postEditNewRepositoryR = editForm True -getEditNewCloudRepositoryR :: UUID -> Handler RepHtml+getEditNewCloudRepositoryR :: UUID -> Handler Html getEditNewCloudRepositoryR = postEditNewCloudRepositoryR -postEditNewCloudRepositoryR :: UUID -> Handler RepHtml+postEditNewCloudRepositoryR :: UUID -> Handler Html postEditNewCloudRepositoryR uuid = xmppNeeded >> editForm True uuid -editForm :: Bool -> UUID -> Handler RepHtml-editForm new uuid = page "Configure repository" (Just Configuration) $ do+editForm :: Bool -> UUID -> Handler Html+editForm new uuid = page "Edit repository" (Just Configuration) $ do 	mremote <- liftAnnex $ Remote.remoteFromUUID uuid 	curr <- liftAnnex $ getRepoConfig uuid mremote 	liftAnnex $ checkAssociatedDirectory curr mremote-	((result, form), enctype) <- lift $-		runFormPost $ renderBootstrap $ editRepositoryAForm curr+	((result, form), enctype) <- liftH $+		runFormPost $ renderBootstrap $ editRepositoryAForm (isNothing mremote) curr 	case result of-		FormSuccess input -> lift $ do+		FormSuccess input -> liftH $ do 			setRepoConfig uuid mremote curr input 			liftAnnex $ checkAssociatedDirectory input mremote 			redirect DashboardR
Assistant/WebApp/Configurators/IA.hs view
@@ -5,7 +5,7 @@  - Licensed under the GNU AGPL version 3 or higher.  -} -{-# LANGUAGE CPP, FlexibleContexts, TypeFamilies, QuasiQuotes, MultiParamTypeClasses, TemplateHaskell, OverloadedStrings, RankNTypes #-}+{-# LANGUAGE CPP, QuasiQuotes, TemplateHaskell, OverloadedStrings #-}  module Assistant.WebApp.Configurators.IA where @@ -30,7 +30,7 @@ import Data.Char import Network.URI -iaConfigurator :: Widget -> Handler RepHtml+iaConfigurator :: Widget -> Handler Html iaConfigurator = page "Add an Internet Archive repository" (Just Configuration)  data IAInput = IAInput@@ -79,7 +79,7 @@ showMediaType MediaAudio = "audio & music" showMediaType MediaOmitted = "other" -iaInputAForm :: Maybe CredPair -> AForm WebApp WebApp IAInput+iaInputAForm :: Maybe CredPair -> MkAForm IAInput iaInputAForm defcreds = IAInput 	<$> accessKeyIDFieldWithHelp (T.pack . fst <$> defcreds) 	<*> AWS.secretAccessKeyField (T.pack . snd <$> defcreds)@@ -99,7 +99,7 @@   will be uploaded to your Internet Archive item. |] -iaCredsAForm :: Maybe CredPair -> AForm WebApp WebApp AWS.AWSCreds+iaCredsAForm :: Maybe CredPair -> MkAForm AWS.AWSCreds iaCredsAForm defcreds = AWS.AWSCreds         <$> accessKeyIDFieldWithHelp (T.pack . fst <$> defcreds)         <*> AWS.secretAccessKeyField (T.pack . snd <$> defcreds)@@ -110,7 +110,7 @@ 	AWS.isIARemoteConfig . Remote.config #endif -accessKeyIDFieldWithHelp :: Maybe Text -> AForm WebApp WebApp Text+accessKeyIDFieldWithHelp :: Maybe Text -> MkAForm Text accessKeyIDFieldWithHelp def = AWS.accessKeyIDField help def   where 	help = [whamlet|@@ -118,17 +118,17 @@   Get Internet Archive access keys |] -getAddIAR :: Handler RepHtml+getAddIAR :: Handler Html getAddIAR = postAddIAR -postAddIAR :: Handler RepHtml+postAddIAR :: Handler Html #ifdef WITH_S3 postAddIAR = iaConfigurator $ do 	defcreds <- liftAnnex previouslyUsedIACreds-	((result, form), enctype) <- lift $+	((result, form), enctype) <- liftH $ 		runFormPost $ renderBootstrap $ iaInputAForm defcreds 	case result of-		FormSuccess input -> lift $ do+		FormSuccess input -> liftH $ do 			let name = escapeBucket $ T.unpack $ itemName input 			AWS.makeAWSRemote S3.remote (extractCreds input) name setgroup $ 				M.fromList $ catMaybes@@ -153,10 +153,10 @@ postAddIAR = error "S3 not supported by this build" #endif -getEnableIAR :: UUID -> Handler RepHtml+getEnableIAR :: UUID -> Handler Html getEnableIAR = postEnableIAR -postEnableIAR :: UUID -> Handler RepHtml+postEnableIAR :: UUID -> Handler Html #ifdef WITH_S3 postEnableIAR = iaConfigurator . enableIARemote #else@@ -167,10 +167,10 @@ enableIARemote :: UUID -> Widget enableIARemote uuid = do 	defcreds <- liftAnnex previouslyUsedIACreds-	((result, form), enctype) <- lift $+	((result, form), enctype) <- liftH $ 		runFormPost $ renderBootstrap $ iaCredsAForm defcreds 	case result of-		FormSuccess creds -> lift $ do+		FormSuccess creds -> liftH $ do 			m <- liftAnnex readRemoteLog 			let name = fromJust $ M.lookup "name" $ 				fromJust $ M.lookup uuid m
Assistant/WebApp/Configurators/Local.hs view
@@ -5,7 +5,7 @@  - Licensed under the GNU AGPL version 3 or higher.  -} -{-# LANGUAGE CPP, TypeFamilies, QuasiQuotes, MultiParamTypeClasses, TemplateHaskell, OverloadedStrings, RankNTypes #-}+{-# LANGUAGE CPP, QuasiQuotes, TemplateHaskell, OverloadedStrings, RankNTypes, KindSignatures, TypeFamilies #-}  module Assistant.WebApp.Configurators.Local where @@ -38,6 +38,7 @@ import qualified Data.Text as T import qualified Data.Map as M import Data.Char+import qualified Text.Hamlet as Hamlet  data RepositoryPath = RepositoryPath Text 	deriving Show@@ -46,7 +47,11 @@  -  - Validates that the path entered is not empty, and is a safe value  - to use as a repository. -}+#if MIN_VERSION_yesod(1,2,0)+repositoryPathField :: forall (m :: * -> *). (MonadIO m, HandlerSite m ~ WebApp) => Bool -> Field m Text+#else repositoryPathField :: forall sub. Bool -> Field sub WebApp Text+#endif repositoryPathField autofocus = Field #if ! MIN_VERSION_yesod_form(1,2,0) 	{ fieldParse = parse@@ -119,7 +124,7 @@ 			) 	legit d = not <$> doesFileExist (d </> "git-annex") -newRepositoryForm :: FilePath -> Form RepositoryPath+newRepositoryForm :: FilePath -> Hamlet.Html -> MkMForm RepositoryPath newRepositoryForm defpath msg = do 	(pathRes, pathView) <- mreq (repositoryPathField True) "" 		(Just $ T.pack $ addTrailingPathSeparator defpath)@@ -133,40 +138,47 @@ 	return (RepositoryPath <$> pathRes, form)  {- Making the first repository, when starting the webapp for the first time. -}-getFirstRepositoryR :: Handler RepHtml+getFirstRepositoryR :: Handler Html getFirstRepositoryR = postFirstRepositoryR-postFirstRepositoryR :: Handler RepHtml+postFirstRepositoryR :: Handler Html postFirstRepositoryR = page "Getting started" (Just Configuration) $ do #ifdef __ANDROID__ 	androidspecial <- liftIO $ doesDirectoryExist "/sdcard/DCIM" 	let path = "/sdcard/annex" #else 	let androidspecial = False-	path <- liftIO . defaultRepositoryPath =<< lift inFirstRun+	path <- liftIO . defaultRepositoryPath =<< liftH inFirstRun #endif-	((res, form), enctype) <- lift $ runFormPost $ newRepositoryForm path+	((res, form), enctype) <- liftH $ runFormPost $ newRepositoryForm path 	case res of-		FormSuccess (RepositoryPath p) -> lift $-			startFullAssistant (T.unpack p) ClientGroup+		FormSuccess (RepositoryPath p) -> liftH $+			startFullAssistant (T.unpack p) ClientGroup Nothing 		_ -> $(widgetFile "configurators/newrepository/first")  getAndroidCameraRepositoryR :: Handler ()-getAndroidCameraRepositoryR = startFullAssistant "/sdcard/DCIM" SourceGroup+getAndroidCameraRepositoryR = +	startFullAssistant "/sdcard/DCIM" SourceGroup $ Just addignore	+  where+  	addignore = do+		liftIO $ unlessM (doesFileExist ".gitignore") $+			writeFile ".gitignore" ".thumbnails/*"+		void $ inRepo $+			Git.Command.runBool [Param "add", File ".gitignore"]  {- Adding a new local repository, which may be entirely separate, or may  - be connected to the current repository. -}-getNewRepositoryR :: Handler RepHtml+getNewRepositoryR :: Handler Html getNewRepositoryR = postNewRepositoryR-postNewRepositoryR :: Handler RepHtml+postNewRepositoryR :: Handler Html postNewRepositoryR = page "Add another repository" (Just Configuration) $ do 	home <- liftIO myHomeDir-	((res, form), enctype) <- lift $ runFormPost $ newRepositoryForm home+	((res, form), enctype) <- liftH $ runFormPost $ newRepositoryForm home 	case res of 		FormSuccess (RepositoryPath p) -> do 			let path = T.unpack p 			isnew <- liftIO $ makeRepo path False 			u <- liftIO $ initRepo isnew True path Nothing-			lift $ liftAnnexOr () $ setStandardGroup u ClientGroup+			liftH $ liftAnnexOr () $ setStandardGroup u ClientGroup 			liftIO $ addAutoStartFile path 			liftIO $ startAssistant path 			askcombine u path@@ -174,10 +186,10 @@   where 	askcombine newrepouuid newrepopath = do 		newrepo <- liftIO $ relHome newrepopath-		mainrepo <- fromJust . relDir <$> lift getYesod+		mainrepo <- fromJust . relDir <$> liftH getYesod 		$(widgetFile "configurators/newrepository/combine") -getCombineRepositoryR :: FilePathAndUUID -> Handler RepHtml+getCombineRepositoryR :: FilePathAndUUID -> Handler Html getCombineRepositoryR (FilePathAndUUID newrepopath newrepouuid) = do 	r <- combineRepos newrepopath remotename 	liftAssistant $ syncRemote r@@ -185,7 +197,7 @@   where 	remotename = takeFileName newrepopath -selectDriveForm :: [RemovableDrive] -> Form RemovableDrive+selectDriveForm :: [RemovableDrive] -> Hamlet.Html -> MkMForm RemovableDrive selectDriveForm drives = renderBootstrap $ RemovableDrive 	<$> pure Nothing 	<*> areq (selectFieldList pairs) "Select drive:" Nothing@@ -208,24 +220,24 @@ 	T.unpack (mountPoint drive) </> T.unpack (driveRepoPath drive)  {- Adding a removable drive. -}-getAddDriveR :: Handler RepHtml+getAddDriveR :: Handler Html getAddDriveR = postAddDriveR-postAddDriveR :: Handler RepHtml+postAddDriveR :: Handler Html postAddDriveR = page "Add a removable drive" (Just Configuration) $ do 	removabledrives <- liftIO $ driveList 	writabledrives <- liftIO $ 		filterM (canWrite . T.unpack . mountPoint) removabledrives-	((res, form), enctype) <- lift $ runFormPost $+	((res, form), enctype) <- liftH $ runFormPost $ 		selectDriveForm (sort writabledrives) 	case res of-		FormSuccess drive -> lift $ redirect $ ConfirmAddDriveR drive+		FormSuccess drive -> liftH $ redirect $ ConfirmAddDriveR drive 		_ -> $(widgetFile "configurators/adddrive")  {- The repo may already exist, when adding removable media  - that has already been used elsewhere. If so, check  - the UUID of the repo and see if it's one we know. If not,  - the user must confirm the repository merge. -}-getConfirmAddDriveR :: RemovableDrive -> Handler RepHtml+getConfirmAddDriveR :: RemovableDrive -> Handler Html getConfirmAddDriveR drive = do 	ifM (needconfirm) 		( page "Combine repositories?" (Just Configuration) $@@ -249,7 +261,7 @@ cloneModal :: Widget cloneModal = $(widgetFile "configurators/adddrive/clonemodal") -getFinishAddDriveR :: RemovableDrive -> Handler RepHtml+getFinishAddDriveR :: RemovableDrive -> Handler Html getFinishAddDriveR drive = make >>= redirect . EditNewRepositoryR   where   	make = do@@ -273,7 +285,7 @@ 	liftIO $ inDir dir $ void $ makeGitRemote hostname hostlocation 	addRemote $ makeGitRemote name dir -getEnableDirectoryR :: UUID -> Handler RepHtml+getEnableDirectoryR :: UUID -> Handler Html getEnableDirectoryR uuid = page "Enable a repository" (Just Configuration) $ do 	description <- liftAnnex $ T.pack <$> prettyUUID uuid 	$(widgetFile "configurators/enabledirectory")@@ -311,13 +323,15 @@ {- Bootstraps from first run mode to a fully running assistant in a  - repository, by running the postFirstRun callback, which returns the  - url to the new webapp. -}-startFullAssistant :: FilePath -> StandardGroup -> Handler ()-startFullAssistant path repogroup = do+startFullAssistant :: FilePath -> StandardGroup -> Maybe (Annex ())-> Handler ()+startFullAssistant path repogroup setup = do 	webapp <- getYesod 	url <- liftIO $ do 		isnew <- makeRepo path False 		u <- initRepo isnew True path Nothing-		inDir path $ setStandardGroup u repogroup+		inDir path $ do+			setStandardGroup u repogroup+			maybe noop id setup 		addAutoStartFile path 		setCurrentDirectory path 		fromJust $ postFirstRun webapp
Assistant/WebApp/Configurators/Pairing.hs view
@@ -5,7 +5,7 @@  - Licensed under the GNU AGPL version 3 or higher.  -} -{-# LANGUAGE TypeFamilies, QuasiQuotes, MultiParamTypeClasses, TemplateHaskell, OverloadedStrings, RankNTypes #-}+{-# LANGUAGE TypeFamilies, QuasiQuotes, TemplateHaskell, OverloadedStrings #-} {-# LANGUAGE CPP #-}  module Assistant.WebApp.Configurators.Pairing where@@ -49,7 +49,7 @@ import qualified Data.Set as S #endif -getStartXMPPPairFriendR :: Handler RepHtml+getStartXMPPPairFriendR :: Handler Html #ifdef WITH_XMPP getStartXMPPPairFriendR = ifM (isJust <$> liftAnnex getXMPPCreds) 	( do@@ -65,11 +65,11 @@ #else getStartXMPPPairFriendR = noXMPPPairing -noXMPPPairing :: Handler RepHtml+noXMPPPairing :: Handler Html noXMPPPairing = noPairing "XMPP" #endif -getStartXMPPPairSelfR :: Handler RepHtml+getStartXMPPPairSelfR :: Handler Html #ifdef WITH_XMPP getStartXMPPPairSelfR = go =<< liftAnnex getXMPPCreds   where@@ -87,14 +87,14 @@ getStartXMPPPairSelfR = noXMPPPairing #endif -getRunningXMPPPairFriendR :: BuddyKey -> Handler RepHtml+getRunningXMPPPairFriendR :: BuddyKey -> Handler Html getRunningXMPPPairFriendR = sendXMPPPairRequest . Just -getRunningXMPPPairSelfR :: Handler RepHtml+getRunningXMPPPairSelfR :: Handler Html getRunningXMPPPairSelfR = sendXMPPPairRequest Nothing  {- Sends a XMPP pair request, to a buddy or to self. -}-sendXMPPPairRequest :: Maybe BuddyKey -> Handler RepHtml+sendXMPPPairRequest :: Maybe BuddyKey -> Handler Html #ifdef WITH_XMPP sendXMPPPairRequest mbid = do 	bid <- maybe getself return mbid@@ -125,28 +125,28 @@ #endif  {- Starts local pairing. -}-getStartLocalPairR :: Handler RepHtml+getStartLocalPairR :: Handler Html getStartLocalPairR = postStartLocalPairR-postStartLocalPairR :: Handler RepHtml+postStartLocalPairR :: Handler Html #ifdef WITH_PAIRING postStartLocalPairR = promptSecret Nothing $ 	startLocalPairing PairReq noop pairingAlert Nothing #else postStartLocalPairR = noLocalPairing -noLocalPairing :: Handler RepHtml+noLocalPairing :: Handler Html noLocalPairing = noPairing "local" #endif  {- Runs on the system that responds to a local pair request; sets up the ssh  - authorized key first so that the originating host can immediately sync  - with us. -}-getFinishLocalPairR :: PairMsg -> Handler RepHtml+getFinishLocalPairR :: PairMsg -> Handler Html getFinishLocalPairR = postFinishLocalPairR-postFinishLocalPairR :: PairMsg -> Handler RepHtml+postFinishLocalPairR :: PairMsg -> Handler Html #ifdef WITH_PAIRING postFinishLocalPairR msg = promptSecret (Just msg) $ \_ secret -> do-	repodir <- lift $ repoPath <$> liftAnnex gitRepo+	repodir <- liftH $ repoPath <$> liftAnnex gitRepo 	liftIO $ setup repodir 	startLocalPairing PairAck (cleanup repodir) alert uuid "" secret   where@@ -159,7 +159,7 @@ postFinishLocalPairR _ = noLocalPairing #endif -getConfirmXMPPPairFriendR :: PairKey -> Handler RepHtml+getConfirmXMPPPairFriendR :: PairKey -> Handler Html #ifdef WITH_XMPP getConfirmXMPPPairFriendR pairkey@(PairKey _ t) = case parseJID t of 	Nothing -> error "bad JID"@@ -170,7 +170,7 @@ getConfirmXMPPPairFriendR _ = noXMPPPairing #endif -getFinishXMPPPairFriendR :: PairKey -> Handler RepHtml+getFinishXMPPPairFriendR :: PairKey -> Handler Html #ifdef WITH_XMPP getFinishXMPPPairFriendR (PairKey theiruuid t) = case parseJID t of 	Nothing -> error "bad JID"@@ -188,13 +188,13 @@ {- Displays a page indicating pairing status and   - prompting to set up cloud repositories. -} #ifdef WITH_XMPP-xmppPairStatus :: Bool -> Maybe JID -> Handler RepHtml+xmppPairStatus :: Bool -> Maybe JID -> Handler Html xmppPairStatus inprogress theirjid = pairPage $ do 	let friend = buddyName <$> theirjid 	$(widgetFile "configurators/pairing/xmpp/end") #endif -getRunningLocalPairR :: SecretReminder -> Handler RepHtml+getRunningLocalPairR :: SecretReminder -> Handler Html #ifdef WITH_PAIRING getRunningLocalPairR s = pairPage $ do 	let secret = fromSecretReminder s@@ -216,8 +216,8 @@  -} startLocalPairing :: PairStage -> IO () -> (AlertButton -> Alert) -> Maybe UUID -> Text -> Secret -> Widget startLocalPairing stage oncancel alert muuid displaysecret secret = do-	urlrender <- lift getUrlRender-	reldir <- fromJust . relDir <$> lift getYesod+	urlrender <- liftH getUrlRender+	reldir <- fromJust . relDir <$> liftH getYesod  	sendrequests <- liftAssistant $ asIO2 $ mksendrequests urlrender 	{- Generating a ssh key pair can take a while, so do it in the@@ -235,7 +235,7 @@ 		startSending pip stage $ sendrequests sender 	void $ liftIO $ forkIO thread -	lift $ redirect $ RunningLocalPairR $ toSecretReminder displaysecret+	liftH $ redirect $ RunningLocalPairR $ toSecretReminder displaysecret   where 	{- Sends pairing messages until the thread is killed, 	 - and shows an activity alert while doing it.@@ -262,9 +262,9 @@  {- If a PairMsg is passed in, ensures that the user enters a secret  - that can validate it. -}-promptSecret :: Maybe PairMsg -> (Text -> Secret -> Widget) -> Handler RepHtml+promptSecret :: Maybe PairMsg -> (Text -> Secret -> Widget) -> Handler Html promptSecret msg cont = pairPage $ do-	((result, form), enctype) <- lift $+	((result, form), enctype) <- liftH $ 		runFormPost $ renderBootstrap $ 			InputSecret <$> aopt textField "Secret phrase" Nothing 	case result of@@ -319,9 +319,9 @@  #endif -pairPage :: Widget -> Handler RepHtml+pairPage :: Widget -> Handler Html pairPage = page "Pairing" (Just Configuration) -noPairing :: Text -> Handler RepHtml+noPairing :: Text -> Handler Html noPairing pairingtype = pairPage $ 	$(widgetFile "configurators/pairing/disabled")
Assistant/WebApp/Configurators/Preferences.hs view
@@ -18,9 +18,9 @@ import Config import Config.Files import Utility.DataUnits+import Git.Config  import qualified Data.Text as T-import System.Log.Logger  data PrefsForm = PrefsForm 	{ diskReserve :: Text@@ -29,7 +29,7 @@ 	, debugEnabled :: Bool 	} -prefsAForm :: PrefsForm -> AForm WebApp WebApp PrefsForm+prefsAForm :: PrefsForm -> MkAForm PrefsForm prefsAForm def = PrefsForm 	<$> areq (storageField `withNote` diskreservenote) 		"Disk reserve" (Just $ diskReserve def)@@ -68,7 +68,7 @@ 	<$> (T.pack . roughSize storageUnits False . annexDiskReserve <$> Annex.getGitConfig) 	<*> (annexNumCopies <$> Annex.getGitConfig) 	<*> inAutoStartFile-	<*> ((==) <$> (pure $ Just DEBUG) <*> (liftIO $ getLevel <$> getRootLogger))+	<*> (annexDebug <$> Annex.getGitConfig)  storePrefs :: PrefsForm -> Annex () storePrefs p = do@@ -79,18 +79,20 @@ 		liftIO $ if autoStart p 			then addAutoStartFile here 			else removeAutoStartFile here-	liftIO $ updateGlobalLogger rootLoggerName $ setLevel $-		if debugEnabled p then DEBUG else WARNING+	setConfig (annexConfig "debug") (boolConfig $ debugEnabled p)+	liftIO $ if debugEnabled p+		then enableDebugOutput +		else disableDebugOutput -getPreferencesR :: Handler RepHtml+getPreferencesR :: Handler Html getPreferencesR = postPreferencesR-postPreferencesR :: Handler RepHtml+postPreferencesR :: Handler Html postPreferencesR = page "Preferences" (Just Configuration) $ do-	((result, form), enctype) <- lift $ do+	((result, form), enctype) <- liftH $ do 		current <- liftAnnex getPrefs 		runFormPost $ renderBootstrap $ prefsAForm current 	case result of-		FormSuccess new -> lift $ do+		FormSuccess new -> liftH $ do 			liftAnnex $ storePrefs new 			redirect ConfigurationR 		_ -> $(widgetFile "configurators/preferences")
Assistant/WebApp/Configurators/Ssh.hs view
@@ -5,7 +5,7 @@  - Licensed under the GNU AGPL version 3 or higher.  -} -{-# LANGUAGE TypeFamilies, QuasiQuotes, MultiParamTypeClasses, TemplateHaskell, OverloadedStrings, RankNTypes #-}+{-# LANGUAGE QuasiQuotes, TemplateHaskell, OverloadedStrings #-} {-# LANGUAGE CPP #-}  module Assistant.WebApp.Configurators.Ssh where@@ -24,7 +24,7 @@ import qualified Data.Map as M import Network.Socket -sshConfigurator :: Widget -> Handler RepHtml+sshConfigurator :: Widget -> Handler Html sshConfigurator = page "Add a remote server" (Just Configuration)  data SshInput = SshInput@@ -58,7 +58,11 @@ 	, inputPort = sshPort s 	} -sshInputAForm :: (Field WebApp WebApp Text) -> SshInput -> AForm WebApp WebApp SshInput+#if MIN_VERSION_yesod(1,2,0)+sshInputAForm :: Field Handler Text -> SshInput -> AForm Handler SshInput+#else+sshInputAForm :: Field WebApp WebApp Text -> SshInput -> AForm WebApp WebApp SshInput+#endif sshInputAForm hostnamefield def = SshInput 	<$> aopt check_hostname "Host name" (Just $ inputHostname def) 	<*> aopt check_username "User name" (Just $ inputUsername def)@@ -102,12 +106,12 @@ usable UsableRsyncServer = True usable UsableSshInput = True -getAddSshR :: Handler RepHtml+getAddSshR :: Handler Html getAddSshR = postAddSshR-postAddSshR :: Handler RepHtml+postAddSshR :: Handler Html postAddSshR = sshConfigurator $ do 	u <- liftIO $ T.pack <$> myUserName-	((result, form), enctype) <- lift $+	((result, form), enctype) <- liftH $ 		runFormPost $ renderBootstrap $ sshInputAForm textField $ 			SshInput Nothing (Just u) Nothing 22 	case result of@@ -115,7 +119,7 @@ 			s <- liftIO $ testServer sshinput 			case s of 				Left status -> showform form enctype status-				Right sshdata -> lift $ redirect $ ConfirmSshR sshdata+				Right sshdata -> liftH $ redirect $ ConfirmSshR sshdata 		_ -> showform form enctype UntestedServer   where 	showform form enctype status = $(widgetFile "configurators/ssh/add")@@ -131,19 +135,19 @@  - Note that there's no EnableSshR because ssh remotes are not special  - remotes, and so their configuration is not shared between repositories.  -}-getEnableRsyncR :: UUID -> Handler RepHtml+getEnableRsyncR :: UUID -> Handler Html getEnableRsyncR = postEnableRsyncR-postEnableRsyncR :: UUID -> Handler RepHtml+postEnableRsyncR :: UUID -> Handler Html postEnableRsyncR u = do 	m <- fromMaybe M.empty . M.lookup u <$> liftAnnex readRemoteLog 	case (parseSshRsyncUrl =<< M.lookup "rsyncurl" m, M.lookup "name" m) of 		(Just sshinput, Just reponame) -> sshConfigurator $ do-			((result, form), enctype) <- lift $+			((result, form), enctype) <- liftH $ 				runFormPost $ renderBootstrap $ sshInputAForm textField sshinput 			case result of 				FormSuccess sshinput' 					| isRsyncNet (inputHostname sshinput') ->-						void $ lift $ makeRsyncNet sshinput' reponame (const noop)+						void $ liftH $ makeRsyncNet sshinput' reponame (const noop) 					| otherwise -> do 						s <- liftIO $ testServer sshinput' 						case s of@@ -156,7 +160,7 @@ 	showform form enctype status = do 		description <- liftAnnex $ T.pack <$> prettyUUID u 		$(widgetFile "configurators/ssh/enable")-	enable sshdata = lift $ redirect $ ConfirmSshR $+	enable sshdata = liftH $ redirect $ ConfirmSshR $ 		sshdata { rsyncOnly = True }  {- Converts a rsyncurl value to a SshInput. But only if it's a ssh rsync@@ -249,18 +253,18 @@  {- Runs a ssh command; if it fails shows the user the transcript,  - and if it succeeds, runs an action. -}-sshSetup :: [String] -> String -> Handler RepHtml -> Handler RepHtml+sshSetup :: [String] -> String -> Handler Html -> Handler Html sshSetup opts input a = do 	(transcript, ok) <- liftIO $ sshTranscript opts (Just input) 	if ok 		then a 		else showSshErr transcript -showSshErr :: String -> Handler RepHtml+showSshErr :: String -> Handler Html showSshErr msg = sshConfigurator $ 	$(widgetFile "configurators/ssh/error") -getConfirmSshR :: SshData -> Handler RepHtml+getConfirmSshR :: SshData -> Handler Html getConfirmSshR sshdata = sshConfigurator $ 	$(widgetFile "configurators/ssh/confirm") @@ -269,29 +273,29 @@ 	s <- liftIO $ testServer $ mkSshInput sshdata 	redirect $ either (const $ ConfirmSshR sshdata) ConfirmSshR s -getMakeSshGitR :: SshData -> Handler RepHtml+getMakeSshGitR :: SshData -> Handler Html getMakeSshGitR = makeSsh False setupGroup -getMakeSshRsyncR :: SshData -> Handler RepHtml+getMakeSshRsyncR :: SshData -> Handler Html getMakeSshRsyncR = makeSsh True setupGroup -makeSsh :: Bool -> (Remote -> Handler ()) -> SshData -> Handler RepHtml+makeSsh :: Bool -> (Remote -> Handler ()) -> SshData -> Handler Html makeSsh rsync setup sshdata 	| needsPubKey sshdata = do 		keypair <- liftIO genSshKeyPair 		sshdata' <- liftIO $ setupSshKeyPair keypair sshdata-		makeSsh' rsync setup sshdata' (Just keypair)+		makeSsh' rsync setup sshdata sshdata' (Just keypair) 	| sshPort sshdata /= 22 = do 		sshdata' <- liftIO $ setSshConfig sshdata []-		makeSsh' rsync setup sshdata' Nothing-	| otherwise = makeSsh' rsync setup sshdata Nothing+		makeSsh' rsync setup sshdata sshdata' Nothing+	| otherwise = makeSsh' rsync setup sshdata sshdata Nothing -makeSsh' :: Bool -> (Remote -> Handler ()) -> SshData -> Maybe SshKeyPair -> Handler RepHtml-makeSsh' rsync setup sshdata keypair =+makeSsh' :: Bool -> (Remote -> Handler ()) -> SshData -> SshData -> Maybe SshKeyPair -> Handler Html+makeSsh' rsync setup origsshdata sshdata keypair = do 	sshSetup [sshhost, remoteCommand] "" $ 		makeSshRepo rsync setup sshdata   where-	sshhost = genSshHost (sshHostName sshdata) (sshUserName sshdata)+	sshhost = genSshHost (sshHostName origsshdata) (sshUserName origsshdata) 	remotedir = T.unpack $ sshDirectory sshdata 	remoteCommand = shellWrap $ intercalate "&&" $ catMaybes 		[ Just $ "mkdir -p " ++ shellEscape remotedir@@ -303,15 +307,15 @@ 			else Nothing 		] -makeSshRepo :: Bool -> (Remote -> Handler ()) -> SshData -> Handler RepHtml+makeSshRepo :: Bool -> (Remote -> Handler ()) -> SshData -> Handler Html makeSshRepo forcersync setup sshdata = do 	r <- liftAssistant $ makeSshRemote forcersync sshdata Nothing 	setup r 	redirect $ EditNewCloudRepositoryR $ Remote.uuid r -getAddRsyncNetR :: Handler RepHtml+getAddRsyncNetR :: Handler Html getAddRsyncNetR = postAddRsyncNetR-postAddRsyncNetR :: Handler RepHtml+postAddRsyncNetR :: Handler Html postAddRsyncNetR = do 	((result, form), enctype) <- runFormPost $ 		renderBootstrap $ sshInputAForm hostnamefield $@@ -339,7 +343,7 @@   user name something like "7491" |] -makeRsyncNet :: SshInput -> String -> (Remote -> Handler ()) -> Handler RepHtml+makeRsyncNet :: SshInput -> String -> (Remote -> Handler ()) -> Handler Html makeRsyncNet sshinput reponame setup = do 	knownhost <- liftIO $ maybe (return False) knownHost (inputHostname sshinput) 	keypair <- liftIO $ genSshKeyPair
Assistant/WebApp/Configurators/WebDAV.hs view
@@ -5,7 +5,7 @@  - Licensed under the GNU AGPL version 3 or higher.  -} -{-# LANGUAGE CPP, TypeFamilies, QuasiQuotes, MultiParamTypeClasses, TemplateHaskell, OverloadedStrings, RankNTypes #-}+{-# LANGUAGE CPP, QuasiQuotes, TemplateHaskell, OverloadedStrings #-}  module Assistant.WebApp.Configurators.WebDAV where @@ -26,10 +26,10 @@ import qualified Data.Text as T import Network.URI -webDAVConfigurator :: Widget -> Handler RepHtml+webDAVConfigurator :: Widget -> Handler Html webDAVConfigurator = page "Add a WebDAV repository" (Just Configuration) -boxConfigurator :: Widget -> Handler RepHtml+boxConfigurator :: Widget -> Handler Html boxConfigurator = page "Add a Box.com repository" (Just Configuration)  data WebDAVInput = WebDAVInput@@ -43,7 +43,7 @@ toCredPair :: WebDAVInput -> CredPair toCredPair input = (T.unpack $ user input, T.unpack $ password input) -boxComAForm :: Maybe CredPair -> AForm WebApp WebApp WebDAVInput+boxComAForm :: Maybe CredPair -> MkAForm WebDAVInput boxComAForm defcreds = WebDAVInput 	<$> areq textField "Username or Email" (T.pack . fst <$> defcreds) 	<*> areq passwordField "Box.com Password" (T.pack . snd <$> defcreds)@@ -51,7 +51,7 @@ 	<*> areq textField "Directory" (Just "annex") 	<*> enableEncryptionField -webDAVCredsAForm :: Maybe CredPair -> AForm WebApp WebApp WebDAVInput+webDAVCredsAForm :: Maybe CredPair -> MkAForm WebDAVInput webDAVCredsAForm defcreds = WebDAVInput 	<$> areq textField "Username or Email" (T.pack . fst <$> defcreds) 	<*> areq passwordField "Password" (T.pack . snd <$> defcreds)@@ -59,16 +59,16 @@ 	<*> pure T.empty 	<*> pure NoEncryption -- not used! -getAddBoxComR :: Handler RepHtml+getAddBoxComR :: Handler Html getAddBoxComR = postAddBoxComR-postAddBoxComR :: Handler RepHtml+postAddBoxComR :: Handler Html #ifdef WITH_WEBDAV postAddBoxComR = boxConfigurator $ do 	defcreds <- liftAnnex $ previouslyUsedWebDAVCreds "box.com"-	((result, form), enctype) <- lift $+	((result, form), enctype) <- liftH $ 		runFormPost $ renderBootstrap $ boxComAForm defcreds 	case result of-		FormSuccess input -> lift $ +		FormSuccess input -> liftH $  			makeWebDavRemote "box.com" (toCredPair input) setgroup $ M.fromList 				[ configureEncryption $ enableEncryption input 				, ("embedcreds", if embedCreds input then "yes" else "no")@@ -87,9 +87,9 @@ postAddBoxComR = error "WebDAV not supported by this build" #endif -getEnableWebDAVR :: UUID -> Handler RepHtml+getEnableWebDAVR :: UUID -> Handler Html getEnableWebDAVR = postEnableWebDAVR-postEnableWebDAVR :: UUID -> Handler RepHtml+postEnableWebDAVR :: UUID -> Handler Html #ifdef WITH_WEBDAV postEnableWebDAVR uuid = do 	m <- liftAnnex readRemoteLog@@ -99,7 +99,7 @@ 	mcreds <- liftAnnex $ 		getRemoteCredPairFor "webdav" c (WebDAV.davCreds uuid) 	case mcreds of-		Just creds -> webDAVConfigurator $ lift $+		Just creds -> webDAVConfigurator $ liftH $ 			makeWebDavRemote name creds (const noop) M.empty 		Nothing 			| "box.com/" `isInfixOf` url ->@@ -111,10 +111,10 @@ 		defcreds <- liftAnnex $  			maybe (pure Nothing) previouslyUsedWebDAVCreds $ 				urlHost url-		((result, form), enctype) <- lift $+		((result, form), enctype) <- liftH $ 			runFormPost $ renderBootstrap $ webDAVCredsAForm defcreds 		case result of-			FormSuccess input -> lift $+			FormSuccess input -> liftH $ 				makeWebDavRemote name (toCredPair input) (const noop) M.empty 			_ -> do 				description <- liftAnnex $
Assistant/WebApp/Configurators/XMPP.hs view
@@ -5,7 +5,7 @@  - Licensed under the GNU AGPL version 3 or higher.  -} -{-# LANGUAGE TypeFamilies, QuasiQuotes, MultiParamTypeClasses, TemplateHaskell, OverloadedStrings #-}+{-# LANGUAGE TypeFamilies, QuasiQuotes, TemplateHaskell, OverloadedStrings, FlexibleContexts #-} {-# LANGUAGE CPP #-}  module Assistant.WebApp.Configurators.XMPP where@@ -13,8 +13,8 @@ import Assistant.WebApp.Common import Assistant.WebApp.Notifications import Utility.NotificationBroadcaster-import qualified Remote #ifdef WITH_XMPP+import qualified Remote import Assistant.XMPP.Client import Assistant.XMPP.Buddies import Assistant.Types.Buddies@@ -79,7 +79,7 @@ 		<$> getDaemonStatus #endif -getNeedCloudRepoR :: UUID -> Handler RepHtml+getNeedCloudRepoR :: UUID -> Handler Html #ifdef WITH_XMPP getNeedCloudRepoR for = page "Cloud repository needed" (Just Configuration) $ do 	buddyname <- liftAssistant $ getBuddyName for@@ -89,34 +89,34 @@ 	$(widgetFile "configurators/xmpp/disabled") #endif -getXMPPConfigR :: Handler RepHtml+getXMPPConfigR :: Handler Html getXMPPConfigR = postXMPPConfigR -postXMPPConfigR :: Handler RepHtml+postXMPPConfigR :: Handler Html postXMPPConfigR = xmppform DashboardR -getXMPPConfigForPairFriendR :: Handler RepHtml+getXMPPConfigForPairFriendR :: Handler Html getXMPPConfigForPairFriendR = postXMPPConfigForPairFriendR -postXMPPConfigForPairFriendR :: Handler RepHtml+postXMPPConfigForPairFriendR :: Handler Html postXMPPConfigForPairFriendR = xmppform StartXMPPPairFriendR -getXMPPConfigForPairSelfR :: Handler RepHtml+getXMPPConfigForPairSelfR :: Handler Html getXMPPConfigForPairSelfR = postXMPPConfigForPairSelfR -postXMPPConfigForPairSelfR :: Handler RepHtml+postXMPPConfigForPairSelfR :: Handler Html postXMPPConfigForPairSelfR = xmppform StartXMPPPairSelfR -xmppform :: Route WebApp -> Handler RepHtml+xmppform :: Route WebApp -> Handler Html #ifdef WITH_XMPP xmppform next = xmppPage $ do-	((result, form), enctype) <- lift $ do+	((result, form), enctype) <- liftH $ do 		oldcreds <- liftAnnex getXMPPCreds 		runFormPost $ renderBootstrap $ xmppAForm $ 			creds2Form <$> oldcreds 	let showform problem = $(widgetFile "configurators/xmpp") 	case result of-		FormSuccess f -> either (showform . Just) (lift . storecreds)+		FormSuccess f -> either (showform . Just) (liftH . storecreds) 			=<< liftIO (validateForm f) 		_ -> showform Nothing   where@@ -133,12 +133,12 @@  -  - Returns a div, which will be inserted into the calling page.  -}-getBuddyListR :: NotificationId -> Handler RepHtml+getBuddyListR :: NotificationId -> Handler Html getBuddyListR nid = do 	waitNotifier getBuddyListBroadcaster nid  	p <- widgetToPageContent buddyListDisplay-	hamletToRepHtml $ [hamlet|^{pageBody p}|]+	giveUrlRenderer $ [hamlet|^{pageBody p}|]  buddyListDisplay :: Widget buddyListDisplay = do@@ -171,12 +171,12 @@ creds2Form :: XMPPCreds -> XMPPForm creds2Form c = XMPPForm (xmppJID c) (xmppPassword c) -xmppAForm :: (Maybe XMPPForm) -> AForm WebApp WebApp XMPPForm+xmppAForm :: (Maybe XMPPForm) -> MkAForm XMPPForm xmppAForm def = XMPPForm 	<$> areq jidField "Jabber address" (formJID <$> def) 	<*> areq passwordField "Password" Nothing -jidField :: Field WebApp WebApp Text+jidField :: MkField Text jidField = checkBool (isJust . parseJID) bad textField   where 	bad :: Text@@ -216,5 +216,5 @@ 	showport (UnixSocket s) = s #endif -xmppPage :: Widget -> Handler RepHtml+xmppPage :: Widget -> Handler Html xmppPage = page "Jabber" (Just Configuration)
Assistant/WebApp/Control.hs view
@@ -20,11 +20,11 @@ import System.Posix (getProcessID, signalProcess, sigTERM) import qualified Data.Map as M -getShutdownR :: Handler RepHtml+getShutdownR :: Handler Html getShutdownR = page "Shutdown" Nothing $ 	$(widgetFile "control/shutdown") -getShutdownConfirmedR :: Handler RepHtml+getShutdownConfirmedR :: Handler Html getShutdownConfirmedR = do 	{- Remove all alerts for currently running activities. -} 	liftAssistant $ do@@ -45,7 +45,7 @@ 		$(widgetFile "control/shutdownconfirmed")  {- Quite a hack, and doesn't redirect the browser window. -}-getRestartR :: Handler RepHtml+getRestartR :: Handler Html getRestartR = page "Restarting" Nothing $ do 	void $ liftIO $ forkIO $ do 		threadDelay 2000000@@ -63,7 +63,7 @@ 	liftIO $ maybe noop snd $ M.lookup name m 	redirectBack -getLogR :: Handler RepHtml+getLogR :: Handler Html getLogR = page "Logs" Nothing $ do 	logfile <- liftAnnex $ fromRepo gitAnnexLogFile 	logs <- liftIO $ listLogs logfile
Assistant/WebApp/DashBoard.hs view
@@ -23,15 +23,15 @@ import qualified Remote import qualified Git -import Text.Hamlet+import qualified Text.Hamlet as Hamlet import qualified Data.Map as M import Control.Concurrent  {- A display of currently running and queued transfers. -} transfersDisplay :: Bool -> Widget transfersDisplay warnNoScript = do-	webapp <- lift getYesod-	current <- lift $ M.toList <$> getCurrentTransfers+	webapp <- liftH getYesod+	current <- liftH $ M.toList <$> getCurrentTransfers 	queued <- take 10 <$> liftAssistant getTransferQueue 	autoUpdate ident NotifierTransfersR (10 :: Int) (10 :: Int) 	let transfers = simplifyTransfers $ current ++ queued@@ -62,12 +62,12 @@  - body is. To get the widget head content, the widget is also   - inserted onto the getDashboardR page.  -}-getTransfersR :: NotificationId -> Handler RepHtml+getTransfersR :: NotificationId -> Handler Html getTransfersR nid = do 	waitNotifier getTransferBroadcaster nid  	p <- widgetToPageContent $ transfersDisplay False-	hamletToRepHtml $ [hamlet|^{pageBody p}|]+	giveUrlRenderer $ [hamlet|^{pageBody p}|]  {- The main dashboard. -} dashboard :: Bool -> Widget@@ -77,7 +77,7 @@ 	let transferlist = transfersDisplay warnNoScript 	$(widgetFile "dashboard/main") -getDashboardR :: Handler RepHtml+getDashboardR :: Handler Html getDashboardR = ifM (inFirstRun) 	( redirect ConfigurationR 	, page "" (Just DashBoard) $ dashboard True@@ -88,16 +88,16 @@ headDashboardR = noop  {- Same as DashboardR, except no autorefresh at all (and no noscript warning). -}-getNoScriptR :: Handler RepHtml+getNoScriptR :: Handler Html getNoScriptR = page "" (Just DashBoard) $ dashboard False  {- Same as DashboardR, except with autorefreshing via meta refresh. -}-getNoScriptAutoR :: Handler RepHtml+getNoScriptAutoR :: Handler Html getNoScriptAutoR = page "" (Just DashBoard) $ do 	let ident = NoScriptR 	let delayseconds = 3 :: Int 	let this = NoScriptAutoR-	toWidgetHead $(hamletFile $ hamletTemplate "dashboard/metarefresh")+	toWidgetHead $(Hamlet.hamletFile $ hamletTemplate "dashboard/metarefresh") 	dashboard False  {- The javascript code does a post. -}
Assistant/WebApp/Documentation.hs view
@@ -5,7 +5,7 @@  - Licensed under the GNU AGPL version 3 or higher.  -} -{-# LANGUAGE TypeFamilies, QuasiQuotes, MultiParamTypeClasses, TemplateHaskell, OverloadedStrings, RankNTypes #-}+{-# LANGUAGE QuasiQuotes, TemplateHaskell, OverloadedStrings #-}  module Assistant.WebApp.Documentation where @@ -21,12 +21,12 @@ 	base <- standaloneAppBase 	return $ (</> "LICENSE") <$> base -getAboutR :: Handler RepHtml+getAboutR :: Handler Html getAboutR = page "About git-annex" (Just About) $ do 	builtinlicense <- isJust <$> liftIO licenseFile 	$(widgetFile "documentation/about") -getLicenseR :: Handler RepHtml+getLicenseR :: Handler Html getLicenseR = do 	v <- liftIO licenseFile 	case v of@@ -37,6 +37,6 @@ 			license <- liftIO $ readFile f 			$(widgetFile "documentation/license") -getRepoGroupR :: Handler RepHtml+getRepoGroupR :: Handler Html getRepoGroupR = page "About repository groups" (Just About) $ do 	$(widgetFile "documentation/repogroup")
Assistant/WebApp/Form.hs view
@@ -8,10 +8,12 @@ {-# LANGUAGE FlexibleContexts, TypeFamilies, QuasiQuotes #-} {-# LANGUAGE MultiParamTypeClasses, TemplateHaskell #-} {-# LANGUAGE OverloadedStrings, RankNTypes #-}+{-# LANGUAGE CPP #-}  module Assistant.WebApp.Form where  import Types.Remote (RemoteConfigKey)+import Assistant.WebApp.Types  import Yesod hiding (textField, passwordField) import Yesod.Form.Fields as F@@ -24,15 +26,22 @@  -  - Required fields are still checked by Yesod.  -}-textField :: RenderMessage master FormMessage => Field sub master Text+textField :: MkField Text textField = F.textField 	{ fieldView = \theId name attrs val _isReq -> [whamlet| <input id="#{theId}" name="#{name}" *{attrs} type="text" value="#{either id id val}"> |] 	} +readonlyTextField :: MkField Text+readonlyTextField = F.textField+	{ fieldView = \theId name attrs val _isReq -> [whamlet|+<input id="#{theId}" name="#{name}" *{attrs} type="text" value="#{either id id val}" readonly="true">+|]+	}+ {- Also without required attribute. -}-passwordField :: RenderMessage master FormMessage => Field sub master Text+passwordField :: MkField Text passwordField = F.passwordField 	{ fieldView = \theId name attrs val _isReq -> toWidget [hamlet| <input id="#{theId}" name="#{name}" *{attrs} type="password" value="#{either id id val}">@@ -40,7 +49,11 @@ 	}  {- Makes a note widget be displayed after a field. -}+#if MIN_VERSION_yesod(1,2,0)+withNote :: (Monad m, ToWidget (HandlerSite m) a) => Field m v -> a -> Field m v+#else withNote :: Field sub master v -> GWidget sub master () -> Field sub master v+#endif withNote field note = field { fieldView = newview }   where 	newview theId name attrs val isReq = @@ -48,7 +61,11 @@ 		in [whamlet|^{fieldwidget}&nbsp;&nbsp;<span>^{note}</span>|]  {- Note that the toggle string must be unique on the form. -}+#if MIN_VERSION_yesod(1,2,0)+withExpandableNote :: (Monad m, ToWidget (HandlerSite m) w) => Field m v -> (String, w) -> Field m v+#else withExpandableNote :: Field sub master v -> (String, GWidget sub master ()) -> Field sub master v+#endif withExpandableNote field (toggle, note) = withNote field $ [whamlet| <a .btn data-toggle="collapse" data-target="##{ident}">   #{toggle}@@ -62,7 +79,11 @@ 	deriving (Eq)  {- Adds a check box to an AForm to control encryption. -}+#if MIN_VERSION_yesod(1,2,0)+enableEncryptionField :: (RenderMessage site FormMessage) => AForm (HandlerT site IO) EnableEncryption+#else enableEncryptionField :: RenderMessage master FormMessage => AForm sub master EnableEncryption+#endif enableEncryptionField = areq (selectFieldList choices) "Encryption" (Just SharedEncryption)   where 	choices :: [(Text, EnableEncryption)]
Assistant/WebApp/Notifications.hs view
@@ -5,7 +5,7 @@  - Licensed under the GNU AGPL version 3 or higher.  -} -{-# LANGUAGE CPP, TypeFamilies, QuasiQuotes, MultiParamTypeClasses, TemplateHaskell, OverloadedStrings, RankNTypes #-}+{-# LANGUAGE CPP, QuasiQuotes, TemplateHaskell, OverloadedStrings #-}  #if defined VERSION_yesod_default #if ! MIN_VERSION_yesod_default(1,1,0)@@ -23,7 +23,6 @@ import Utility.NotificationBroadcaster import Utility.Yesod -import Yesod import Data.Text (Text) import qualified Data.Text as T #ifndef WITH_OLD_YESOD
Assistant/WebApp/OtherRepos.hs view
@@ -5,7 +5,7 @@  - Licensed under the GNU AGPL version 3 or higher.  -} -{-# LANGUAGE CPP, TypeFamilies, QuasiQuotes, MultiParamTypeClasses, TemplateHaskell, OverloadedStrings, RankNTypes #-}+{-# LANGUAGE QuasiQuotes, TemplateHaskell, OverloadedStrings #-}  module Assistant.WebApp.OtherRepos where @@ -18,11 +18,10 @@ import qualified Utility.Url as Url import Utility.Yesod -import Yesod import Control.Concurrent import System.Process (cwd) -getRepositorySwitcherR :: Handler RepHtml+getRepositorySwitcherR :: Handler Html getRepositorySwitcherR = page "Switch repository" Nothing $ do 	repolist <- liftIO listOtherRepos 	$(widgetFile "control/repositoryswitcher")@@ -40,9 +39,10 @@  - a gitAnnexUrlFile. Waits for the assistant to be up and listening for  - connections by testing the url. Once it's running, redirect to it.  -}-getSwitchToRepositoryR :: FilePath -> Handler RepHtml+getSwitchToRepositoryR :: FilePath -> Handler Html getSwitchToRepositoryR repo = do 	liftIO $ startAssistant repo+	liftIO $ addAutoStartFile repo -- make this the new default repo 	redirect =<< liftIO geturl   where 	geturl = do
Assistant/WebApp/Page.hs view
@@ -15,8 +15,7 @@ import Assistant.WebApp.SideBar import Utility.Yesod -import Yesod-import Text.Hamlet+import qualified Text.Hamlet as Hamlet import Data.Text (Text)  data NavBarItem = DashBoard | Configuration | About@@ -43,14 +42,14 @@  {- A standard page of the webapp, with a title, a sidebar, and that may  - be highlighted on the navbar. -}-page :: Html -> Maybe NavBarItem -> Widget -> Handler RepHtml+page :: Hamlet.Html -> Maybe NavBarItem -> Widget -> Handler Html page title navbaritem content = customPage navbaritem $ do 	setTitle title 	sideBarDisplay 	content  {- A custom page, with no title or sidebar set. -}-customPage :: Maybe NavBarItem -> Widget -> Handler RepHtml+customPage :: Maybe NavBarItem -> Widget -> Handler Html customPage navbaritem content = do 	webapp <- getYesod 	navbar <- map navdetails <$> selectNavBar@@ -62,7 +61,7 @@ 		addScript $ StaticR js_bootstrap_modal_js 		addScript $ StaticR js_bootstrap_collapse_js 		$(widgetFile "page")-	hamletToRepHtml $(hamletFile $ hamletTemplate "bootstrap")+	giveUrlRenderer $(Hamlet.hamletFile $ hamletTemplate "bootstrap")   where 	navdetails i = (navBarName i, navBarRoute i, Just i == navbaritem) 
Assistant/WebApp/RepoList.hs view
@@ -5,7 +5,7 @@  - Licensed under the GNU AGPL version 3 or higher.  -} -{-# LANGUAGE TypeFamilies, QuasiQuotes, MultiParamTypeClasses, TemplateHaskell, OverloadedStrings, RankNTypes, CPP #-}+{-# LANGUAGE QuasiQuotes, TemplateHaskell, OverloadedStrings, CPP #-}  module Assistant.WebApp.RepoList where @@ -79,11 +79,11 @@  -  - Returns a div, which will be inserted into the calling page.  -}-getRepoListR :: RepoListNotificationId -> Handler RepHtml+getRepoListR :: RepoListNotificationId -> Handler Html getRepoListR (RepoListNotificationId nid reposelector) = do 	waitNotifier getRepoListBroadcaster nid 	p <- widgetToPageContent $ repoListDisplay reposelector-	hamletToRepHtml $ [hamlet|^{pageBody p}|]+	giveUrlRenderer $ [hamlet|^{pageBody p}|]  mainRepoSelector :: RepoSelector mainRepoSelector = RepoSelector@@ -110,7 +110,7 @@ 	addScript $ StaticR jquery_ui_mouse_js 	addScript $ StaticR jquery_ui_sortable_js -	repolist <- lift $ repoList reposelector+	repolist <- liftH $ repoList reposelector 	let addmore = nudgeAddMore reposelector 	let nootherrepos = length repolist < 2 
Assistant/WebApp/SideBar.hs view
@@ -5,7 +5,7 @@  - Licensed under the GNU AGPL version 3 or higher.  -} -{-# LANGUAGE TypeFamilies, QuasiQuotes, MultiParamTypeClasses, TemplateHaskell, OverloadedStrings, RankNTypes #-}+{-# LANGUAGE QuasiQuotes, TemplateHaskell, OverloadedStrings #-}  module Assistant.WebApp.SideBar where @@ -18,7 +18,6 @@ import Utility.NotificationBroadcaster import Utility.Yesod -import Yesod import Data.Text (Text) import qualified Data.Text as T import qualified Data.Map as M@@ -28,7 +27,7 @@ sideBarDisplay = do 	let content = do 		{- Add newest alerts to the sidebar. -}-		alertpairs <- lift $ M.toList . alertMap+		alertpairs <- liftH $ M.toList . alertMap 			<$> liftAssistant getDaemonStatus 		mapM_ renderalert $ 			take displayAlerts $ reverse $ sortAlertPairs alertpairs@@ -61,7 +60,7 @@  - body is. To get the widget head content, the widget is also   - inserted onto all pages.  -}-getSideBarR :: NotificationId -> Handler RepHtml+getSideBarR :: NotificationId -> Handler Html getSideBarR nid = do 	waitNotifier getAlertBroadcaster nid @@ -73,7 +72,7 @@ 	liftIO $ threadDelay 100000  	page <- widgetToPageContent sideBarDisplay-	hamletToRepHtml $ [hamlet|^{pageBody page}|]+	giveUrlRenderer $ [hamlet|^{pageBody page}|]  {- Called by the client to close an alert. -} getCloseAlert :: AlertId -> Handler ()@@ -92,7 +91,7 @@ 			redirect $ buttonUrl b 		_ -> redirectBack -htmlIcon :: AlertIcon -> GWidget WebApp WebApp ()+htmlIcon :: AlertIcon -> Widget htmlIcon ActivityIcon = [whamlet|<img src="@{StaticR activityicon_gif}" alt="">|] htmlIcon SyncIcon = [whamlet|<img src="@{StaticR syncicon_gif}" alt="">|] htmlIcon InfoIcon = bootstrapIcon "info-sign"@@ -101,5 +100,5 @@ -- utf-8 umbrella (utf-8 cloud looks too stormy) htmlIcon TheCloud = [whamlet|&#9730;|] -bootstrapIcon :: Text -> GWidget sub master ()+bootstrapIcon :: Text -> Widget bootstrapIcon name = [whamlet|<i .icon-#{name}></i>|]
Assistant/WebApp/Types.hs view
@@ -7,7 +7,8 @@  {-# LANGUAGE TypeFamilies, QuasiQuotes, MultiParamTypeClasses #-} {-# LANGUAGE TemplateHaskell, OverloadedStrings, RankNTypes #-}-{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE FlexibleInstances, FlexibleContexts #-}+{-# LANGUAGE CPP #-} {-# OPTIONS_GHC -fno-warn-orphans #-}  module Assistant.WebApp.Types where@@ -22,7 +23,6 @@ import Logs.Transfer import Build.SysConfig (packageversion) -import Yesod import Yesod.Static import Text.Hamlet import Data.Text (Text, pack, unpack)@@ -71,7 +71,7 @@ 			addStylesheet $ StaticR css_bootstrap_css 			addStylesheet $ StaticR css_bootstrap_responsive_css 			$(widgetFile "error")-		hamletToRepHtml $(hamletFile $ hamletTemplate "bootstrap")+		giveUrlRenderer $(hamletFile $ hamletTemplate "bootstrap")  instance RenderMessage WebApp FormMessage where 	renderMessage _ _ = defaultFormMessage@@ -81,29 +81,65 @@  - When the webapp is run outside a git-annex repository, the fallback  - value is returned.  -}+#if MIN_VERSION_yesod(1,2,0)+liftAnnexOr :: forall a. a -> Annex a -> Handler a+#else liftAnnexOr :: forall sub a. a -> Annex a -> GHandler sub WebApp a+#endif liftAnnexOr fallback a = ifM (noAnnex <$> getYesod) 	( return fallback 	, liftAssistant $ liftAnnex a 	) +#if MIN_VERSION_yesod(1,2,0)+instance LiftAnnex Handler where+#else instance LiftAnnex (GHandler sub WebApp) where-	liftAnnex = liftAnnexOr $ error "internal runAnnex"+#endif+	liftAnnex = liftAnnexOr $ error "internal liftAnnex" +#if MIN_VERSION_yesod(1,2,0)+instance LiftAnnex (WidgetT WebApp IO) where+#else instance LiftAnnex (GWidget WebApp WebApp) where-	liftAnnex = lift . liftAnnex+#endif+	liftAnnex = liftH . liftAnnex  class LiftAssistant m where 	liftAssistant :: Assistant a -> m a +#if MIN_VERSION_yesod(1,2,0)+instance LiftAssistant Handler where+#else instance LiftAssistant (GHandler sub WebApp) where+#endif 	liftAssistant a = liftIO . flip runAssistant a 		=<< assistantData <$> getYesod +#if MIN_VERSION_yesod(1,2,0)+instance LiftAssistant (WidgetT WebApp IO) where+#else instance LiftAssistant (GWidget WebApp WebApp) where-	liftAssistant = lift . liftAssistant+#endif+	liftAssistant = liftH . liftAssistant -type Form x = Html -> MForm WebApp WebApp (FormResult x, Widget)+#if MIN_VERSION_yesod(1,2,0)+type MkMForm x = MForm Handler (FormResult x, Widget)+#else+type MkMForm x = MForm WebApp WebApp (FormResult x, Widget)+#endif++#if MIN_VERSION_yesod(1,2,0)+type MkAForm x = AForm Handler x+#else+type MkAForm x = AForm WebApp WebApp x+#endif++#if MIN_VERSION_yesod(1,2,0)+type MkField x = Monad m => RenderMessage (HandlerSite m) FormMessage => Field m x+#else+type MkField x = RenderMessage master FormMessage => Field sub master x+#endif  data RepoSelector = RepoSelector 	{ onlyCloud :: Bool
Build/BundledPrograms.hs view
@@ -40,6 +40,8 @@ 	, SysConfig.sha512 	, SysConfig.sha224 	, SysConfig.sha384+	-- ionice is not included in the bundle; we rely on the system's+	-- own version, which may better match its kernel 	]   where 	ifset True s = Just s
− Build/BundledPrograms.o

binary file changed (7888 → absent bytes)

Build/Configure.hs view
@@ -31,6 +31,7 @@ 	, TestCase "curl" $ testCmd "curl" "curl --version >/dev/null" 	, TestCase "wget" $ testCmd "wget" "wget --version >/dev/null" 	, TestCase "bup" $ testCmd "bup" "bup --version >/dev/null"+	, TestCase "ionice" $ testCmd "ionice" "ionice -c3 true >/dev/null" 	, TestCase "gpg" $ maybeSelectCmd "gpg" 		[ ("gpg", "--version >/dev/null") 		, ("gpg2", "--version >/dev/null") ]
Build/Configure.o view

binary file changed (53312 → 50336 bytes)

Build/DesktopFile.o view

binary file changed (13604 → 13604 bytes)

− Build/EvilSplicer.o

binary file changed (160444 → absent bytes)

Build/InstallDesktopFile.o view

binary file changed (2536 → 2536 bytes)

Build/NullSoftInstaller.hs view
@@ -119,6 +119,7 @@ cygwinDlls =
 	[ "cygwin1.dll"
 	, "cygasn1-8.dll"
+	, "cygattr-1.dll"
 	, "cygheimbase-1.dll"
 	, "cygroken-18.dll"
 	, "cygcom_err-2.dll"
− Build/Standalone.o

binary file changed (13632 → absent bytes)

− Build/SysConfig.o

binary file changed (4860 → absent bytes)

Build/TestConfig.o view

binary file changed (33088 → 32380 bytes)

CHANGELOG view
@@ -1,3 +1,66 @@+git-annex (4.20130627) unstable; urgency=low++  * assistant --autostart: Automatically ionices the daemons it starts.+  * assistant: Daily sanity check thread is run niced.+  * bup: Handle /~/ in bup remote paths.+    Thanks, Oliver Matthews+  * fsck: Ensures that direct mode is used for files when it's enabled.+  * webapp: Fix bug when setting up a remote ssh repo repeatedly on the same+    server.+  * webapp: Ensure that ssh keys generated for different directories+    on a server are always different.+  * webapp: Fix bug setting up ssh repo if the user enters "~/" at the start +    of the path.+  * assistant: Fix bug that prevented adding files written by gnucash, +    and more generally support adding hard links to files. However,+    other operations on hard links are still unsupported.+  * webapp: Fix bug that caused the webapp to hang when built with yesod 1.2.++ -- Joey Hess <joeyh@debian.org>  Thu, 27 Jun 2013 14:21:55 -0400++git-annex (4.20130621) unstable; urgency=low++  * Supports indirect mode on encfs in paranoia mode, and other+    filesystems that do not support hard links, but do support+    symlinks and other POSIX filesystem features.+  * Android: Add .thumbnails to .gitignore when setting up a camera+    repository.+  * Android: Make the "Open webapp" menu item open the just created+    repository when a new repo is made.+  * webapp: When the user switches to display a different repository,+    that repository becomes the default repository to be displayed next time+    the webapp gets started.+  * glacier: Better handling of the glacier inventory, which avoids+    duplicate uploads to the same glacier repository by `git annex copy`.+  * Direct mode: No longer temporarily remove write permission bit of files+    when adding them.+  * sync: Better support for bare git remotes. Now pushes directly to the+    master branch on such a remote, instead of to synced/master. This+    makes it easier to clone from a bare git remote that has been populated+    with git annex sync or by the assistant.+  * Android: Fix use of cp command to not try to use features present+    only on build system.+  * Windows: Fix hang when adding several files at once.+  * assistant: In direct mode, objects are now only dropped when all+    associated files are unwanted. This avoids a repreated drop/get loop+    of a file that has a copy in an archive directory, and a copy not in an+    archive directory. (Indirect mode still has some buggy behavior in this+    area, since it does not keep track of associated files.)+    Closes: #712060+  * status: No longer shows dead repositories.+  * annex.debug can now be set to enable debug logging by default.+    The webapp's debugging check box does this.+  * fsck: Avoid getting confused by Windows path separators+  * Windows: Multiple bug fixes, including fixing the data written to the+    git-annex branch.+  * Windows: The test suite now passes on Windows (a few broken parts are+    disabled).+  * assistant: On Linux, the expensive transfer scan is run niced.+  * Enable assistant and WebDAV support on powerpc and sparc architectures,+    which now have the necessary dependencies built.++ -- Joey Hess <joeyh@debian.org>  Fri, 21 Jun 2013 10:18:41 -0400+ git-annex (4.20130601) unstable; urgency=medium    * XMPP: Git push over xmpp made much more robust.
CmdLine.hs view
@@ -48,6 +48,8 @@ 				checkfuzzy 				forM_ fields $ uncurry Annex.setField 				sequence_ flags+				whenM (annexDebug <$> Annex.getGitConfig) $+					liftIO enableDebugOutput 				prepCommand cmd params 		 	tryRun state' cmd $ [startup] ++ actions ++ [shutdown $ cmdnocommit cmd]   where
Command/Add.hs view
@@ -79,37 +79,53 @@ 		next $ next $ cleanup file key =<< inAnnex key  {- The file that's being added is locked down before a key is generated,- - to prevent it from being modified in between. It's hard linked into a- - temporary location, and its writable bits are removed. It could still be- - written to by a process that already has it open for writing.+ - to prevent it from being modified in between. This lock down is not+ - perfect at best (and pretty weak at worst). For example, it does not+ - guard against files that are already opened for write by another process.+ - So a KeySource is returned. Its inodeCache can be used to detect any+ - changes that might be made to the file after it was locked down.  -+ - In indirect mode, the write bit is removed from the file as part of lock+ - down to guard against further writes, and because objects in the annex+ - have their write bit disabled anyway. This is not done in direct mode,+ - because files there need to remain writable at all times.+ -+ - When possible, the file is hard linked to a temp directory. This guards+ - against some changes, like deletion or overwrite of the file, and+ - allows lsof checks to be done more efficiently when adding a lot of files.+ -  - Lockdown can fail if a file gets deleted, and Nothing will be returned.  -} lockDown :: FilePath -> Annex (Maybe KeySource) lockDown file = ifM (crippledFileSystem)-	( liftIO $ catchMaybeIO $ do-		cache <- genInodeCache file-		return $ KeySource-			{ keyFilename = file-			, contentLocation = file-			, inodeCache = cache-			}+	( liftIO $ catchMaybeIO nohardlink 	, do 		tmp <- fromRepo gitAnnexTmpDir 		createAnnexDirectory tmp+		unlessM (isDirect) $ liftIO $+			void $ tryIO $ preventWrite file 		liftIO $ catchMaybeIO $ do-			preventWrite file 			(tmpfile, h) <- openTempFile tmp (takeFileName file) 			hClose h 			nukeFile tmpfile-			createLink file tmpfile-			cache <- genInodeCache tmpfile-			return $ KeySource-				{ keyFilename = file-				, contentLocation = tmpfile-				, inodeCache = cache-				}+			withhardlink tmpfile `catchIO` const nohardlink 	)+  where+  	nohardlink = do+		cache <- genInodeCache file+		return $ KeySource+			{ keyFilename = file+			, contentLocation = file+			, inodeCache = cache+			}+	withhardlink tmpfile = do+		createLink file tmpfile+		cache <- genInodeCache tmpfile+		return $ KeySource+			{ keyFilename = file+			, contentLocation = tmpfile+			, inodeCache = cache+			}  {- Ingests a locked down file into the annex.  -@@ -151,8 +167,6 @@ finishIngestDirect :: Key -> KeySource -> Annex () finishIngestDirect key source = do 	void $ addAssociatedFile key $ keyFilename source-	unlessM crippledFileSystem $-		liftIO $ allowWrite $ keyFilename source 	when (contentLocation source /= keyFilename source) $ 		liftIO $ nukeFile $ contentLocation source @@ -174,7 +188,7 @@ 		liftIO $ nukeFile file 		catchAnnex (fromAnnex key file) tryharder 		logStatus key InfoMissing-	throw e+	throwAnnex e   where 	-- fromAnnex could fail if the file ownership is weird 	tryharder :: IOException -> Annex ()
Command/Assistant.hs view
@@ -13,6 +13,7 @@ import qualified Command.Watch import Init import Config.Files+import qualified Build.SysConfig  import System.Environment @@ -55,13 +56,16 @@ 		f <- autoStartFile 		error $ "Nothing listed in " ++ f 	program <- readProgramFile+	haveionice <- pure Build.SysConfig.ionice <&&> inPath "ionice" 	forM_ dirs $ \d -> do 		putStrLn $ "git-annex autostart in " ++ d-		ifM (catchBoolIO $ go program d)+		ifM (catchBoolIO $ go haveionice program d) 			( putStrLn "ok" 			, putStrLn "failed" 			)   where-	go program dir = do+	go haveionice program dir = do 		setCurrentDirectory dir-		boolSystem program [Param "assistant"]+		if haveionice+			then boolSystem "ionice" [Param "-c3", Param program, Param "assistant"]+			else boolSystem program [Param "assistant"]
Command/Dead.hs view
@@ -25,7 +25,7 @@ start :: [String] -> CommandStart start ws = do 	let name = unwords ws-	showStart "dead " name+	showStart "dead" name 	u <- Remote.nameToUUID name 	next $ perform u 
Command/Fsck.hs view
@@ -1,6 +1,6 @@ {- git-annex command  -- - Copyright 2010-2011 Joey Hess <joey@kitenet.net>+ - Copyright 2010-2013 Joey Hess <joey@kitenet.net>  -  - Licensed under the GNU GPL version 3 or higher.  -}@@ -20,6 +20,7 @@ import qualified Backend import Annex.Content import Annex.Content.Direct+import Annex.Direct import Annex.Perms import Annex.Link import Logs.Location@@ -31,6 +32,7 @@ import qualified Option import Types.Key import Utility.HumanTime+import Git.FilePath  #ifndef __WINDOWS__ import System.Posix.Process (getProcessID)@@ -119,6 +121,7 @@ 	[ fixLink key file 	, verifyLocationLog key file 	, verifyDirectMapping key file+	, verifyDirectMode key file 	, checkKeySize key 	, checkBackend backend key (Just file) 	, checkKeyNumCopies key file numcopies@@ -206,24 +209,13 @@ 	maybe noop (go want) have 	return True   where-	go want have = when (want /= have) $ do-		{- Version 3.20120227 had a bug that could cause content-		 - to be stored in the wrong hash directory. Clean up-		 - after the bug by moving the content.-		 -}-		whenM (liftIO $ doesFileExist file) $-			unlessM (inAnnex key) $ do-				showNote "fixing content location"-				dir <- liftIO $ parentDir <$> absPath file-				let content = absPathFrom dir have-				unlessM crippledFileSystem $-					liftIO $ allowWrite (parentDir content)-				moveAnnex key content--		showNote "fixing link"-		liftIO $ createDirectoryIfMissing True (parentDir file)-		liftIO $ removeFile file-		addAnnexLink want file+	go want have+		| want /= fromInternalGitPath have = do+			showNote "fixing link"+			liftIO $ createDirectoryIfMissing True (parentDir file)+			liftIO $ removeFile file+			addAnnexLink want file+		| otherwise = noop  {- Checks that the location log reflects the current status of the key,  - in this repository only. -}@@ -284,6 +276,20 @@ 			unlessM (liftIO $ doesFileExist f) $ 				void $ removeAssociatedFile key f 	return True++{- Ensures that files whose content is available are in direct mode. -}+verifyDirectMode :: Key -> FilePath -> Annex Bool+verifyDirectMode key file = do+	whenM (isDirect <&&> islink) $ do+		v <- toDirectGen key file+		case v of+			Nothing -> noop+			Just a -> do+				showNote "fixing direct mode"+				a+	return True+  where+	islink = liftIO $ isSymbolicLink <$> getSymbolicLinkStatus file  {- The size of the data for a key is checked against the size encoded in  - the key's metadata, if available.
Command/ReKey.hs view
@@ -7,8 +7,6 @@  module Command.ReKey where -import System.PosixCompat.Files- import Common.Annex import Command import qualified Annex@@ -17,7 +15,6 @@ import qualified Command.Add import Logs.Web import Logs.Location-import Config import Utility.CopyFile  def :: [Command]@@ -49,18 +46,14 @@ 			return True 	next $ cleanup file oldkey newkey -{- Make a hard link to the old key content, to avoid wasting disk space. -}+{- Make a hard link to the old key content (when supported),+ - to avoid wasting disk space. -} linkKey :: Key -> Key -> Annex Bool linkKey oldkey newkey = getViaTmpUnchecked newkey $ \tmp -> do 	src <- calcRepo $ gitAnnexLocation oldkey-	ifM (liftIO $ doesFileExist tmp)+	liftIO $ ifM (doesFileExist tmp) 		( return True-		, ifM crippledFileSystem-			( liftIO $ copyFileExternal src tmp-			, do-				liftIO $ createLink src tmp-				return True-			)+		, createLinkOrCopy src tmp 		)  cleanup :: FilePath -> Key -> Key -> CommandCleanup
Command/Status.hs view
@@ -102,7 +102,6 @@ 	, remote_list Trusted 	, remote_list SemiTrusted 	, remote_list UnTrusted-	, remote_list DeadTrusted 	, transfer_list 	, disk_size 	]
Command/Sync.hs view
@@ -138,7 +138,8 @@  {- The remote probably has both a master and a synced/master branch.  - Which to merge from? Well, the master has whatever latest changes- - were committed, while the synced/master may have changes that some+ - were committed (or pushed changes, if this is a bare remote),+ - while the synced/master may have changes that some  - other remote synced to this remote. So, merge them both. -} mergeRemote :: Remote -> (Maybe Git.Ref) -> CommandCleanup mergeRemote remote b = case b of@@ -163,15 +164,29 @@ 			showOutput 			inRepo $ pushBranch remote branch +{- If the remote is a bare git repository, it's best to push the branch+ - directly to it. On the other hand, if it's not bare, pushing to the+ - checked out branch will fail, and this is why we use the syncBranch.+ -+ - Git offers no way to tell if a remote is bare or not, so both methods+ - are tried.+ -+ - The direct push is likely to spew an ugly error message, so stderr is+ - elided. Since progress is output to stderr too, the sync push is done+ - first, and actually sends the data. Then the direct push is tried,+ - with stderr discarded, to update the branch ref on the remote.+ -} pushBranch :: Remote -> Git.Ref -> Git.Repo -> IO Bool-pushBranch remote branch g =-	Git.Command.runBool+pushBranch remote branch g = tryIO directpush `after` syncpush+  where+	syncpush = Git.Command.runBool (pushparams (refspec branch)) g+	directpush = Git.Command.runQuiet (pushparams (show $ Git.Ref.base branch)) g+	pushparams b = 		[ Param "push" 		, Param $ Remote.name remote 		, Param $ refspec Annex.Branch.name-		, Param $ refspec branch-		] g-  where+		, Param b+		] 	refspec b = concat  		[ show $ Git.Ref.base b 		,  ":"
Command/WebApp.hs view
@@ -20,7 +20,9 @@ import Annex.Environment import Utility.WebApp import Utility.Daemon (checkDaemon)+#ifdef __ANDROID__ import Utility.Env+#endif import Init import qualified Git import qualified Git.Config@@ -155,15 +157,25 @@ 			Annex.eval state $ 				startDaemon True True listenhost $ Just $ 					sendurlback v-	sendurlback v _origout _origerr url _htmlshim = putMVar v url+	sendurlback v _origout _origerr url _htmlshim = do+		recordUrl url+		putMVar v url +recordUrl :: String -> IO ()+#ifdef __ANDROID__+{- The Android app has a menu item that opens the url recorded+ - in this file. -}+recordUrl url = writeFile "/sdcard/git-annex.home/.git-annex-url" url+#else+recordUrl _ = noop+#endif+ openBrowser :: Maybe FilePath -> FilePath -> String -> Maybe Handle -> Maybe Handle -> IO () #ifndef __ANDROID__ openBrowser mcmd htmlshim _realurl outh errh = runbrowser #else openBrowser mcmd htmlshim realurl outh errh = do-	{- The Android app has a menu item that opens this file. -}-	writeFile "/sdcard/git-annex.home/.git-annex-url" url+	recordUrl url 	{- Android's `am` command does not work reliably across the 	 - wide range of Android devices. Intead, FIFO should be set to  	 - the filename of a fifo that we can write the URL to. -}
Config/Files.hs view
@@ -36,7 +36,9 @@ 		createDirectoryIfMissing True (parentDir f) 		viaTmp writeFile f $ unlines $ dirs' -{- Adds a directory to the autostart file. -}+{- Adds a directory to the autostart file. If the directory is already+ - present, it's moved to the top, so it will be used as the default+ - when opening the webapp. -} addAutoStartFile :: FilePath -> IO () addAutoStartFile path = modifyAutoStartFile $ (:) path 
Config/Files.o view

binary file changed (15108 → 13076 bytes)

Git/Command.hs view
@@ -78,7 +78,11 @@ pipeWriteRead :: [CommandParam] -> String -> Repo -> IO String pipeWriteRead params s repo = assertLocal repo $ 	writeReadProcessEnv "git" (toCommand $ gitCommandLine params repo) -		(gitEnv repo) s (Just fileEncoding)+		(gitEnv repo) s (Just adjusthandle)+  where+  	adjusthandle h = do+		fileEncoding h+		hSetNewlineMode h noNewlineTranslation  {- Runs a git command, feeding it input on a handle with an action. -} pipeWrite :: [CommandParam] -> Repo -> (Handle -> IO ()) -> IO ()
Git/HashObject.hs view
@@ -21,6 +21,7 @@ 	[ Param "hash-object" 	, Param "-w" 	, Param "--stdin-paths"+	, Param "--no-filters" 	]  hashObjectStop :: HashObjectHandle -> IO ()@@ -39,4 +40,4 @@ 	pipeWriteRead (map Param params) content repo   where 	subcmd = "hash-object"-	params = [subcmd, "-t", show objtype, "-w", "--stdin"]+	params = [subcmd, "-t", show objtype, "-w", "--stdin", "--no-filters"]
Init.hs view
@@ -140,8 +140,6 @@ 	probe f = catchBoolIO $ do 		let f2 = f ++ "2" 		nukeFile f2-		createLink f f2-		nukeFile f2 		createSymbolicLink f f2 		nukeFile f2 		preventWrite f@@ -162,15 +160,16 @@ 		setConfig (ConfigKey "core.symlinks") 			(Git.Config.boolConfig False) -	unlessM isDirect $ do-		warning "Enabling direct mode."-		top <- fromRepo Git.repoPath-		(l, clean) <- inRepo $ Git.LsFiles.inRepo [top]-		forM_ l $ \f ->-			maybe noop (`toDirect` f) =<< isAnnexLink f-		void $ liftIO clean-		setDirect True-	setVersion directModeVersion+	unlessBare $ do+		unlessM isDirect $ do+			warning "Enabling direct mode."+			top <- fromRepo Git.repoPath+			(l, clean) <- inRepo $ Git.LsFiles.inRepo [top]+			forM_ l $ \f ->+				maybe noop (`toDirect` f) =<< isAnnexLink f+			void $ liftIO clean+			setDirect True+		setVersion directModeVersion  probeFifoSupport :: Annex Bool probeFifoSupport = do
+ Locations/UserConfig.o view

binary file changed (absent → 21632 bytes)

Makefile view
@@ -50,7 +50,7 @@ test: git-annex 	./git-annex test -# hothasktags chokes on some tempolate haskell etc, so ignore errors+# hothasktags chokes on some template haskell etc, so ignore errors tags: 	find . | grep -v /.git/ | grep -v /tmp/ | grep -v /dist/ | grep -v /doc/ | egrep '\.hs$$' | xargs hothasktags > tags 2>/dev/null 
Messages.hs view
@@ -31,7 +31,9 @@ 	showCustom, 	showHeader, 	showRaw,-	setupConsole+	setupConsole,+	enableDebugOutput,+	disableDebugOutput ) where  import Text.JSON@@ -219,6 +221,12 @@ 	 - filenames when printing them out. -} 	fileEncoding stdout 	fileEncoding stderr++enableDebugOutput :: IO ()+enableDebugOutput = updateGlobalLogger rootLoggerName $ setLevel DEBUG++disableDebugOutput :: IO ()+disableDebugOutput = updateGlobalLogger rootLoggerName $ setLevel NOTICE  handle :: IO () -> IO () -> Annex () handle json normal = withOutputType go
Option.hs view
@@ -16,7 +16,6 @@ ) where  import System.Console.GetOpt-import System.Log.Logger  import Common.Annex import qualified Annex@@ -40,6 +39,8 @@ 		"enable JSON output" 	, Option ['d'] ["debug"] (NoArg setdebug) 		"show debug messages"+	, Option [] ["no-debug"] (NoArg unsetdebug)+		"don't show debug messages" 	, Option ['b'] ["backend"] (ReqArg setforcebackend paramName) 		"specify key-value backend to use" 	]@@ -48,7 +49,8 @@ 	setfast v = Annex.changeState $ \s -> s { Annex.fast = v } 	setauto v = Annex.changeState $ \s -> s { Annex.auto = v } 	setforcebackend v = Annex.changeState $ \s -> s { Annex.forcebackend = Just v }-	setdebug = liftIO $ updateGlobalLogger rootLoggerName $ setLevel DEBUG+	setdebug = Annex.changeGitConfig $ \c -> c { annexDebug = True }+	unsetdebug = Annex.changeGitConfig $ \c -> c { annexDebug = False }  matcher :: [Option] matcher =
Remote/Bup.hs view
@@ -217,10 +217,13 @@  onBupRemote :: Git.Repo -> (FilePath -> [CommandParam] -> IO a) -> FilePath -> [CommandParam] -> Annex a onBupRemote r a command params = do-	let dir = shellEscape (Git.repoPath r) 	sshparams <- sshToRepo r [Param $ 			"cd " ++ dir ++ " && " ++ unwords (command : toCommand params)] 	liftIO $ a "ssh" sshparams+  where+	path = Git.repoPath r+	base = fromMaybe path (stripPrefix "/~/" path)+	dir = shellEscape base  {- Allow for bup repositories on removable media by checking  - local bup repositories to see if they are available, and getting their
Remote/Glacier.hs view
@@ -195,14 +195,12 @@ 		, Param $ archive r k 		] -	untrusted = do-		showLongNote $ unlines+	untrusted = return $ Left $ unlines 			[ "Glacier's inventory says it has a copy." 			, "However, the inventory could be out of date, if it was recently removed." 			, "(Use --trust-glacier if you're sure it's still in Glacier.)" 			, "" 			]-		return $ Right False  glacierAction :: Remote -> [CommandParam] -> Annex Bool glacierAction r params = runGlacier (config r) (uuid r) params
Remote/Rsync.hs view
@@ -264,7 +264,7 @@  -  - This would not be necessary if the hash directory structure used locally  - was always the same as that used on the rsync remote. So if that's ever- - unified, this gets nicer. Especially in the crippled filesystem case.+ - unified, this gets nicer.  - (When we have the right hash directory structure, we can just  - pass --include=X --include=X/Y --include=X/Y/file --exclude=*)  -}@@ -272,20 +272,11 @@ rsyncSend o callback k canrename src = withRsyncScratchDir $ \tmp -> do 	let dest = tmp </> Prelude.head (keyPaths k) 	liftIO $ createDirectoryIfMissing True $ parentDir dest-	ok <- if canrename+	ok <- liftIO $ if canrename 		then do-			liftIO $ renameFile src dest+			renameFile src dest 			return True-		else ifM crippledFileSystem-			( liftIO $ copyFileExternal src dest-			, do-#ifndef __WINDOWS__-				liftIO $ createLink src dest-				return True-#else-				liftIO $ copyFileExternal src dest-#endif-			)+		else createLinkOrCopy src dest 	ps <- sendParams 	if ok 		then rsyncRemote o (Just callback) $ ps ++
Setup.o view

binary file changed (10440 → 10440 bytes)

Test.hs view
@@ -75,7 +75,12 @@ 	putStrLn "  (Do not be alarmed by odd output here; it's normal."         putStrLn "   wait for the last line to see how it went.)" 	rs <- runhunit =<< prepare False+#ifndef __WINDOWS__ 	directrs <- runhunit =<< prepare True+#else+	-- Windows is only going to use direct mode, so don't test twice.+	let directrs = []+#endif 	divider 	propigate (rs++directrs) qcok   where@@ -212,12 +217,15 @@ 		annexed_present sha1annexedfile 	subdirs = TestCase $ intmpclonerepo env $ do 		createDirectory "dir"-		writeFile "dir/foo" $ content annexedfile+		writeFile ("dir" </> "foo") $ content annexedfile 		git_annex env "add" ["dir"] @? "add of subdir failed" 		createDirectory "dir2"-		writeFile "dir2/foo" $ content annexedfile+		writeFile ("dir2" </> "foo") $ content annexedfile+#ifndef __WINDOWS__+		{- This does not work on Windows, for whatever reason. -} 		setCurrentDirectory "dir"-		git_annex env "add" ["../dir2"] @? "add of ../subdir failed"+		git_annex env "add" [".." </> "dir2"] @? "add of ../subdir failed"+#endif  test_reinject :: TestEnv -> Test test_reinject env = "git-annex reinject/fromkey" ~: TestCase $ intmpclonerepoInDirect env $ do@@ -634,7 +642,14 @@  test_sync :: TestEnv -> Test test_sync env = "git-annex sync" ~: intmpclonerepo env $ do+{- For unknown reasons, running sync in the test suite on Windows+ - fails with what looks like PATH errors. sync works outside+ - the test suite though. TODO -}+#ifndef __WINDOWS__ 	git_annex env "sync" [] @? "sync failed"+#else+	noop+#endif  {- Regression test for union merge bug fixed in  - 0214e0fb175a608a49b812d81b4632c081f63027 -}@@ -653,6 +668,7 @@ 						boolSystem "git" [Params "remote add r3", File ("../../" ++ r3)] @? "remote add" 					git_annex env "get" [annexedfile] @? "get failed" 					boolSystem "git" [Params "remote rm origin"] @? "remote rm"+#ifndef __WINDOWS__ 				forM_ [r3, r2, r1] $ \r -> indir env r $ 					git_annex env "sync" [] @? "sync failed" 				forM_ [r3, r2] $ \r -> indir env r $@@ -664,6 +680,7 @@ 					 - mangled location log data and it 					 - thought the file was still in r2 -} 					git_annex_expectoutput env "find" ["--in", "r2"] []+#endif  {- Regression test for the automatic conflict resolution bug fixed  - in f4ba19f2b8a76a1676da7bb5850baa40d9c388e2. -}@@ -692,6 +709,7 @@ 						git_annex env "unlock" [annexedfile] @? "unlock failed"		 						writeFile annexedfile newcontent 					)+#ifndef __WINDOWS__ 			{- Sync twice in r1 so it gets the conflict resolution 			 - update from r2 -} 			forM_ [r1, r2, r1] $ \r -> indir env r $ do@@ -705,6 +723,7 @@ 			 - been put in it. -} 			forM_ [r1, r2] $ \r -> indir env r $ do 			 	git_annex env "get" [] @? "unable to get all files after merge conflict resolution in " ++ rname r+#endif  test_map :: TestEnv -> Test test_map env = "git-annex map" ~: intmpclonerepo env $ do@@ -742,6 +761,7 @@  test_hook_remote :: TestEnv -> Test test_hook_remote env = "git-annex hook remote" ~: intmpclonerepo env $ do+#ifndef __WINDOWS__ 	git_annex env "initremote" (words "foo type=hook encryption=none hooktype=foo") @? "initremote failed" 	createDirectory dir 	git_config "annex.foo-store-hook" $@@ -767,6 +787,10 @@ 	loc = dir ++ "/$ANNEX_KEY" 	git_config k v = boolSystem "git" [Param "config", Param k, Param v] 		@? "git config failed"+#else+	-- this test doesn't work in Windows TODO+	noop+#endif  test_directory_remote :: TestEnv -> Test test_directory_remote env = "git-annex directory remote" ~: intmpclonerepo env $ do@@ -778,13 +802,17 @@ 	annexed_present annexedfile 	git_annex env "drop" [annexedfile, "--numcopies=2"] @? "drop failed" 	annexed_notpresent annexedfile+#ifndef __WINDOWS__+	-- moving from directory special remote fails on Windows TODO 	git_annex env "move" [annexedfile, "--from", "foo"] @? "move --from directory remote failed" 	annexed_present annexedfile 	not <$> git_annex env "drop" [annexedfile, "--numcopies=2"] @? "drop failed to fail" 	annexed_present annexedfile+#endif  test_rsync_remote :: TestEnv -> Test test_rsync_remote env = "git-annex rsync remote" ~: intmpclonerepo env $ do+#ifndef __WINDOWS__ 	createDirectory "dir" 	git_annex env "initremote" (words $ "foo type=rsync encryption=none rsyncurl=dir") @? "initremote failed" 	git_annex env "get" [annexedfile] @? "get of file failed"@@ -797,6 +825,10 @@ 	annexed_present annexedfile 	not <$> git_annex env "drop" [annexedfile, "--numcopies=2"] @? "drop failed to fail" 	annexed_present annexedfile+#else+	-- this test doesn't work in Windows TODO+	noop+#endif  test_bup_remote :: TestEnv -> Test test_bup_remote env = "git-annex bup remote" ~: intmpclonerepo env $ when Build.SysConfig.bup $ do@@ -978,7 +1010,8 @@ 		recurseDir SystemFS dir >>= 			filterM doesDirectoryExist >>= 				mapM_ Utility.FileMode.allowWrite-		removeDirectoryRecursive dir+		-- For unknown reasons, this sometimes fails on Windows.+		void $ tryIO $ removeDirectoryRecursive dir 	 checklink :: FilePath -> Assertion checklink f = do@@ -1102,13 +1135,13 @@ tmpdir = ".t"  mainrepodir :: FilePath-mainrepodir = tmpdir ++ "/repo"+mainrepodir = tmpdir </> "repo"  tmprepodir :: IO FilePath tmprepodir = go (0 :: Int)   where 	go n = do-		let d = tmpdir ++ "/tmprepo" ++ show n+		let d = tmpdir </> "tmprepo" ++ show n 		ifM (doesDirectoryExist d) 			( go $ n + 1 			, return d
Types/GitConfig.hs view
@@ -35,6 +35,7 @@ 	, annexHttpHeaders :: [String] 	, annexHttpHeadersCommand :: Maybe String 	, annexAutoCommit :: Bool+	, annexDebug :: Bool 	, annexWebOptions :: [String] 	, annexWebDownloadCommand :: Maybe String 	, annexCrippledFileSystem :: Bool@@ -59,6 +60,7 @@ 	, annexHttpHeaders = getlist (annex "http-headers") 	, annexHttpHeadersCommand = getmaybe (annex "http-headers-command") 	, annexAutoCommit = getbool (annex "autocommit") True+	, annexDebug = getbool (annex "debug") False 	, annexWebOptions = getwords (annex "web-options") 	, annexWebDownloadCommand = getmaybe (annex "web-download-command") 	, annexCrippledFileSystem = getbool (annex "crippledfilesystem") False
Utility/Applicative.o view

binary file changed (1308 → 1308 bytes)

+ Utility/Batch.hs view
@@ -0,0 +1,40 @@+{- Running a long or expensive batch operation niced.+ -+ - Copyright 2013 Joey Hess <joey@kitenet.net>+ -+ - Licensed under the GNU GPL version 3 or higher.+ -}++{-# LANGUAGE CPP #-}++module Utility.Batch where++#if defined(linux_HOST_OS) || defined(__ANDROID__)+import Control.Concurrent.Async+import System.Posix.Process+#endif++{- Runs an operation, at batch priority.+ -+ - This is done by running it in a bound thread, which on Linux can be set+ - to have a different nice level than the rest of the program. Note that+ - due to running in a bound thread, some operations may be more expensive+ - to perform. Also note that if the action calls forkIO or forkOS itself,+ - that will make a new thread that does not have the batch priority.+ -+ - POSIX threads do not support separate nice levels, so on other operating+ - systems, the action is simply ran.+ -}+batch :: IO a -> IO a+#if defined(linux_HOST_OS) || defined(__ANDROID__)+batch a = wait =<< batchthread+  where+  	batchthread = asyncBound $ do+		setProcessPriority 0 maxNice+		a+#else+batch a = a+#endif++maxNice :: Int+maxNice = 19
Utility/CoProcess.hs view
@@ -43,7 +43,7 @@  start' :: CoProcessSpec -> IO CoProcessState start' s = do-	(to, from, _err, pid) <- runInteractiveProcess (coProcessCmd s) (coProcessParams s) Nothing (coProcessEnv s)+	(pid, from, to) <- startInteractiveProcess (coProcessCmd s) (coProcessParams s) (coProcessEnv s) 	return $ CoProcessState pid to from s  stop :: CoProcessHandle -> IO ()
Utility/CopyFile.hs view
@@ -1,12 +1,17 @@-{- git-annex file copying+{- file copying  -- - Copyright 2010,2012 Joey Hess <joey@kitenet.net>+ - Copyright 2010-2013 Joey Hess <joey@kitenet.net>  -  - Licensed under the GNU GPL version 3 or higher.  -} -module Utility.CopyFile (copyFileExternal) where+{-# LANGUAGE CPP #-} +module Utility.CopyFile (+	copyFileExternal,+	createLinkOrCopy+) where+ import Common import qualified Build.SysConfig as SysConfig @@ -18,8 +23,26 @@ 		removeFile dest 	boolSystem "cp" $ params ++ [File src, File dest]   where+#ifndef __ANDROID__ 	params = map snd $ filter fst 		[ (SysConfig.cp_reflink_auto, Param "--reflink=auto") 		, (SysConfig.cp_a, Param "-a") 		, (SysConfig.cp_p && not SysConfig.cp_a, Param "-p") 		]+#else+	params = []+#endif++{- Create a hard link if the filesystem allows it, and fall back to copying+ - the file. -}+createLinkOrCopy :: FilePath -> FilePath -> IO Bool+#ifndef __WINDOWS__+createLinkOrCopy src dest = go `catchIO` const fallback+  where+  	go = do+		createLink src dest+		return True+  	fallback = copyFileExternal src dest+#else+createLinkOrCopy = copyFileExternal+#endif
− Utility/CopyFile.o

binary file changed (5528 → absent bytes)

Utility/Directory.o view

binary file changed (15500 → 15324 bytes)

− Utility/Env.o

binary file changed (3664 → absent bytes)

Utility/Exception.hs view
@@ -9,8 +9,8 @@  module Utility.Exception where -import Prelude hiding (catch) import Control.Exception+import qualified Control.Exception as E import Control.Applicative import Control.Monad import System.IO.Error (isDoesNotExistError)@@ -33,7 +33,7 @@  {- catch specialized for IO errors only -} catchIO :: IO a -> (IOException -> IO a) -> IO a-catchIO = catch+catchIO = E.catch  {- try specialized for IO errors only -} tryIO :: IO a -> IO (Either IOException a)
Utility/Exception.o view

binary file changed (8648 → 7228 bytes)

− Utility/ExternalSHA.o

binary file changed (11768 → absent bytes)

Utility/FileSystemEncoding.o view

binary file changed (5672 → 5668 bytes)

Utility/FreeDesktop.o view

binary file changed (21064 → 21064 bytes)

Utility/INotify.hs view
@@ -90,15 +90,21 @@ 				| otherwise -> 					noop -	-- Ignore creation events for regular files, which won't be-	-- done being written when initially created, but handle for-	-- directories and symlinks. 	go (Created { isDirectory = isd, filePath = f }) 		| isd = recurse $ indir f-		| hashook addSymlinkHook =-			checkfiletype Files.isSymbolicLink addSymlinkHook f-		| otherwise = noop-	-- Closing a file is assumed to mean it's done being written.+		| otherwise = do+			ms <- getstatus f+			case ms of+				Just s+					| Files.isSymbolicLink s -> +						when (hashook addSymlinkHook) $+							runhook addSymlinkHook f ms+					| Files.isRegularFile s ->+						when (hashook addHook) $+							runhook addHook f ms+				_ -> noop+	-- Closing a file is assumed to mean it's done being written,+	-- so a new add event is sent. 	go (Closed { isDirectory = False, maybeFilePath = Just f }) = 			checkfiletype Files.isRegularFile addHook f 	-- When a file or directory is moved in, scan it to add new
Utility/Misc.o view

binary file changed (19232 → 19232 bytes)

Utility/Monad.hs view
@@ -27,6 +27,10 @@ anyM :: Monad m => (a -> m Bool) -> [a] -> m Bool anyM p = liftM isJust . firstM p +allM :: Monad m => (a -> m Bool) -> [a] -> m Bool+allM _ [] = return True+allM p (x:xs) = p x <&&> allM p xs+ {- Runs an action on values from a list until it succeeds. -} untilTrue :: Monad m => [a] -> (a -> m Bool) -> m Bool untilTrue = flip anyM
Utility/Monad.o view

binary file changed (7376 → 7376 bytes)

Utility/Mounts.hsc view
@@ -20,8 +20,6 @@ import Control.Monad import Foreign import Foreign.C-import GHC.IO hiding (finally, bracket)-import Prelude hiding (catch) #include "libmounts.h" #else import Utility.Exception
Utility/OSX.o view

binary file changed (8808 → 8808 bytes)

Utility/PartialPrelude.o view

binary file changed (5448 → 5456 bytes)

Utility/Path.hs view
@@ -131,7 +131,9 @@ 	 - location, but it's not really the same directory. 	 - Code used to get this wrong. -} 	same_dir_shortcurcuits_at_difference =-		relPathDirToFile "/tmp/r/lll/xxx/yyy/18" "/tmp/r/.git/annex/objects/18/gk/SHA256-foo/SHA256-foo" == "../../../../.git/annex/objects/18/gk/SHA256-foo/SHA256-foo"+		relPathDirToFile (joinPath [pathSeparator : "tmp", "r", "lll", "xxx", "yyy", "18"])+			(joinPath [pathSeparator : "tmp", "r", ".git", "annex", "objects", "18", "gk", "SHA256-foo", "SHA256-foo"])+				== joinPath ["..", "..", "..", "..", ".git", "annex", "objects", "18", "gk", "SHA256-foo", "SHA256-foo"]  {- Given an original list of paths, and an expanded list derived from it,  - generates a list of lists, where each sublist corresponds to one of the
Utility/Path.o view

binary file changed (24540 → 23740 bytes)

Utility/Process.hs view
@@ -26,7 +26,7 @@ 	withBothHandles, 	withQuietOutput, 	createProcess,-	runInteractiveProcess,+	startInteractiveProcess, 	stdinHandle, 	stdoutHandle, 	stderrHandle,@@ -34,7 +34,7 @@  import qualified System.Process import System.Process as X hiding (CreateProcess(..), createProcess, runInteractiveProcess, readProcess, readProcessWithExitCode, system, rawSystem, runInteractiveCommand, runProcess)-import System.Process hiding (createProcess, runInteractiveProcess, readProcess)+import System.Process hiding (createProcess, readProcess) import System.Exit import System.IO import System.Log.Logger@@ -241,12 +241,18 @@ 	:: CreateProcessRunner 	-> CreateProcess 	-> IO ()-withQuietOutput creator p = withFile "/dev/null" WriteMode $ \devnull -> do+withQuietOutput creator p = withFile devnull WriteMode $ \nullh -> do 	let p' = p-		{ std_out = UseHandle devnull-		, std_err = UseHandle devnull+		{ std_out = UseHandle nullh+		, std_err = UseHandle nullh 		} 	creator p' $ const $ return ()+  where+#ifndef mingw32_HOST_OS+	devnull = "/dev/null"+#else+	devnull = "NUL"+#endif  {- Extract a desired handle from createProcess's tuple.  - These partial functions are safe as long as createProcess is run@@ -300,17 +306,19 @@ 	debugProcess p 	System.Process.createProcess p -runInteractiveProcess-	:: FilePath	-	-> [String]	-	-> Maybe FilePath	-	-> Maybe [(String, String)]	-	-> IO (Handle, Handle, Handle, ProcessHandle)-runInteractiveProcess f args c e = do-	debugProcess $ (proc f args)-			{ std_in = CreatePipe-			, std_out = CreatePipe-			, std_err = CreatePipe-			, env = e-			}-	System.Process.runInteractiveProcess f args c e+{- Starts an interactive process. Unlike runInteractiveProcess in+ - System.Process, stderr is inherited. -}+startInteractiveProcess+	:: FilePath+	-> [String]+	-> Maybe [(String, String)]+	-> IO (ProcessHandle, Handle, Handle)+startInteractiveProcess cmd args environ = do+	let p = (proc cmd args)+		{ std_in = CreatePipe+		, std_out = CreatePipe+		, std_err = Inherit+		, env = environ+		}+	(Just from, Just to, _, pid) <- createProcess p+	return (pid, to, from)
Utility/Process.o view

binary file changed (43288 → 42568 bytes)

Utility/SafeCommand.o view

binary file changed (28136 → 28136 bytes)

+ Utility/TempFile.o view

binary file changed (absent → 11404 bytes)

− Utility/Tmp.o

binary file changed (12272 → absent bytes)

Utility/UserInfo.o view

binary file changed (6304 → 6328 bytes)

Utility/WebApp.hs view
@@ -178,7 +178,11 @@  {- Rather than storing a session key on disk, use a random key  - that will only be valid for this run of the webapp. -}+#if MIN_VERSION_yesod(1,2,0)+webAppSessionBackend :: Yesod.Yesod y => y -> IO (Maybe Yesod.SessionBackend)+#else webAppSessionBackend :: Yesod.Yesod y => y -> IO (Maybe (Yesod.SessionBackend y))+#endif webAppSessionBackend _ = do 	g <- newGenIO :: IO SystemRandom 	case genBytes 96 g of@@ -189,6 +193,10 @@   where 	timeout = 120 * 60 -- 120 minutes 	use key =+#if MIN_VERSION_yesod(1,2,0)+		Just . Yesod.clientSessionBackend key . fst+			<$> Yesod.clientSessionDateCacher timeout+#else #if MIN_VERSION_yesod(1,1,7) 		Just . Yesod.clientSessionBackend2 key . fst 			<$> Yesod.clientSessionDateCacher timeout@@ -196,6 +204,7 @@ 		return $ Just $ 			Yesod.clientSessionBackend key timeout #endif+#endif  {- Generates a random sha512 string, suitable to be used for an  - authentication secret. -}@@ -213,7 +222,11 @@  - Note that the usual Yesod error page is bypassed on error, to avoid  - possibly leaking the auth token in urls on that page!  -}+#if MIN_VERSION_yesod(1,2,0)+checkAuthToken :: (Monad m, Yesod.MonadHandler m) => (Yesod.HandlerSite m -> T.Text) -> m Yesod.AuthResult+#else checkAuthToken :: forall t sub. (t -> T.Text) -> Yesod.GHandler sub t Yesod.AuthResult+#endif checkAuthToken extractToken = do 	webapp <- Yesod.getYesod 	req <- Yesod.getRequest
Utility/Yesod.hs view
@@ -1,20 +1,37 @@ {- Yesod stuff, that's typically found in the scaffolded site.  -- - Copyright 2012 Joey Hess <joey@kitenet.net>+ - Also a bit of a compatability layer to make it easier to support yesod+ - 1.1 and 1.2 in the same code base.  -+ - Copyright 2012, 2013 Joey Hess <joey@kitenet.net>+ -  - Licensed under the GNU GPL version 3 or higher.  -} -{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP, RankNTypes, FlexibleContexts #-} -module Utility.Yesod where+module Utility.Yesod +	( module Y+	, widgetFile+	, hamletTemplate+	, liftH+#if ! MIN_VERSION_yesod(1,2,0)+	, giveUrlRenderer+	, Html+#endif+	) where +#if MIN_VERSION_yesod(1,2,0)+import Yesod as Y+#else+import Yesod as Y hiding (Html)+#endif #ifndef __ANDROID__ import Yesod.Default.Util-import Language.Haskell.TH.Syntax+import Language.Haskell.TH.Syntax (Q, Exp) #if MIN_VERSION_yesod_default(1,1,0) import Data.Default (def)-import Text.Hamlet+import Text.Hamlet hiding (Html) #endif  widgetFile :: String -> Q Exp@@ -30,4 +47,21 @@  hamletTemplate :: FilePath -> FilePath hamletTemplate f = globFile "hamlet" f+#endif++{- Lift Handler to Widget -}+#if MIN_VERSION_yesod(1,2,0)+liftH :: Monad m => HandlerT site m a -> WidgetT site m a+liftH = handlerToWidget+#else+liftH :: MonadLift base m => base a -> m a+liftH = lift+#endif++{- Misc new names for stuff. -}+#if ! MIN_VERSION_yesod(1,2,0)+giveUrlRenderer :: forall master sub. HtmlUrl (Route master) -> GHandler sub master RepHtml+giveUrlRenderer = hamletToRepHtml++type Html = RepHtml #endif
debian/changelog view
@@ -1,3 +1,66 @@+git-annex (4.20130627) unstable; urgency=low++  * assistant --autostart: Automatically ionices the daemons it starts.+  * assistant: Daily sanity check thread is run niced.+  * bup: Handle /~/ in bup remote paths.+    Thanks, Oliver Matthews+  * fsck: Ensures that direct mode is used for files when it's enabled.+  * webapp: Fix bug when setting up a remote ssh repo repeatedly on the same+    server.+  * webapp: Ensure that ssh keys generated for different directories+    on a server are always different.+  * webapp: Fix bug setting up ssh repo if the user enters "~/" at the start +    of the path.+  * assistant: Fix bug that prevented adding files written by gnucash, +    and more generally support adding hard links to files. However,+    other operations on hard links are still unsupported.+  * webapp: Fix bug that caused the webapp to hang when built with yesod 1.2.++ -- Joey Hess <joeyh@debian.org>  Thu, 27 Jun 2013 14:21:55 -0400++git-annex (4.20130621) unstable; urgency=low++  * Supports indirect mode on encfs in paranoia mode, and other+    filesystems that do not support hard links, but do support+    symlinks and other POSIX filesystem features.+  * Android: Add .thumbnails to .gitignore when setting up a camera+    repository.+  * Android: Make the "Open webapp" menu item open the just created+    repository when a new repo is made.+  * webapp: When the user switches to display a different repository,+    that repository becomes the default repository to be displayed next time+    the webapp gets started.+  * glacier: Better handling of the glacier inventory, which avoids+    duplicate uploads to the same glacier repository by `git annex copy`.+  * Direct mode: No longer temporarily remove write permission bit of files+    when adding them.+  * sync: Better support for bare git remotes. Now pushes directly to the+    master branch on such a remote, instead of to synced/master. This+    makes it easier to clone from a bare git remote that has been populated+    with git annex sync or by the assistant.+  * Android: Fix use of cp command to not try to use features present+    only on build system.+  * Windows: Fix hang when adding several files at once.+  * assistant: In direct mode, objects are now only dropped when all+    associated files are unwanted. This avoids a repreated drop/get loop+    of a file that has a copy in an archive directory, and a copy not in an+    archive directory. (Indirect mode still has some buggy behavior in this+    area, since it does not keep track of associated files.)+    Closes: #712060+  * status: No longer shows dead repositories.+  * annex.debug can now be set to enable debug logging by default.+    The webapp's debugging check box does this.+  * fsck: Avoid getting confused by Windows path separators+  * Windows: Multiple bug fixes, including fixing the data written to the+    git-annex branch.+  * Windows: The test suite now passes on Windows (a few broken parts are+    disabled).+  * assistant: On Linux, the expensive transfer scan is run niced.+  * Enable assistant and WebDAV support on powerpc and sparc architectures,+    which now have the necessary dependencies built.++ -- Joey Hess <joeyh@debian.org>  Fri, 21 Jun 2013 10:18:41 -0400+ git-annex (4.20130601) unstable; urgency=medium    * XMPP: Git push over xmpp made much more robust.
debian/control view
@@ -13,7 +13,7 @@ 	libghc-dataenc-dev, 	libghc-utf8-string-dev, 	libghc-hs3-dev (>= 0.5.6),-	libghc-dav-dev (>= 0.3) [amd64 i386 kfreebsd-amd64 kfreebsd-i386 sparc],+	libghc-dav-dev (>= 0.3) [amd64 i386 kfreebsd-amd64 kfreebsd-i386 powerpc sparc], 	libghc-quickcheck2-dev, 	libghc-monad-control-dev (>= 0.3), 	libghc-monadcatchio-transformers-dev,@@ -28,14 +28,14 @@ 	libghc-hinotify-dev [linux-any], 	libghc-stm-dev (>= 2.3), 	libghc-dbus-dev (>= 0.10.3) [linux-any],-	libghc-yesod-dev [i386 amd64 kfreebsd-i386 kfreebsd-amd64],-	libghc-yesod-static-dev [i386 amd64 kfreebsd-i386 kfreebsd-amd64],-	libghc-yesod-default-dev [i386 amd64 kfreebsd-amd64],-	libghc-hamlet-dev [i386 amd64 kfreebsd-i386 kfreebsd-amd64],-	libghc-clientsession-dev [i386 amd64 kfreebsd-i386 kfreebsd-amd64],-	libghc-warp-dev [i386 amd64 kfreebsd-i386 kfreebsd-amd64],-	libghc-wai-dev [i386 amd64 kfreebsd-i386 kfreebsd-amd64],-	libghc-wai-logger-dev [i386 amd64 kfreebsd-i386 kfreebsd-amd64],+	libghc-yesod-dev [i386 amd64 kfreebsd-i386 kfreebsd-amd64 powerpc sparc],+	libghc-yesod-static-dev [i386 amd64 kfreebsd-i386 kfreebsd-amd64 powerpc sparc],+	libghc-yesod-default-dev [i386 amd64 kfreebsd-amd64 powerpc sparc],+	libghc-hamlet-dev [i386 amd64 kfreebsd-i386 kfreebsd-amd64 powerpc sparc],+	libghc-clientsession-dev [i386 amd64 kfreebsd-i386 kfreebsd-amd64 powerpc sparc],+	libghc-warp-dev [i386 amd64 kfreebsd-i386 kfreebsd-amd64 powerpc sparc],+	libghc-wai-dev [i386 amd64 kfreebsd-i386 kfreebsd-amd64 powerpc sparc],+	libghc-wai-logger-dev [i386 amd64 kfreebsd-i386 kfreebsd-amd64 powerpc sparc], 	libghc-case-insensitive-dev, 	libghc-http-types-dev, 	libghc-blaze-builder-dev,@@ -56,7 +56,7 @@ 	curl, 	openssh-client, Maintainer: Joey Hess <joeyh@debian.org>-Standards-Version: 3.9.3+Standards-Version: 3.9.4 Vcs-Git: git://git.kitenet.net/git-annex Homepage: http://git-annex.branchable.com/ 
+ debian/files view
@@ -0,0 +1,1 @@+git-annex_4.20130501~bpo70+1_i386.deb utils optional
+ debian/git-annex.debhelper.log view
@@ -0,0 +1,47 @@+dh_auto_configure+dh_auto_build+dh_auto_test+dh_prep+dh_installdirs+dh_auto_install+dh_install+dh_installdocs+dh_installchangelogs+dh_installexamples+dh_installman+dh_installcatalogs+dh_installcron+dh_installdebconf+dh_installemacsen+dh_installifupdown+dh_installinfo+dh_installinit+dh_installmenu+dh_installmime+dh_installmodules+dh_installlogcheck+dh_installlogrotate+dh_installpam+dh_installppp+dh_installudev+dh_installwm+dh_installxfonts+dh_installgsettings+dh_bugfiles+dh_ucf+dh_lintian+dh_gconf+dh_icons+dh_perl+dh_usrlocal+dh_link+dh_compress+dh_fixperms+dh_strip+dh_makeshlibs+dh_shlibdeps+dh_installdeb+dh_gencontrol+dh_md5sums+dh_builddeb+dh_builddeb
+ debian/git-annex.substvars view
@@ -0,0 +1,2 @@+shlibs:Depends=libc6 (>= 2.3.6-6~), libc6 (>= 2.7), libffi5 (>= 3.0.4), libgmp10, libgnutls26 (>= 2.12.17-0), libgsasl7 (>= 1.4), libidn11 (>= 1.13), libxml2 (>= 2.7.4), libyaml-0-2, zlib1g (>= 1:1.1.4)+misc:Depends=
+ debian/git-annex/DEBIAN/conffiles view
@@ -0,0 +1,1 @@+/etc/xdg/autostart/git-annex.desktop
+ debian/git-annex/DEBIAN/control view
@@ -0,0 +1,24 @@+Package: git-annex+Version: 4.20130501~bpo70+1+Architecture: i386+Maintainer: Joey Hess <joeyh@debian.org>+Installed-Size: 33901+Depends: libc6 (>= 2.7), libffi5 (>= 3.0.4), libgmp10, libgnutls26 (>= 2.12.17-0), libgsasl7 (>= 1.4), libidn11 (>= 1.13), libxml2 (>= 2.7.4), libyaml-0-2, zlib1g (>= 1:1.1.4), git (>= 1:1.7.7.6), rsync, wget, curl, openssh-client (>= 1:5.6p1)+Recommends: lsof, gnupg, bind9-host+Suggests: graphviz, bup, libnss-mdns+Section: utils+Priority: optional+Homepage: http://git-annex.branchable.com/+Description: manage files with git, without checking their contents into git+ 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, time, or disk space.+ .+ Even without file content tracking, being able to manage files with git,+ move files around and delete files with versioned directory trees, and use+ branches and distributed clones, are all very handy reasons to use git. And+ annexed files can co-exist in the same git repository with regularly+ versioned files, which is convenient for maintaining documents, Makefiles,+ etc that are associated with annexed files but that benefit from full+ revision control.
+ debian/git-annex/DEBIAN/md5sums view
@@ -0,0 +1,232 @@+de541a7dde3855a51ed868c8863a7ef3  usr/bin/git-annex+938c1214dca79e4e9a876a7b52504dd8  usr/share/applications/git-annex.desktop+2ef419c4a13022ede5561da5b1914f62  usr/share/doc-base/git-annex+008556d24900b7f08cfeea8da49cd464  usr/share/doc/git-annex/NEWS.Debian.gz+03d9278f03320319db5f95f0376023e6  usr/share/doc/git-annex/changelog.gz+dfc4775bd2a7d941b819e734ec9b7e73  usr/share/doc/git-annex/copyright+685b88e3fc5b468399c86462027cc3dd  usr/share/doc/git-annex/html/assistant.html+6713a86e655998384c46fb7460988b57  usr/share/doc/git-annex/html/assistant/addsshserver.png+ebcfa646439b9df0b54cb7bd31ae20ec  usr/share/doc/git-annex/html/assistant/android/appinstalled.png+9fd3bdafbdc2f5d4266bd313f9b655e8  usr/share/doc/git-annex/html/assistant/android/install.png+e2677873f5ac5d5c97e82e361aca711a  usr/share/doc/git-annex/html/assistant/android/terminal.png+163a4e32f8a84b937607c2a8ac649793  usr/share/doc/git-annex/html/assistant/archival_walkthrough.html+07f39d17b252a39776f1bd2dbd9cda90  usr/share/doc/git-annex/html/assistant/buddylist.png+cb7d4d4757a8e6989a77a843e4f867d2  usr/share/doc/git-annex/html/assistant/cloudnudge.png+e8ca3cd2f32161a83ac41bdcd93fdd56  usr/share/doc/git-annex/html/assistant/combinerepos.png+5013fbf9e1bf92e53a1e70bfcc2b222f  usr/share/doc/git-annex/html/assistant/controlmenu.png+95ce2bd3ae2466242e470396a99b096a  usr/share/doc/git-annex/html/assistant/crashrecovery.png+3494483bd7625aad928c02dbd75507f4  usr/share/doc/git-annex/html/assistant/dashboard.png+a1518dea95aab7eac446bb3d64f7f024  usr/share/doc/git-annex/html/assistant/deleterepository.png+4e6daf0f77faf92c456f93431e0dad32  usr/share/doc/git-annex/html/assistant/example.png+0ad9c7659d23eddbd5bb190a067e165c  usr/share/doc/git-annex/html/assistant/iaitem.png+3f599d408676ea4ccd1ee886f31d43ff  usr/share/doc/git-annex/html/assistant/inotify_max_limit_alert.png+7a997d502b767e61e20e0b32074378f7  usr/share/doc/git-annex/html/assistant/local_pairing_walkthrough.html+17b6d14b4f3225c9dcf2cbab8a754f8f  usr/share/doc/git-annex/html/assistant/local_pairing_walkthrough/addrepository.png+e6d3761647be986783f96722e9243098  usr/share/doc/git-annex/html/assistant/local_pairing_walkthrough/pairing.png+479f35f53a4bdf29d849a90ae13a5196  usr/share/doc/git-annex/html/assistant/local_pairing_walkthrough/pairrequest.png+ebf723435dae6e2c94846a8a30f77bd5  usr/share/doc/git-annex/html/assistant/local_pairing_walkthrough/secret.png+1a1cec71fad74012c37ebd7c6ba30288  usr/share/doc/git-annex/html/assistant/local_pairing_walkthrough/secretempty.png+6410869a6b0d0d359f59367f9f928098  usr/share/doc/git-annex/html/assistant/logs.png+bdc41ce7b9f8b67552614bc36aad9080  usr/share/doc/git-annex/html/assistant/makerepo.png+4f5f4f7879d518cf5a759110dfef4ec5  usr/share/doc/git-annex/html/assistant/menu.png+34fc0ab10ba4736b0e28a94784ca8885  usr/share/doc/git-annex/html/assistant/osx-app.png+2e98430eef3a73aa2c6537727e2e6b2a  usr/share/doc/git-annex/html/assistant/preferences.png+7f0aa514b0d472fcf8b52c35b7932b87  usr/share/doc/git-annex/html/assistant/quickstart.html+1166f2c729a43b119df50ee9a7e8f00c  usr/share/doc/git-annex/html/assistant/release_notes.html+cf5a9f6a60124b7e3f1cf7e8e2856513  usr/share/doc/git-annex/html/assistant/remote_sharing_walkthrough.html+c3b25c8a79014b28a0487a1812be6a86  usr/share/doc/git-annex/html/assistant/repogroup.png+52ec95dc090b11a246dd1026e7cd86fc  usr/share/doc/git-annex/html/assistant/repogroups.png+9fc46bce83b5019646e4853065fec9a2  usr/share/doc/git-annex/html/assistant/repositories.png+dcddb85e4ec4dda2ec030ca4307d5bfd  usr/share/doc/git-annex/html/assistant/rsync.net.png+2ec2114e89c70340ea64d582396a2773  usr/share/doc/git-annex/html/assistant/running.png+7da8ea5c576b3dc7c3240e6a84ef1d7f  usr/share/doc/git-annex/html/assistant/share_with_a_friend_walkthrough.html+5cef90a6c7681efe04db89e4cabb9df1  usr/share/doc/git-annex/html/assistant/share_with_a_friend_walkthrough/buddylist.png+91e3719633fb46bd36b7330d4bb2a1e2  usr/share/doc/git-annex/html/assistant/share_with_a_friend_walkthrough/pairing.png+db44e11831135b45d578ac6e51b2fe71  usr/share/doc/git-annex/html/assistant/share_with_a_friend_walkthrough/repolist.png+4f28f7cdc46d08a70c99b04901f5abd2  usr/share/doc/git-annex/html/assistant/share_with_a_friend_walkthrough/xmppalert.png+106b8cb561294f98e492ac5c0ae489ba  usr/share/doc/git-annex/html/assistant/thanks.html+3904b3966640d84f23bcf9c3d3cc3051  usr/share/doc/git-annex/html/assistant/thumbnail.png+2f8c80fcf1340e81979cbd4e9aae951f  usr/share/doc/git-annex/html/assistant/xmpp.png+f07e8d8fcc01836de290c0fbc3ea0c92  usr/share/doc/git-annex/html/assistant/xmppnudge.png+eef6deb5ab3028057671f5ff74d1cb10  usr/share/doc/git-annex/html/assistant/xmpppairingend.png+33d16b35775bc1a0697794dee498f5db  usr/share/doc/git-annex/html/backends.html+e0d04b4e2fb21e13ba7b83602921d83a  usr/share/doc/git-annex/html/bare_repositories.html+df81f75574ec5a0b107f5e7b7136d3cc  usr/share/doc/git-annex/html/coding_style.html+73bb5de78b66e09171edd4775eb7fc3e  usr/share/doc/git-annex/html/comments.html+35e904ed2bb14883d75763158ab77908  usr/share/doc/git-annex/html/contact.html+55f64a075c5f293966b40649d93d1b87  usr/share/doc/git-annex/html/copies.html+7ff4b3b6c358740420518237ffb2c651  usr/share/doc/git-annex/html/design.html+ceb6d65c9f4521793852dd4fe45ecc03  usr/share/doc/git-annex/html/design/assistant.html+4f32362b61fd1837e70b758c2c8646ea  usr/share/doc/git-annex/html/design/assistant/OSX.html+30840f8a6c21709ccdfb2a04de4701c5  usr/share/doc/git-annex/html/design/assistant/android.html+c1046a6779a98c7cf9e186b6b187f27b  usr/share/doc/git-annex/html/design/assistant/cloud.html+76303d04cb82cf9a7e7dcef9e6d3b072  usr/share/doc/git-annex/html/design/assistant/configurators.html+39b89dd3a4ba2863b72d17467f6089d9  usr/share/doc/git-annex/html/design/assistant/deltas.html+beab663e881e6629074acaa1dafdf832  usr/share/doc/git-annex/html/design/assistant/desymlink.html+2f472ddacbd08503b893713d8673c149  usr/share/doc/git-annex/html/design/assistant/encrypted_git_remotes.html+921e6f1eb4fab8c1c780dc5ffaec090c  usr/share/doc/git-annex/html/design/assistant/inotify.html+cc3266ed19ea93ece3d2eea98364ccc7  usr/share/doc/git-annex/html/design/assistant/leftovers.html+d0480fc2188d5d289dd5ed6c9448d9cc  usr/share/doc/git-annex/html/design/assistant/more_cloud_providers.html+4b0644dbf82de4cdcd81e0e27aa28884  usr/share/doc/git-annex/html/design/assistant/pairing.html+4ed1c0405641b159d7cd3cfacaf7824c  usr/share/doc/git-annex/html/design/assistant/partial_content.html+98f5246055208f9bb0d1f6289ca900b3  usr/share/doc/git-annex/html/design/assistant/polls.html+20f74a5ee63751559f4d1dc63a3a351a  usr/share/doc/git-annex/html/design/assistant/polls/Android.html+b2406103797b363cb1685b556b836295  usr/share/doc/git-annex/html/design/assistant/polls/Android_default_directory.html+22f9d2e081386257200450e101730701  usr/share/doc/git-annex/html/design/assistant/polls/goals_for_April.html+4d1dd8d6c119465f1bdedd8646e083ca  usr/share/doc/git-annex/html/design/assistant/polls/prioritizing_special_remotes.html+0cf94fbdecb73699a53023e0c81f9380  usr/share/doc/git-annex/html/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant.html+1cf62b2652ab9da9c390a223c9d36a10  usr/share/doc/git-annex/html/design/assistant/progressbars.html+2f8b4bba0f5fe81cb483bb5cc89f8814  usr/share/doc/git-annex/html/design/assistant/rate_limiting.html+db9dde8542ade8b669f7c939b0bcc965  usr/share/doc/git-annex/html/design/assistant/screenshot/firstrun.png+fd2bf9e02e1bcc91ef40b80099592caf  usr/share/doc/git-annex/html/design/assistant/screenshot/intro.png+051e46cd1d991f5e10152e48453d01ca  usr/share/doc/git-annex/html/design/assistant/syncing.html+1b955f4d8b5e5f15cd991f1c80e66c18  usr/share/doc/git-annex/html/design/assistant/transfer_control.html+d2ad41534251d13f21f92e5011dc7f26  usr/share/doc/git-annex/html/design/assistant/webapp.html+b0295c7c350b5d0fb702923ad6273d6e  usr/share/doc/git-annex/html/design/assistant/windows.html+890c87199a3b4e775615b023008ea4ec  usr/share/doc/git-annex/html/design/assistant/xmpp.html+5474f8a7c6fa58b53fb4d73f8de471cf  usr/share/doc/git-annex/html/design/encryption.html+bf1d04d1a4c67d0bb400c6396c7b59b0  usr/share/doc/git-annex/html/direct_mode.html+914b2d4bd6b0748aea59ba4ee7a10224  usr/share/doc/git-annex/html/distributed_version_control.html+91213cb2c8a82fce54db038f4a16d8a2  usr/share/doc/git-annex/html/download.html+973ddf985bcfa944ae0fa95af148eedd  usr/share/doc/git-annex/html/encryption.html+146f97002d28c80a3b783ce50dbad93b  usr/share/doc/git-annex/html/favicon.ico+8d9f31e7f913c1e511ab87fc04035da2  usr/share/doc/git-annex/html/feeds.html+0029894dfc9cfa21bf816e03305e9474  usr/share/doc/git-annex/html/footer/column_a.html+1f579f4dc57355a609b3ece84773b631  usr/share/doc/git-annex/html/footer/column_b.html+6f1ef31b1cc3a98c49c09e8a6ba39b7b  usr/share/doc/git-annex/html/future_proofing.html+7d759eee5906dcc00511fc7cf5290545  usr/share/doc/git-annex/html/git-annex-shell.html+e4c6a5d68d24233fef08e20d8989c026  usr/share/doc/git-annex/html/git-annex.html+34180496be3df363b22e8dda866e132b  usr/share/doc/git-annex/html/git-union-merge.html+365320869f7e9ca2e4e053d2be065055  usr/share/doc/git-annex/html/how_it_works.html+7edcc34e82cc270a3a0b84244c003ec0  usr/share/doc/git-annex/html/ikiwiki/ikiwiki.js+531101fb991d25633961400bd5b018c5  usr/share/doc/git-annex/html/ikiwiki/relativedate.js+4329a38aa265e63db16f6c8eb629b15c  usr/share/doc/git-annex/html/ikiwiki/toggle.js+da1a729d57a875c4f1f764fdb61bc5be  usr/share/doc/git-annex/html/index.html+1ddf7910567895a2880b0ae61ca2ef98  usr/share/doc/git-annex/html/install.html+d632c3767328adf55bfc133aa41e2c85  usr/share/doc/git-annex/html/install/Android.html+20d16bef5d64869f044e608a08ea799a  usr/share/doc/git-annex/html/install/ArchLinux.html+68a4d40fef0159e8e987b06dddf47402  usr/share/doc/git-annex/html/install/Debian.html+13a675d7e677f7a9ae20c1f460aee625  usr/share/doc/git-annex/html/install/Fedora.html+5e8b78918385f354a6696e6fcfff3a5d  usr/share/doc/git-annex/html/install/FreeBSD.html+c95ed84f3ea9f8ba7957da3515d72df1  usr/share/doc/git-annex/html/install/Gentoo.html+a9c336cf0bab595a1e3fdb2e28073a8e  usr/share/doc/git-annex/html/install/Linux_standalone.html+4769deab931e8a1f4bad23b37c72e396  usr/share/doc/git-annex/html/install/NixOS.html+7c16dd93fdf2324aa12c131b5f0f383c  usr/share/doc/git-annex/html/install/OSX.html+1415f3223530c98d6347f73520994aa7  usr/share/doc/git-annex/html/install/OSX/old_comments.html+170d0970d091180289d157d51fc7edca  usr/share/doc/git-annex/html/install/ScientificLinux5.html+7eed2fe9312590ee289406b7fb0f5cef  usr/share/doc/git-annex/html/install/Ubuntu.html+7090ab7ac51b974e1ca4a908e3e77609  usr/share/doc/git-annex/html/install/cabal.html+3308a0f87459f2f96d7351bfa626a74f  usr/share/doc/git-annex/html/install/fromscratch.html+8d014f709de9b617f9118308b456a08e  usr/share/doc/git-annex/html/install/openSUSE.html+2771ca10fbc2f5364ffc7ddd74561a95  usr/share/doc/git-annex/html/internals.html+4b67d79d75113a55d6834322d95320c2  usr/share/doc/git-annex/html/internals/hashing.html+f8dbafcbd7801a8a8d239a50a8f23cbc  usr/share/doc/git-annex/html/internals/key_format.html+7ace89f41893972f1960cd80e0175253  usr/share/doc/git-annex/html/license.html+55e7b8cb55b0cc3efdde9ee52cce4c3b  usr/share/doc/git-annex/html/license/AGPL.gz+4e0ca2bc63e61797836c39b9a6e33ddc  usr/share/doc/git-annex/html/license/GPL.gz+68f10b63c785bc6767f61275f6a65da9  usr/share/doc/git-annex/html/license/LGPL.gz+c4f6eae5a8691c4f7eb722a0001c9b46  usr/share/doc/git-annex/html/links/key_concepts.html+8d197fa0a477eedca4e2c2959946df8e  usr/share/doc/git-annex/html/links/other_stuff.html+d62b7d8c800c083ce1e67b55733ef944  usr/share/doc/git-annex/html/links/the_details.html+550ca9383584fe78d2bee0c3e306da74  usr/share/doc/git-annex/html/location_tracking.html+d29fa683faf26b4eeaf7e2df5ccc9067  usr/share/doc/git-annex/html/logo-bw.svg+da7ef72c147208844c47996d3701b552  usr/share/doc/git-annex/html/logo.png+0e7352e76622961cbe82145534500c9d  usr/share/doc/git-annex/html/logo.svg+bd3617363704ae91f84398a9d113b067  usr/share/doc/git-annex/html/logo_small.png+4c71f086f4fd267d36bfb2802b11e9be  usr/share/doc/git-annex/html/meta.html+b9b8d4a69d0b10141a629bdc63352e8b  usr/share/doc/git-annex/html/news.html+aed8d8d4b6111f4a60e74ac59a201110  usr/share/doc/git-annex/html/not.html+472549fa6632e1c63b0a9b146a5c124a  usr/share/doc/git-annex/html/preferred_content.html+428a4718c11df247416a4f02e71ed307  usr/share/doc/git-annex/html/related_software.html+99c8387075783f9d4260a525ff0c3950  usr/share/doc/git-annex/html/repomap.png+d232de504d45596a374aa3286c83f1af  usr/share/doc/git-annex/html/scalability.html+2f78fa6e4431f07f406f8fa7f397a5b4  usr/share/doc/git-annex/html/sidebar.html+a55a5e9f8550b500ec263f82c21a03d9  usr/share/doc/git-annex/html/sitemap.html+dbece38fc47a261412ceb5ab899afc9d  usr/share/doc/git-annex/html/special_remotes.html+a3ef8aa085afcf28b6e59cf1ba887a6d  usr/share/doc/git-annex/html/special_remotes/S3.html+4dbd0534b9280d11869774db1b261a1f  usr/share/doc/git-annex/html/special_remotes/bup.html+f5cf43176a14b42adec350bea4c94736  usr/share/doc/git-annex/html/special_remotes/directory.html+f1db6158c40c0a9bd2df8549eee9d718  usr/share/doc/git-annex/html/special_remotes/glacier.html+f3789fd89422cc0b5536cbb5e31fed8d  usr/share/doc/git-annex/html/special_remotes/hook.html+154c6dd0496b3aae312a950a38df2387  usr/share/doc/git-annex/html/special_remotes/rsync.html+91bcf22f8ae50108d821482e6f940f19  usr/share/doc/git-annex/html/special_remotes/web.html+c16b7671632f865f88881333a04eedb9  usr/share/doc/git-annex/html/special_remotes/webdav.html+aaf74425c1bfb387ea7010eba78b4884  usr/share/doc/git-annex/html/special_remotes/xmpp.html+99d44e90179957146b01a3784126c736  usr/share/doc/git-annex/html/summary.html+73cc0f4a53a1e215236008ca22cf9cfb  usr/share/doc/git-annex/html/sync.html+40ff84996d93191b8b2477ba4684b68f  usr/share/doc/git-annex/html/templates/bare.tmpl+2e248fae2f6e9638aaebd98c3e934f43  usr/share/doc/git-annex/html/templates/bugtemplate.html+977b742d9da88d36e4dd927c4c069658  usr/share/doc/git-annex/html/templates/walkthrough.tmpl+6ba1652d9ae7c1a09251c8d9638e62a0  usr/share/doc/git-annex/html/testimonials.html+6a0545d999e5a5e02a786a65586171c2  usr/share/doc/git-annex/html/tips.html+7f453730328429fc257d018945726863  usr/share/doc/git-annex/html/tips/Building_git-annex_on_Debian_OR___37____164____35____34____164____37____38____34____35___Haskell__33__.html+93578ce16f70dd3df08b63f741e572b5  usr/share/doc/git-annex/html/tips/Decentralized_repository_behind_a_Firewall.html+95bbb0f392bb7a8d72362f3828fae4a9  usr/share/doc/git-annex/html/tips/How_to_retroactively_annex_a_file_already_in_a_git_repo.html+940365c761b3a91a1c655776da279b55  usr/share/doc/git-annex/html/tips/Internet_Archive_via_S3.html+94dbe7abc95e3b38d0ccefb0a4a31be3  usr/share/doc/git-annex/html/tips/Using_Git-annex_as_a_web_browsing_assistant.html+a63667505d48ef79a22124a9ffc38a52  usr/share/doc/git-annex/html/tips/assume-unstaged.html+c126a4d317f08fd8d43755ab2cf3d20f  usr/share/doc/git-annex/html/tips/automatically_getting_files_on_checkout.html+696a6f3f5f2f52569e9ecec8ad0d94aa  usr/share/doc/git-annex/html/tips/centralised_repository:_starting_from_nothing.html+de4578646bc3b7a8f3bd4d0af499ac9e  usr/share/doc/git-annex/html/tips/centralized_git_repository_tutorial.html+69d3df2166070268b5e2d5ae1f59b424  usr/share/doc/git-annex/html/tips/emacs_integration.html+108b999387a7de2ff4d8ae53500ea8cd  usr/share/doc/git-annex/html/tips/finding_duplicate_files.html+adee13342f4d60e364579d2a6cfcf2dc  usr/share/doc/git-annex/html/tips/migrating_data_to_a_new_backend.html+b88debb958799599abed290b006a2375  usr/share/doc/git-annex/html/tips/powerful_file_matching.html+94259379fc668106dca8223e7d511270  usr/share/doc/git-annex/html/tips/recover_data_from_lost+found.html+184b713b5cb59f0b787825257535139e  usr/share/doc/git-annex/html/tips/replacing_Sparkleshare_or_dvcs-autosync_with_the_assistant.html+9b1a8f73f7c7e07215bad52a1f8d5af4  usr/share/doc/git-annex/html/tips/setup_a_public_repository_on_a_web_site.html+d1e6d33155d7ac68a8539351a5ad4326  usr/share/doc/git-annex/html/tips/untrusted_repositories.html+d92309b66e10c17a5c1b108547734d49  usr/share/doc/git-annex/html/tips/using_Amazon_Glacier.html+40e60da674a819e91c73966edbf1e255  usr/share/doc/git-annex/html/tips/using_Amazon_S3.html+32215ac3e2e3732421fc43882a0c8373  usr/share/doc/git-annex/html/tips/using_Google_Cloud_Storage.html+f298745974c07a77adbbbd1d2ceb68e2  usr/share/doc/git-annex/html/tips/using_box.com_as_a_special_remote.html+b0f0e743aaca0c7ba15168abc4a72036  usr/share/doc/git-annex/html/tips/using_git_annex_with_no_fixed_hostname_and_optimising_ssh.html+9c493638b6b23baabeb6c2dd6e56a17f  usr/share/doc/git-annex/html/tips/using_gitolite_with_git-annex.html+66b6d9fe6def3367c38eb07c31ae9802  usr/share/doc/git-annex/html/tips/using_the_SHA1_backend.html+9b04810762e4262f452f5c93a08e16da  usr/share/doc/git-annex/html/tips/using_the_web_as_a_special_remote.html+cd580aa02a8204f51d4a5fdae5e43c32  usr/share/doc/git-annex/html/tips/visualizing_repositories_with_gource.html+919131bcd8658ae2c2670849953945a2  usr/share/doc/git-annex/html/tips/visualizing_repositories_with_gource/screenshot.jpg+313149a6f3cf0939263eef6da49b79df  usr/share/doc/git-annex/html/tips/what_to_do_when_a_repository_is_corrupted.html+4ee4a855132811fd2de5b9235d8fee07  usr/share/doc/git-annex/html/tips/what_to_do_when_you_lose_a_repository.html+1e58adc871a07107cd56057197b1af0b  usr/share/doc/git-annex/html/transferring_data.html+f7ad8a50509a8d0f8ef37ad97565111f  usr/share/doc/git-annex/html/trust.html+f8558f4f8dae040481d60b0f2f5f9593  usr/share/doc/git-annex/html/upgrades.html+f6c97d0651c7a5acf8f59c0fc310cd20  usr/share/doc/git-annex/html/upgrades/SHA_size.html+8e217f7cc0d1973807481661dbd2bdc1  usr/share/doc/git-annex/html/use_case/Alice.html+2d7a5fdb1016a57ae9a00fb83173d035  usr/share/doc/git-annex/html/use_case/Bob.html+5e836dcedc1b25bfbf48d6dac7810ce3  usr/share/doc/git-annex/html/users.html+8e6ba607564550ca0467532a3027a135  usr/share/doc/git-annex/html/users/chrysn.html+d13e6b44af054c3f99df81343c337489  usr/share/doc/git-annex/html/users/fmarier.html+d3a79bd61b190e196a302780ab40a4ec  usr/share/doc/git-annex/html/users/gebi.html+a345a4d2e27cb3a38b9f5ab4d89f774f  usr/share/doc/git-annex/html/users/joey.html+0e4dd1ba79fd699ebe02ddcbcdf982ed  usr/share/doc/git-annex/html/videos.html+51ae552acfac67d326bf53e17d6f0d8f  usr/share/doc/git-annex/html/videos/FOSDEM2012.html+4fa794a2607474ffc915c12673662ab0  usr/share/doc/git-annex/html/videos/LCA2013.html+a14716c06d05e63023a2822247c05522  usr/share/doc/git-annex/html/videos/git-annex_assistant_archiving.html+e282d6c0a4abeaa7825ecd4bce280ed4  usr/share/doc/git-annex/html/videos/git-annex_assistant_introduction.html+6da72cd455f202bf3c8c7320eeb54805  usr/share/doc/git-annex/html/videos/git-annex_assistant_remote_sharing.html+72d8e141215974e4c56326041bb1777c  usr/share/doc/git-annex/html/videos/git-annex_assistant_sync_demo.html+30269d2cbedca7e9d241787e4890c421  usr/share/doc/git-annex/html/videos/git-annex_watch_demo.html+c834e41394bd5b0194bb7f6a2f287fec  usr/share/doc/git-annex/html/videos/git-annex_weppapp_demo.html+f29bc3c1e40ec82d8646d570af6e3893  usr/share/doc/git-annex/html/walkthrough.html+03d8415b3143efe76eacbb7e5c837403  usr/share/doc/git-annex/html/walkthrough/adding_a_remote.html+33f436aa1b44dfef282ca546764c1e34  usr/share/doc/git-annex/html/walkthrough/adding_files.html+960de3d1b409efbeaebac9ef8649f612  usr/share/doc/git-annex/html/walkthrough/automatically_managing_content.html+caeaeeaea85feee563943dad3a84da12  usr/share/doc/git-annex/html/walkthrough/backups.html+3d73e09e90d0f85dd15ded89625bfa2e  usr/share/doc/git-annex/html/walkthrough/creating_a_repository.html+98b54e9bf4e04d7cee3bfb3985be482e  usr/share/doc/git-annex/html/walkthrough/fsck:_verifying_your_data.html+6d1abc65429df9a7c1d87b65a30ec950  usr/share/doc/git-annex/html/walkthrough/fsck:_when_things_go_wrong.html+e4410117cff03b8a9f0ec87b4590b083  usr/share/doc/git-annex/html/walkthrough/getting_file_content.html+a1434a311bd7633cf53f4474acd3183e  usr/share/doc/git-annex/html/walkthrough/modifying_annexed_files.html+c811dc97b861f08bdd2bc27acde4a356  usr/share/doc/git-annex/html/walkthrough/more.html+2f329b6821030c0287f868ff684c3817  usr/share/doc/git-annex/html/walkthrough/moving_file_content_between_repositories.html+6cbdae72514a4907cac8846c65099156  usr/share/doc/git-annex/html/walkthrough/removing_files.html+33aef95c4a4b15d1b57efda2e5b5b121  usr/share/doc/git-annex/html/walkthrough/removing_files:_When_things_go_wrong.html+5ca66a6912647361cac8da91506d2d45  usr/share/doc/git-annex/html/walkthrough/renaming_files.html+7ee72345527052122996f0cf3c2ca1b1  usr/share/doc/git-annex/html/walkthrough/syncing.html+3a99d4e12d425cbb45f28951c8eb7d1f  usr/share/doc/git-annex/html/walkthrough/transferring_files:_When_things_go_wrong.html+ed1c0a08473bf439b5d1692d5e5ade85  usr/share/doc/git-annex/html/walkthrough/unused_data.html+411865f3015512c3f561271fc452ee59  usr/share/doc/git-annex/html/walkthrough/using_bup.html+751895de1877010e57d322d9eb425189  usr/share/doc/git-annex/html/walkthrough/using_ssh_remotes.html+c0d91beb3dfd17a071524d8fafcd27af  usr/share/man/man1/git-annex-shell.1.gz+3c53119e137184f00bf865a07f7bac04  usr/share/man/man1/git-annex.1.gz
+ debian/git-annex/etc/xdg/autostart/git-annex.desktop view
@@ -0,0 +1,9 @@+[Desktop Entry]+Type=Application+Version=1.0+Name=Git Annex Assistant+Comment=Autostart+Terminal=false+Exec=/usr/bin/git-annex assistant --autostart+Categories=+
+ debian/git-annex/usr/bin/git-annex view

file too large to diff

+ debian/git-annex/usr/bin/git-annex-shell view

file too large to diff

+ debian/git-annex/usr/share/applications/git-annex.desktop view
@@ -0,0 +1,9 @@+[Desktop Entry]+Type=Application+Version=1.0+Name=Git Annex+Comment=Track and sync the files in your Git Annex+Terminal=false+Exec=/usr/bin/git-annex webapp+Categories=Network;FileTransfer;+
+ debian/git-annex/usr/share/doc-base/git-annex view
@@ -0,0 +1,9 @@+Document: git-annex+Title: git-annex documentation+Author: Joey Hess+Abstract: All the documentation from git-annex's website.+Section: File Management++Format: HTML+Index: /usr/share/doc/git-annex/html/index.html+Files: /usr/share/doc/git-annex/html/*.html
+ debian/git-annex/usr/share/doc/git-annex/NEWS.Debian.gz view

binary file changed (absent → 681 bytes)

+ debian/git-annex/usr/share/doc/git-annex/changelog.gz view

binary file changed (absent → 29839 bytes)

+ debian/git-annex/usr/share/doc/git-annex/copyright view
@@ -0,0 +1,783 @@+Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/+Source: native package++Files: *+Copyright: © 2010-2013 Joey Hess <joey@kitenet.net>+License: GPL-3+++Files: Assistant/WebApp.hs Assistant/WebApp/* templates/* static/*+Copyright: © 2012-2013 Joey Hess <joey@kitenet.net>+License: AGPL-3+++Files: Utility/ThreadScheduler.hs+Copyright: 2011 Bas van Dijk & Roel van Dijk+           2012 Joey Hess <joey@kitenet.net>+License: GPL-3+++Files: Utility/Gpg/Types.hs+Copyright: 2013 guilhem <guilhem@fripost.org>+License: GPL-3+++Files: doc/logo* */favicon.ico standalone/osx/git-annex.app/Contents/Resources/git-annex.icns+Copyright: 2007 Henrik Nyh <http://henrik.nyh.se/>+           2010 Joey Hess <joey@kitenet.net>+License: other+  Free to modify and redistribute with due credit, and obviously free to use.++Files: Utility/Mounts.hsc+Copyright: Volker Wysk <hsss@volker-wysk.de>+License: LGPL-2.1+++Files: Utility/libmounts.c+Copyright: 1980, 1989, 1993, 1994 The Regents of the University of California+           2001 David Rufino <daverufino@btinternet.com>+           2012 Joey Hess <joey@kitenet.net>+License: BSD-3-clause+ * Copyright (c) 1980, 1989, 1993, 1994+ *      The Regents of the University of California.  All rights reserved.+ * Copyright (c) 2001+ *      David Rufino <daverufino@btinternet.com>+ * Copyright 2012+ *      Joey Hess <joey@kitenet.net>+ *+ * Redistribution and use in source and binary forms, with or without+ * modification, are permitted provided that the following conditions+ * are met:+ * 1. Redistributions of source code must retain the above copyright+ *    notice, this list of conditions and the following disclaimer.+ * 2. Redistributions in binary form must reproduce the above copyright+ *    notice, this list of conditions and the following disclaimer in the+ *    documentation and/or other materials provided with the distribution.+ * 3. Neither the name of the University nor the names of its contributors+ *    may be used to endorse or promote products derived from this software+ *    without specific prior written permission.+ *+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF+ * SUCH DAMAGE.++Files: static/jquery*+Copyright: © 2005-2011 by John Resig, Branden Aaron & Jörn Zaefferer+           © 2011 The Dojo Foundation+License: MIT or GPL-2+ The full text of version 2 of the GPL is distributed in+ /usr/share/common-licenses/GPL-2 on Debian systems. The text of the MIT+ license follows:+ .+ Permission is hereby granted, free of charge, to any person obtaining+ a copy of this software and associated documentation files (the+ "Software"), to deal in the Software without restriction, including+ without limitation the rights to use, copy, modify, merge, publish,+ distribute, sublicense, and/or sell copies of the Software, and to+ permit persons to whom the Software is furnished to do so, subject to+ the following conditions:+ .+ The above copyright notice and this permission notice shall be+ included in all copies or substantial portions of the Software.+ .+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.++Files: static/*/bootstrap* static/img/glyphicons-halflings*+Copyright: 2012 Twitter, Inc.+License: Apache-2.0+ Licensed under the Apache License, Version 2.0 (the "License");+ you may not use this file except in compliance with the License.+ You may obtain a copy of the License at+ .+        http://www.apache.org/licenses/LICENSE-2.0+ .+ Unless required by applicable law or agreed to in writing, software+ distributed under the License is distributed on an "AS IS" BASIS,+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.+ See the License for the specific language governing permissions and+ limitations under the License.+ .+ The complete text of the Apache License is distributed in+ /usr/share/common-licenses/Apache-2.0 on Debian systems.++License: GPL-3++ The full text of version 3 of the GPL is distributed as doc/license/GPL in+ this package's source, or in /usr/share/common-licenses/GPL-3 on+ Debian systems.++License: LGPL-2.1++ The full text of version 2.1 of the LGPL is distributed as doc/license/LGPL+ in this package's source, or in /usr/share/common-licenses/LGPL-2.1+ on Debian systems.++License: AGPL-3++                      GNU AFFERO GENERAL PUBLIC LICENSE+                         Version 3, 19 November 2007+ .+   Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>+   Everyone is permitted to copy and distribute verbatim copies+   of this license document, but changing it is not allowed.+ .+                              Preamble+ .+    The GNU Affero General Public License is a free, copyleft license for+  software and other kinds of works, specifically designed to ensure+  cooperation with the community in the case of network server software.+ .+    The licenses for most software and other practical works are designed+  to take away your freedom to share and change the works.  By contrast,+  our General Public Licenses are intended to guarantee your freedom to+  share and change all versions of a program--to make sure it remains free+  software for all its users.+ .+    When we speak of free software, we are referring to freedom, not+  price.  Our General Public Licenses are designed to make sure that you+  have the freedom to distribute copies of free software (and charge for+  them if you wish), that you receive source code or can get it if you+  want it, that you can change the software or use pieces of it in new+  free programs, and that you know you can do these things.+ .+    Developers that use our General Public Licenses protect your rights+  with two steps: (1) assert copyright on the software, and (2) offer+  you this License which gives you legal permission to copy, distribute+  and/or modify the software.+ .+    A secondary benefit of defending all users' freedom is that+  improvements made in alternate versions of the program, if they+  receive widespread use, become available for other developers to+  incorporate.  Many developers of free software are heartened and+  encouraged by the resulting cooperation.  However, in the case of+  software used on network servers, this result may fail to come about.+  The GNU General Public License permits making a modified version and+  letting the public access it on a server without ever releasing its+  source code to the public.+ .+    The GNU Affero General Public License is designed specifically to+  ensure that, in such cases, the modified source code becomes available+  to the community.  It requires the operator of a network server to+  provide the source code of the modified version running there to the+  users of that server.  Therefore, public use of a modified version, on+  a publicly accessible server, gives the public access to the source+  code of the modified version.+ .+    An older license, called the Affero General Public License and+  published by Affero, was designed to accomplish similar goals.  This is+  a different license, not a version of the Affero GPL, but Affero has+  released a new version of the Affero GPL which permits relicensing under+  this license.+ .+    The precise terms and conditions for copying, distribution and+  modification follow.+ .+                         TERMS AND CONDITIONS+ .+    0. Definitions.+ .+    "This License" refers to version 3 of the GNU Affero General Public License.+ .+    "Copyright" also means copyright-like laws that apply to other kinds of+  works, such as semiconductor masks.+ .+    "The Program" refers to any copyrightable work licensed under this+  License.  Each licensee is addressed as "you".  "Licensees" and+  "recipients" may be individuals or organizations.+ .+    To "modify" a work means to copy from or adapt all or part of the work+  in a fashion requiring copyright permission, other than the making of an+  exact copy.  The resulting work is called a "modified version" of the+  earlier work or a work "based on" the earlier work.+ .+    A "covered work" means either the unmodified Program or a work based+  on the Program.+ .+    To "propagate" a work means to do anything with it that, without+  permission, would make you directly or secondarily liable for+  infringement under applicable copyright law, except executing it on a+  computer or modifying a private copy.  Propagation includes copying,+  distribution (with or without modification), making available to the+  public, and in some countries other activities as well.+ .+    To "convey" a work means any kind of propagation that enables other+  parties to make or receive copies.  Mere interaction with a user through+  a computer network, with no transfer of a copy, is not conveying.+ .+    An interactive user interface displays "Appropriate Legal Notices"+  to the extent that it includes a convenient and prominently visible+  feature that (1) displays an appropriate copyright notice, and (2)+  tells the user that there is no warranty for the work (except to the+  extent that warranties are provided), that licensees may convey the+  work under this License, and how to view a copy of this License.  If+  the interface presents a list of user commands or options, such as a+  menu, a prominent item in the list meets this criterion.+ .+    1. Source Code.+ .+    The "source code" for a work means the preferred form of the work+  for making modifications to it.  "Object code" means any non-source+  form of a work.+ .+    A "Standard Interface" means an interface that either is an official+  standard defined by a recognized standards body, or, in the case of+  interfaces specified for a particular programming language, one that+  is widely used among developers working in that language.+ .+    The "System Libraries" of an executable work include anything, other+  than the work as a whole, that (a) is included in the normal form of+  packaging a Major Component, but which is not part of that Major+  Component, and (b) serves only to enable use of the work with that+  Major Component, or to implement a Standard Interface for which an+  implementation is available to the public in source code form.  A+  "Major Component", in this context, means a major essential component+  (kernel, window system, and so on) of the specific operating system+  (if any) on which the executable work runs, or a compiler used to+  produce the work, or an object code interpreter used to run it.+ .+    The "Corresponding Source" for a work in object code form means all+  the source code needed to generate, install, and (for an executable+  work) run the object code and to modify the work, including scripts to+  control those activities.  However, it does not include the work's+  System Libraries, or general-purpose tools or generally available free+  programs which are used unmodified in performing those activities but+  which are not part of the work.  For example, Corresponding Source+  includes interface definition files associated with source files for+  the work, and the source code for shared libraries and dynamically+  linked subprograms that the work is specifically designed to require,+  such as by intimate data communication or control flow between those+  subprograms and other parts of the work.+ .+    The Corresponding Source need not include anything that users+  can regenerate automatically from other parts of the Corresponding+  Source.+ .+    The Corresponding Source for a work in source code form is that+  same work.+ .+    2. Basic Permissions.+ .+    All rights granted under this License are granted for the term of+  copyright on the Program, and are irrevocable provided the stated+  conditions are met.  This License explicitly affirms your unlimited+  permission to run the unmodified Program.  The output from running a+  covered work is covered by this License only if the output, given its+  content, constitutes a covered work.  This License acknowledges your+  rights of fair use or other equivalent, as provided by copyright law.+ .+    You may make, run and propagate covered works that you do not+  convey, without conditions so long as your license otherwise remains+  in force.  You may convey covered works to others for the sole purpose+  of having them make modifications exclusively for you, or provide you+  with facilities for running those works, provided that you comply with+  the terms of this License in conveying all material for which you do+  not control copyright.  Those thus making or running the covered works+  for you must do so exclusively on your behalf, under your direction+  and control, on terms that prohibit them from making any copies of+  your copyrighted material outside their relationship with you.+ .+    Conveying under any other circumstances is permitted solely under+  the conditions stated below.  Sublicensing is not allowed; section 10+  makes it unnecessary.+ .+    3. Protecting Users' Legal Rights From Anti-Circumvention Law.+ .+    No covered work shall be deemed part of an effective technological+  measure under any applicable law fulfilling obligations under article+  11 of the WIPO copyright treaty adopted on 20 December 1996, or+  similar laws prohibiting or restricting circumvention of such+  measures.+ .+    When you convey a covered work, you waive any legal power to forbid+  circumvention of technological measures to the extent such circumvention+  is effected by exercising rights under this License with respect to+  the covered work, and you disclaim any intention to limit operation or+  modification of the work as a means of enforcing, against the work's+  users, your or third parties' legal rights to forbid circumvention of+  technological measures.+ .+    4. Conveying Verbatim Copies.+ .+    You may convey verbatim copies of the Program's source code as you+  receive it, in any medium, provided that you conspicuously and+  appropriately publish on each copy an appropriate copyright notice;+  keep intact all notices stating that this License and any+  non-permissive terms added in accord with section 7 apply to the code;+  keep intact all notices of the absence of any warranty; and give all+  recipients a copy of this License along with the Program.+ .+    You may charge any price or no price for each copy that you convey,+  and you may offer support or warranty protection for a fee.+ .+    5. Conveying Modified Source Versions.+ .+    You may convey a work based on the Program, or the modifications to+  produce it from the Program, in the form of source code under the+  terms of section 4, provided that you also meet all of these conditions:+ .+      a) The work must carry prominent notices stating that you modified+      it, and giving a relevant date.+ .+      b) The work must carry prominent notices stating that it is+      released under this License and any conditions added under section+      7.  This requirement modifies the requirement in section 4 to+      "keep intact all notices".+ .+      c) You must license the entire work, as a whole, under this+      License to anyone who comes into possession of a copy.  This+      License will therefore apply, along with any applicable section 7+      additional terms, to the whole of the work, and all its parts,+      regardless of how they are packaged.  This License gives no+      permission to license the work in any other way, but it does not+      invalidate such permission if you have separately received it.+ .+      d) If the work has interactive user interfaces, each must display+      Appropriate Legal Notices; however, if the Program has interactive+      interfaces that do not display Appropriate Legal Notices, your+      work need not make them do so.+ .+    A compilation of a covered work with other separate and independent+  works, which are not by their nature extensions of the covered work,+  and which are not combined with it such as to form a larger program,+  in or on a volume of a storage or distribution medium, is called an+  "aggregate" if the compilation and its resulting copyright are not+  used to limit the access or legal rights of the compilation's users+  beyond what the individual works permit.  Inclusion of a covered work+  in an aggregate does not cause this License to apply to the other+  parts of the aggregate.+ .+    6. Conveying Non-Source Forms.+ .+    You may convey a covered work in object code form under the terms+  of sections 4 and 5, provided that you also convey the+  machine-readable Corresponding Source under the terms of this License,+  in one of these ways:+ .+      a) Convey the object code in, or embodied in, a physical product+      (including a physical distribution medium), accompanied by the+      Corresponding Source fixed on a durable physical medium+      customarily used for software interchange.+ .+      b) Convey the object code in, or embodied in, a physical product+      (including a physical distribution medium), accompanied by a+      written offer, valid for at least three years and valid for as+      long as you offer spare parts or customer support for that product+      model, to give anyone who possesses the object code either (1) a+      copy of the Corresponding Source for all the software in the+      product that is covered by this License, on a durable physical+      medium customarily used for software interchange, for a price no+      more than your reasonable cost of physically performing this+      conveying of source, or (2) access to copy the+      Corresponding Source from a network server at no charge.+ .+      c) Convey individual copies of the object code with a copy of the+      written offer to provide the Corresponding Source.  This+      alternative is allowed only occasionally and noncommercially, and+      only if you received the object code with such an offer, in accord+      with subsection 6b.+ .+      d) Convey the object code by offering access from a designated+      place (gratis or for a charge), and offer equivalent access to the+      Corresponding Source in the same way through the same place at no+      further charge.  You need not require recipients to copy the+      Corresponding Source along with the object code.  If the place to+      copy the object code is a network server, the Corresponding Source+      may be on a different server (operated by you or a third party)+      that supports equivalent copying facilities, provided you maintain+      clear directions next to the object code saying where to find the+      Corresponding Source.  Regardless of what server hosts the+      Corresponding Source, you remain obligated to ensure that it is+      available for as long as needed to satisfy these requirements.+ .+      e) Convey the object code using peer-to-peer transmission, provided+      you inform other peers where the object code and Corresponding+      Source of the work are being offered to the general public at no+      charge under subsection 6d.+ .+    A separable portion of the object code, whose source code is excluded+  from the Corresponding Source as a System Library, need not be+  included in conveying the object code work.+ .+    A "User Product" is either (1) a "consumer product", which means any+  tangible personal property which is normally used for personal, family,+  or household purposes, or (2) anything designed or sold for incorporation+  into a dwelling.  In determining whether a product is a consumer product,+  doubtful cases shall be resolved in favor of coverage.  For a particular+  product received by a particular user, "normally used" refers to a+  typical or common use of that class of product, regardless of the status+  of the particular user or of the way in which the particular user+  actually uses, or expects or is expected to use, the product.  A product+  is a consumer product regardless of whether the product has substantial+  commercial, industrial or non-consumer uses, unless such uses represent+  the only significant mode of use of the product.+ .+    "Installation Information" for a User Product means any methods,+  procedures, authorization keys, or other information required to install+  and execute modified versions of a covered work in that User Product from+  a modified version of its Corresponding Source.  The information must+  suffice to ensure that the continued functioning of the modified object+  code is in no case prevented or interfered with solely because+  modification has been made.+ .+    If you convey an object code work under this section in, or with, or+  specifically for use in, a User Product, and the conveying occurs as+  part of a transaction in which the right of possession and use of the+  User Product is transferred to the recipient in perpetuity or for a+  fixed term (regardless of how the transaction is characterized), the+  Corresponding Source conveyed under this section must be accompanied+  by the Installation Information.  But this requirement does not apply+  if neither you nor any third party retains the ability to install+  modified object code on the User Product (for example, the work has+  been installed in ROM).+ .+    The requirement to provide Installation Information does not include a+  requirement to continue to provide support service, warranty, or updates+  for a work that has been modified or installed by the recipient, or for+  the User Product in which it has been modified or installed.  Access to a+  network may be denied when the modification itself materially and+  adversely affects the operation of the network or violates the rules and+  protocols for communication across the network.+ .+    Corresponding Source conveyed, and Installation Information provided,+  in accord with this section must be in a format that is publicly+  documented (and with an implementation available to the public in+  source code form), and must require no special password or key for+  unpacking, reading or copying.+ .+    7. Additional Terms.+ .+    "Additional permissions" are terms that supplement the terms of this+  License by making exceptions from one or more of its conditions.+  Additional permissions that are applicable to the entire Program shall+  be treated as though they were included in this License, to the extent+  that they are valid under applicable law.  If additional permissions+  apply only to part of the Program, that part may be used separately+  under those permissions, but the entire Program remains governed by+  this License without regard to the additional permissions.+ .+    When you convey a copy of a covered work, you may at your option+  remove any additional permissions from that copy, or from any part of+  it.  (Additional permissions may be written to require their own+  removal in certain cases when you modify the work.)  You may place+  additional permissions on material, added by you to a covered work,+  for which you have or can give appropriate copyright permission.+ .+    Notwithstanding any other provision of this License, for material you+  add to a covered work, you may (if authorized by the copyright holders of+  that material) supplement the terms of this License with terms:+ .+      a) Disclaiming warranty or limiting liability differently from the+      terms of sections 15 and 16 of this License; or+ .+      b) Requiring preservation of specified reasonable legal notices or+      author attributions in that material or in the Appropriate Legal+      Notices displayed by works containing it; or+ .+      c) Prohibiting misrepresentation of the origin of that material, or+      requiring that modified versions of such material be marked in+      reasonable ways as different from the original version; or+ .+      d) Limiting the use for publicity purposes of names of licensors or+      authors of the material; or+ .+      e) Declining to grant rights under trademark law for use of some+      trade names, trademarks, or service marks; or+ .+      f) Requiring indemnification of licensors and authors of that+      material by anyone who conveys the material (or modified versions of+      it) with contractual assumptions of liability to the recipient, for+      any liability that these contractual assumptions directly impose on+      those licensors and authors.+ .+    All other non-permissive additional terms are considered "further+  restrictions" within the meaning of section 10.  If the Program as you+  received it, or any part of it, contains a notice stating that it is+  governed by this License along with a term that is a further+  restriction, you may remove that term.  If a license document contains+  a further restriction but permits relicensing or conveying under this+  License, you may add to a covered work material governed by the terms+  of that license document, provided that the further restriction does+  not survive such relicensing or conveying.+ .+    If you add terms to a covered work in accord with this section, you+  must place, in the relevant source files, a statement of the+  additional terms that apply to those files, or a notice indicating+  where to find the applicable terms.+ .+    Additional terms, permissive or non-permissive, may be stated in the+  form of a separately written license, or stated as exceptions;+  the above requirements apply either way.+ .+    8. Termination.+ .+    You may not propagate or modify a covered work except as expressly+  provided under this License.  Any attempt otherwise to propagate or+  modify it is void, and will automatically terminate your rights under+  this License (including any patent licenses granted under the third+  paragraph of section 11).+ .+    However, if you cease all violation of this License, then your+  license from a particular copyright holder is reinstated (a)+  provisionally, unless and until the copyright holder explicitly and+  finally terminates your license, and (b) permanently, if the copyright+  holder fails to notify you of the violation by some reasonable means+  prior to 60 days after the cessation.+ .+    Moreover, your license from a particular copyright holder is+  reinstated permanently if the copyright holder notifies you of the+  violation by some reasonable means, this is the first time you have+  received notice of violation of this License (for any work) from that+  copyright holder, and you cure the violation prior to 30 days after+  your receipt of the notice.+ .+    Termination of your rights under this section does not terminate the+  licenses of parties who have received copies or rights from you under+  this License.  If your rights have been terminated and not permanently+  reinstated, you do not qualify to receive new licenses for the same+  material under section 10.+ .+    9. Acceptance Not Required for Having Copies.+ .+    You are not required to accept this License in order to receive or+  run a copy of the Program.  Ancillary propagation of a covered work+  occurring solely as a consequence of using peer-to-peer transmission+  to receive a copy likewise does not require acceptance.  However,+  nothing other than this License grants you permission to propagate or+  modify any covered work.  These actions infringe copyright if you do+  not accept this License.  Therefore, by modifying or propagating a+  covered work, you indicate your acceptance of this License to do so.+ .+    10. Automatic Licensing of Downstream Recipients.+ .+    Each time you convey a covered work, the recipient automatically+  receives a license from the original licensors, to run, modify and+  propagate that work, subject to this License.  You are not responsible+  for enforcing compliance by third parties with this License.+ .+    An "entity transaction" is a transaction transferring control of an+  organization, or substantially all assets of one, or subdividing an+  organization, or merging organizations.  If propagation of a covered+  work results from an entity transaction, each party to that+  transaction who receives a copy of the work also receives whatever+  licenses to the work the party's predecessor in interest had or could+  give under the previous paragraph, plus a right to possession of the+  Corresponding Source of the work from the predecessor in interest, if+  the predecessor has it or can get it with reasonable efforts.+ .+    You may not impose any further restrictions on the exercise of the+  rights granted or affirmed under this License.  For example, you may+  not impose a license fee, royalty, or other charge for exercise of+  rights granted under this License, and you may not initiate litigation+  (including a cross-claim or counterclaim in a lawsuit) alleging that+  any patent claim is infringed by making, using, selling, offering for+  sale, or importing the Program or any portion of it.+ .+    11. Patents.+ .+    A "contributor" is a copyright holder who authorizes use under this+  License of the Program or a work on which the Program is based.  The+  work thus licensed is called the contributor's "contributor version".+ .+    A contributor's "essential patent claims" are all patent claims+  owned or controlled by the contributor, whether already acquired or+  hereafter acquired, that would be infringed by some manner, permitted+  by this License, of making, using, or selling its contributor version,+  but do not include claims that would be infringed only as a+  consequence of further modification of the contributor version.  For+  purposes of this definition, "control" includes the right to grant+  patent sublicenses in a manner consistent with the requirements of+  this License.+ .+    Each contributor grants you a non-exclusive, worldwide, royalty-free+  patent license under the contributor's essential patent claims, to+  make, use, sell, offer for sale, import and otherwise run, modify and+  propagate the contents of its contributor version.+ .+    In the following three paragraphs, a "patent license" is any express+  agreement or commitment, however denominated, not to enforce a patent+  (such as an express permission to practice a patent or covenant not to+  sue for patent infringement).  To "grant" such a patent license to a+  party means to make such an agreement or commitment not to enforce a+  patent against the party.+ .+    If you convey a covered work, knowingly relying on a patent license,+  and the Corresponding Source of the work is not available for anyone+  to copy, free of charge and under the terms of this License, through a+  publicly available network server or other readily accessible means,+  then you must either (1) cause the Corresponding Source to be so+  available, or (2) arrange to deprive yourself of the benefit of the+  patent license for this particular work, or (3) arrange, in a manner+  consistent with the requirements of this License, to extend the patent+  license to downstream recipients.  "Knowingly relying" means you have+  actual knowledge that, but for the patent license, your conveying the+  covered work in a country, or your recipient's use of the covered work+  in a country, would infringe one or more identifiable patents in that+  country that you have reason to believe are valid.+ .+    If, pursuant to or in connection with a single transaction or+  arrangement, you convey, or propagate by procuring conveyance of, a+  covered work, and grant a patent license to some of the parties+  receiving the covered work authorizing them to use, propagate, modify+  or convey a specific copy of the covered work, then the patent license+  you grant is automatically extended to all recipients of the covered+  work and works based on it.+ .+    A patent license is "discriminatory" if it does not include within+  the scope of its coverage, prohibits the exercise of, or is+  conditioned on the non-exercise of one or more of the rights that are+  specifically granted under this License.  You may not convey a covered+  work if you are a party to an arrangement with a third party that is+  in the business of distributing software, under which you make payment+  to the third party based on the extent of your activity of conveying+  the work, and under which the third party grants, to any of the+  parties who would receive the covered work from you, a discriminatory+  patent license (a) in connection with copies of the covered work+  conveyed by you (or copies made from those copies), or (b) primarily+  for and in connection with specific products or compilations that+  contain the covered work, unless you entered into that arrangement,+  or that patent license was granted, prior to 28 March 2007.+ .+    Nothing in this License shall be construed as excluding or limiting+  any implied license or other defenses to infringement that may+  otherwise be available to you under applicable patent law.+ .+    12. No Surrender of Others' Freedom.+ .+    If conditions are imposed on you (whether by court order, agreement or+  otherwise) that contradict the conditions of this License, they do not+  excuse you from the conditions of this License.  If you cannot convey a+  covered work so as to satisfy simultaneously your obligations under this+  License and any other pertinent obligations, then as a consequence you may+  not convey it at all.  For example, if you agree to terms that obligate you+  to collect a royalty for further conveying from those to whom you convey+  the Program, the only way you could satisfy both those terms and this+  License would be to refrain entirely from conveying the Program.+ .+    13. Remote Network Interaction; Use with the GNU General Public License.+ .+    Notwithstanding any other provision of this License, if you modify the+  Program, your modified version must prominently offer all users+  interacting with it remotely through a computer network (if your version+  supports such interaction) an opportunity to receive the Corresponding+  Source of your version by providing access to the Corresponding Source+  from a network server at no charge, through some standard or customary+  means of facilitating copying of software.  This Corresponding Source+  shall include the Corresponding Source for any work covered by version 3+  of the GNU General Public License that is incorporated pursuant to the+  following paragraph.+ .+    Notwithstanding any other provision of this License, you have+  permission to link or combine any covered work with a work licensed+  under version 3 of the GNU General Public License into a single+  combined work, and to convey the resulting work.  The terms of this+  License will continue to apply to the part which is the covered work,+  but the work with which it is combined will remain governed by version+  3 of the GNU General Public License.+ .+    14. Revised Versions of this License.+ .+    The Free Software Foundation may publish revised and/or new versions of+  the GNU Affero General Public License from time to time.  Such new versions+  will be similar in spirit to the present version, but may differ in detail to+  address new problems or concerns.+ .+    Each version is given a distinguishing version number.  If the+  Program specifies that a certain numbered version of the GNU Affero General+  Public License "or any later version" applies to it, you have the+  option of following the terms and conditions either of that numbered+  version or of any later version published by the Free Software+  Foundation.  If the Program does not specify a version number of the+  GNU Affero General Public License, you may choose any version ever published+  by the Free Software Foundation.+ .+    If the Program specifies that a proxy can decide which future+  versions of the GNU Affero General Public License can be used, that proxy's+  public statement of acceptance of a version permanently authorizes you+  to choose that version for the Program.+ .+    Later license versions may give you additional or different+  permissions.  However, no additional obligations are imposed on any+  author or copyright holder as a result of your choosing to follow a+  later version.+ .+    15. Disclaimer of Warranty.+ .+    THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY+  APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT+  HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY+  OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,+  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR+  PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM+  IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF+  ALL NECESSARY SERVICING, REPAIR OR CORRECTION.+ .+    16. Limitation of Liability.+ .+    IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING+  WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS+  THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY+  GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE+  USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF+  DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD+  PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),+  EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF+  SUCH DAMAGES.+ .+    17. Interpretation of Sections 15 and 16.+ .+    If the disclaimer of warranty and limitation of liability provided+  above cannot be given local legal effect according to their terms,+  reviewing courts shall apply local law that most closely approximates+  an absolute waiver of all civil liability in connection with the+  Program, unless a warranty or assumption of liability accompanies a+  copy of the Program in return for a fee.+ .+                       END OF TERMS AND CONDITIONS+ .+              How to Apply These Terms to Your New Programs+ .+    If you develop a new program, and you want it to be of the greatest+  possible use to the public, the best way to achieve this is to make it+  free software which everyone can redistribute and change under these terms.+ .+    To do so, attach the following notices to the program.  It is safest+  to attach them to the start of each source file to most effectively+  state the exclusion of warranty; and each file should have at least+  the "copyright" line and a pointer to where the full notice is found.+ .+      <one line to give the program's name and a brief idea of what it does.>+      Copyright (C) <year>  <name of author>+ .+      This program is free software: you can redistribute it and/or modify+      it under the terms of the GNU Affero General Public License as published by+      the Free Software Foundation, either version 3 of the License, or+      (at your option) any later version.+ .+      This program is distributed in the hope that it will be useful,+      but WITHOUT ANY WARRANTY; without even the implied warranty of+      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the+      GNU Affero General Public License for more details.+ .+      You should have received a copy of the GNU Affero General Public License+      along with this program.  If not, see <http://www.gnu.org/licenses/>.+ .+  Also add information on how to contact you by electronic and paper mail.+ .+    If your software can interact with users remotely through a computer+  network, you should also make sure that it provides a way for users to+  get its source.  For example, if your program is a web application, its+  interface could display a "Source" link that leads users to an archive+  of the code.  There are many ways you could offer source, and different+  solutions will be better for different programs; see section 13 for the+  specific requirements.+ .+    You should also get your employer (if you work as a programmer) or school,+  if any, to sign a "copyright disclaimer" for the program, if necessary.+  For more information on this, and how to apply and follow the GNU AGPL, see+  <http://www.gnu.org/licenses/>.
+ debian/git-annex/usr/share/doc/git-annex/html/assistant.html view
@@ -0,0 +1,215 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>assistant</title>++<link rel="stylesheet" href="style.css" type="text/css" />++<link rel="stylesheet" href="local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="./index.html">git-annex</a>/ ++</span>+<span class="title">+assistant++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="./install.html">install</a></li>+<li><span class="selflink">assistant</span></li>+<li><a href="./walkthrough.html">walkthrough</a></li>+<li><a href="./tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="./comments.html">comments</a></li>+<li><a href="./contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>The git-annex assistant creates a folder on each of your computers,+removable drives, and cloud services, which+it keeps synchronised, so its contents are the same everywhere.+It's very easy to use, and has all the power of git and git-annex.</p>++<h2>installation</h2>++<p>The git-annex assistant comes as part of git-annex, starting with version+3.20120924. See <a href="./install.html">install</a> to get it installed.</p>++<p>Note that the git-annex assistant is still beta quality code. See+the <a href="./assistant/release_notes.html">release notes</a> for known infelicities and upgrade instructions.</p>++<h2>intro screencast</h2>++<p><video controls width="400">+<source src="http://downloads.kitenet.net/videos/git-annex/git-annex-assistant-intro.ogv">+</video><br>+A <a href="http://downloads.kitenet.net/videos/git-annex/git-annex-assistant-intro.ogv">8 minute screencast</a>+introducing the <span class="selflink">git-annex assistant</span></a>.</p>+++++<h2>documentation</h2>++<ul>+<li><a href="./assistant/quickstart.html">Basic usage</a></li>+<li>Want to make two nearby computers share the same synchronised folder?<br/>+Follow the <a href="./assistant/local_pairing_walkthrough.html">local pairing walkthrough</a>.</li>+<li>Or perhaps you want to share files between computers in different+locations, like home and work?<br/>+Follow the <a href="./assistant/remote_sharing_walkthrough.html">remote sharing walkthrough</a>.</li>+<li>Want to share a synchronised folder with a friend?<br/>+Follow the <a href="./assistant/share_with_a_friend_walkthrough.html">share with a friend walkthrough</a>.</li>+<li>Want to archive data to a drive or the cloud?<br/>+Follow the <a href="./assistant/archival_walkthrough.html">archival walkthrough</a>.</li>+</ul>+++<h2>colophon</h2>++<p>The git-annex assistant is being+<a href="http://www.kickstarter.com/projects/joeyh/git-annex-assistant-like-dropbox-but-with-your-own/">crowd funded on+Kickstarter</a>.+<a href="./assistant/thanks.html">Thanks</a> to all my backers.</p>++<p>I blog about my work on the git-annex assistant on a daily basis+in <span class="createlink">this blog</span>. Follow along!</p>++<p>See also: The <a href="./design/assistant.html">design</a> pages.</p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./design.html">design</a>++<a href="./design/assistant.html">design/assistant</a>++<a href="./direct_mode.html">direct mode</a>++<a href="./install/Debian.html">install/Debian</a>++<a href="./install/OSX.html">install/OSX</a>++<a href="./install/Ubuntu.html">install/Ubuntu</a>++<a href="./install/fromscratch.html">install/fromscratch</a>++<a href="./not.html">not</a>++<a href="./preferred_content.html">preferred content</a>++<a href="./related_software.html">related software</a>+++<span class="popup">...+<span class="balloon">++<a href="./sidebar.html">sidebar</a>++<a href="./special_remotes/xmpp.html">special remotes/xmpp</a>++<a href="./summary.html">summary</a>++<a href="./sync/comment_4_cf29326408e62575085d1f980087c923.html">sync/comment 4 cf29326408e62575085d1f980087c923</a>++<a href="./tips/replacing_Sparkleshare_or_dvcs-autosync_with_the_assistant.html">tips/replacing Sparkleshare or dvcs-autosync with the assistant</a>++<a href="./videos/git-annex_assistant_archiving.html">videos/git-annex assistant archiving</a>++<a href="./videos/git-annex_assistant_introduction.html">videos/git-annex assistant introduction</a>++</span>+</span>++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:34 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:34 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/assistant/addsshserver.png view

binary file changed (absent → 31740 bytes)

+ debian/git-annex/usr/share/doc/git-annex/html/assistant/android/install.png view

binary file changed (absent → 55106 bytes)

+ debian/git-annex/usr/share/doc/git-annex/html/assistant/android/terminal.png view

binary file changed (absent → 20565 bytes)

+ debian/git-annex/usr/share/doc/git-annex/html/assistant/buddylist.png view

binary file changed (absent → 4347 bytes)

+ debian/git-annex/usr/share/doc/git-annex/html/assistant/cloudnudge.png view

binary file changed (absent → 7332 bytes)

+ debian/git-annex/usr/share/doc/git-annex/html/assistant/combinerepos.png view

binary file changed (absent → 10677 bytes)

+ debian/git-annex/usr/share/doc/git-annex/html/assistant/controlmenu.png view

binary file changed (absent → 8863 bytes)

+ debian/git-annex/usr/share/doc/git-annex/html/assistant/crashrecovery.png view

binary file changed (absent → 6594 bytes)

+ debian/git-annex/usr/share/doc/git-annex/html/assistant/dashboard.png view

binary file changed (absent → 41061 bytes)

+ debian/git-annex/usr/share/doc/git-annex/html/assistant/deleterepository.png view

binary file changed (absent → 22780 bytes)

+ debian/git-annex/usr/share/doc/git-annex/html/assistant/example.png view

binary file changed (absent → 110994 bytes)

+ debian/git-annex/usr/share/doc/git-annex/html/assistant/iaitem.png view

binary file changed (absent → 34868 bytes)

+ debian/git-annex/usr/share/doc/git-annex/html/assistant/logs.png view

binary file changed (absent → 33631 bytes)

+ debian/git-annex/usr/share/doc/git-annex/html/assistant/makerepo.png view

binary file changed (absent → 32061 bytes)

+ debian/git-annex/usr/share/doc/git-annex/html/assistant/menu.png view

binary file changed (absent → 22921 bytes)

+ debian/git-annex/usr/share/doc/git-annex/html/assistant/osx-app.png view

binary file changed (absent → 2604 bytes)

+ debian/git-annex/usr/share/doc/git-annex/html/assistant/preferences.png view

binary file changed (absent → 22815 bytes)

+ debian/git-annex/usr/share/doc/git-annex/html/assistant/quickstart.html view
@@ -0,0 +1,158 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>quickstart</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../assistant.html">assistant</a>/ ++</span>+<span class="title">+quickstart++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<h2>first run</h2>++<p>To get started with the git-annex assistant, just pick it from+your system's list of applications.</p>++<p><a href="./menu.png"><img src="./menu.png" width="385" height="307" class="img" /></a>+<a href="./osx-app.png"><img src="./osx-app.png" width="87" height="98" class="img" /></a></p>++<p>It'll prompt you to set up a folder:</p>++<p><a href="./makerepo.png"><img src="./makerepo.png" width="588" height="476" class="img" /></a></p>++<p>Then any changes you make to its folder will automatically be committed to+git, and synced to repositories on other computers. You can use the+interface to add repositories and control the git-annex assistant.</p>++<p><a href="./running.png"><img src="./running.png" width="614" height="366" class="img" /></a></p>++<h2>starting on boot</h2>++<p>The git-annex assistant will automatically be started when you log in to+desktop environments like Mac OS X, Gnome, XFCE, and KDE, and the menu item+shown above can be used to open the webapp. On other systems, you may need+to start it by hand.</p>++<p>To start the webapp, run <code>git annex webapp</code> at the command line.</p>++<p>To start the assistant without opening the webapp,+you can run the command "git annex assistant --autostart". This is a+good thing to configure your system to run automatically when you log in.</p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="../assistant.html">assistant</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:34 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:34 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/assistant/release_notes.html view
@@ -0,0 +1,573 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>release notes</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../assistant.html">assistant</a>/ ++</span>+<span class="title">+release notes++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<h2>version 4.20130501</h2>++<p>This version contains numerous bug fixes, and improvements.</p>++<h2>version 4.20130417</h2>++<p>This version contains numerous bug fixes, and improvements.</p>++<p>One bug that was fixed can affect users of gnome-keyring who+have set up remote repositories on ssh servers using the webapp.+The gnome-keyring may load the restricted key that is set up+for that, and make it be used for regular logins to the server;+with the result that you'll get an error message about "git-annex-shell"+when sshing to the server.</p>++<p>If you experience this problem you can fix it by+moving <code>.ssh/key.git-annex*</code> to <code>.ssh/git-annex/</code> (creating+that directory first), and edit <code>.ssh/config</code> to reflect the new+location of the key. You will also need to restart gnome-keyring.</p>++<h2>version 4.20130323, 4.20130405</h2>++<p>These versions continue fixing bugs and adding features.</p>++<h2>version 4.20130314</h2>++<p>This version makes a great many improvements and bugfixes, and is+a recommended upgrade.</p>++<p>If you have already used the webapp to locally pair two computers,+a bug caused the paired repository to not be given an appropriate cost.+To fix this, go into the Repositories page in the webapp, and drag the+repository for the locally paired computer to come before any repositories+that it's more expensive to transfer data to.</p>++<h2>version 4.20130227</h2>++<p>This release fixes a bug with globbing that broke preferred content expressions.+So, it is a recommended upgrade from the previous release, which introduced+that bug.</p>++<p>In this release, the assistant is fully working on Android, although+it must be set up using the command line.</p>++<p>Repositories can now be placed on filesystems that lack support for symbolic+links; FAT support is complete.</p>++<h2>version 3.20130216</h2>++<p>This adds a port to Android. Only usable at the command line so far;+beta qualitty.</p>++<p>Also a bugfix release, and improves support for FAT.</p>++<p>The following are known limitations of this release of the git-annex+assistant:</p>++<ul>+<li>No Android app yet.</li>+<li>On BSD operating systems (but not on OS X), the assistant uses kqueue to+watch files. Kqueue has to open every directory it watches, so too many+directories will run it out of the max number of open files (typically+1024), and fail. See <span class="createlink">this bug</span>+for a workaround.</li>+<li>Also on systems with kqueue, modifications to existing files in direct+mode will not be noticed.</li>+</ul>+++<h2>version 3.20130107, 3.20130114, 3.20130124, 3.20130207</h2>++<p>These are bugfix releases.</p>++<h2>version 3.20130102</h2>++<p>This release makes several significant improvements to the git-annex+assistant, which is still in beta.</p>++<p>The main improvement is direct mode. This allows you to directly edit files+in the repository, and the assistant will automatically commit and sync+your changes. Direct mode is the default for new repositories created+by the assistant. To convert your existing repository to use direct mode,+manually run <code>git annex direct</code> inside the repository.</p>++<h2>version 3.20121211</h2>++<p>This release of the git-annex assistant (which is still in beta)+consists of mostly bugfixes, user interface improvements, and improvements+to existing features.</p>++<p>In general, anything you can configure with the assistant's web app+will work. Some examples of use cases supported by this release include:</p>++<ul>+<li>Using Box.com's 5 gigabytes of free storage space as a cloud transfer+point between between repositories that cannot directly contact+one-another. (Many other cloud providers are also supported, from Rsync.net+to Amazon S3, to your own ssh server.)</li>+<li>Archiving or backing up files to Amazon Glacier. See <a href="./archival_walkthrough.html">archival walkthrough</a>.</li>+<li><a href="./share_with_a_friend_walkthrough.html">Sharing repositories with friends</a>+contacted through a Jabber server (such as Google Talk).</li>+<li><a href="./local_pairing_walkthrough.html">Pairing</a> two computers that are on the same local+network (or VPN) and automatically keeping the files in the annex in+sync as changes are made to them.</li>+<li>Cloning your repository to removable drives, USB keys, etc. The assistant+will notice when the drive is mounted and keep it in sync.+Such a drive can be stored as an offline backup, or transported between+computers to keep them in sync.</li>+</ul>+++<p>The following are known limitations of this release of the git-annex+assistant:</p>++<ul>+<li>The Max OSX standalone app may not work on all versions of Max OSX.+Please test!</li>+<li>On Mac OSX and BSD operating systems, the assistant uses kqueue to watch+files. Kqueue has to open every directory it watches, so too many+directories will run it out of the max number of open files (typically+1024), and fail. See <span class="createlink">Issue on OSX with some system limits</span>+for a workaround.</li>+</ul>+++<h2>version 3.20121126</h2>++<p>This adds several features to the git-annex assistant, which is still in beta.</p>++<p>In general, anything you can configure with the assistant's web app+will work. Some examples of use cases supported by this release include:</p>++<ul>+<li>Using Box.com's 5 gigabytes of free storage space as a cloud transfer+point between between repositories that cannot directly contact+one-another. (Many other cloud providers are also supported, from Rsync.net+to Amazon S3, to your own ssh server.)</li>+<li>Archiving or backing up files to Amazon Glacier.</li>+<li><a href="./share_with_a_friend_walkthrough.html">Sharing repositories with friends</a>+contacted through a Jabber server (such as Google Talk).</li>+<li><a href="./local_pairing_walkthrough.html">Pairing</a> two computers that are on the same local+network (or VPN) and automatically keeping the files in the annex in+sync as changes are made to them.</li>+<li>Cloning your repository to removable drives, USB keys, etc. The assistant+will notice when the drive is mounted and keep it in sync.+Such a drive can be stored as an offline backup, or transported between+computers to keep them in sync.</li>+</ul>+++<p>The following are known limitations of this release of the git-annex+assistant:</p>++<ul>+<li>The Max OSX standalone app does not work on all versions of Max OSX.</li>+<li>On Mac OSX and BSD operating systems, the assistant uses kqueue to watch+files. Kqueue has to open every directory it watches, so too many+directories will run it out of the max number of open files (typically+1024), and fail. See <span class="createlink">Issue on OSX with some system limits</span>+for a workaround.</li>+<li>Retrieval of files from Amazon Glacier is not fully automated; the+assistant does not automatically retry in the 4 to 5 hours period+when Glacier makes the files available.</li>+</ul>+++<h2>version 3.20121112</h2>++<p>This is a major upgrade of the git-annex assistant, which is still in beta.</p>++<p>In general, anything you can configure with the assistant's web app+will work. Some examples of use cases supported by this release include:</p>++<ul>+<li><a href="./share_with_a_friend_walkthrough.html">Sharing repositories with friends</a>+contacted through a Jabber server (such as Google Talk).</li>+<li>Setting up cloud repositories, that are used as backups, archives,+or transfer points between repositories that cannot directly contact+one-another.</li>+<li><a href="./local_pairing_walkthrough.html">Pairing</a> two computers that are on the same local+network (or VPN) and automatically keeping the files in the annex in+sync as changes are made to them.</li>+<li>Cloning your repository to removable drives, USB keys, etc. The assistant+will notice when the drive is mounted and keep it in sync.+Such a drive can be stored as an offline backup, or transported between+computers to keep them in sync.</li>+</ul>+++<p>The following upgrade notes apply if you're upgrading from a previous version:</p>++<ul>+<li>For best results, edit the configuration of repositories you set+up with older versions, and place them in a repository group.+This lets the assistant know how you want to use the repository; for backup,+archival, as a transfer point for clients, etc. Go to Configuration -&gt;+Manage Repositories, and click in the "configure" link to edit a repository's+configuration.</li>+<li>If you set up a cloud repository with an older version, and have multiple+clients using it, you are recommended to configure an Jabber account,+so that clients can use it to communicate when sending data to the+cloud repository. Configure Jabber by opening the webapp, and going to+Configuration -&gt; Configure jabber account</li>+<li>When setting up local pairing, the assistant did not limit the paired+computer to accessing a single git repository. This new version does,+by setting GIT_ANNEX_SHELL_DIRECTORY in <code>~/.ssh/authorized_keys</code>.</li>+</ul>+++<p>The following are known limitations of this release of the git-annex+assistant:</p>++<ul>+<li>On Mac OSX and BSD operating systems, the assistant uses kqueue to watch+files. Kqueue has to open every directory it watches, so too many+directories will run it out of the max number of open files (typically+1024), and fail. See <span class="createlink">Issue on OSX with some system limits</span>+for a workaround.</li>+</ul>+++<h2>version 3.20121009</h2>++<p>This is a maintenance release of the git-annex assistant, which is still in+beta.</p>++<p>In general, anything you can configure with the assistant's web app+will work. Some examples of use cases supported by this release include:</p>++<ul>+<li><a href="./local_pairing_walkthrough.html">Pairing</a> two computers that are on the same local+network (or VPN) and automatically keeping the files in the annex in+sync as changes are made to them.</li>+<li>Cloning your repository to removable drives, USB keys, etc. The assistant+will notice when the drive is mounted and keep it in sync.+Such a drive can be stored as an offline backup, or transported between+computers to keep them in sync.</li>+<li>Cloning your repository to a remote server, running ssh, and uploading+changes made to your files to the server. There is special support+for using the rsync.net cloud provider this way, or any shell account+on a typical unix server, such as a Linode VPS can be used.</li>+</ul>+++<p>The following are known limitations of this release of the git-annex+assistant:</p>++<ul>+<li>On Mac OSX and BSD operating systems, the assistant uses kqueue to watch+files. Kqueue has to open every directory it watches, so too many+directories will run it out of the max number of open files (typically+1024), and fail. See <span class="createlink">Issue on OSX with some system limits</span>+for a workaround.</li>+<li>In order to ensure that all multiple repositories are kept in sync,+each computer with a repository must be running the git-annex assistant.</li>+<li>The assistant does not yet always manage to keep repositories in sync+when some are hidden from others behind firewalls.</li>+</ul>+++<h2>version 3.20120924</h2>++<p>This is the first beta release of the git-annex assistant.</p>++<p>In general, anything you can configure with the assistant's web app+will work. Some examples of use cases supported by this release include:</p>++<ul>+<li><a href="./local_pairing_walkthrough.html">Pairing</a> two computers that are on the same local+network (or VPN) and automatically keeping the files in the annex in+sync as changes are made to them.</li>+<li>Cloning your repository to removable drives, USB keys, etc. The assistant+will notice when the drive is mounted and keep it in sync.+Such a drive can be stored as an offline backup, or transported between+computers to keep them in sync.</li>+<li>Cloning your repository to a remote server, running ssh, and uploading+changes made to your files to the server. There is special support+for using the rsync.net cloud provider this way, or any shell account+on a typical unix server, such as a Linode VPS can be used.</li>+</ul>+++<p>The following are known limitations of this release of the git-annex+assistant:</p>++<ul>+<li>On Mac OSX and BSD operating systems, the assistant uses kqueue to watch+files. Kqueue has to open every directory it watches, so too many+directories will run it out of the max number of open files (typically+1024), and fail. See <span class="createlink">Issue on OSX with some system limits</span>+for a workaround.</li>+<li>In order to ensure that all multiple repositories are kept in sync,+each computer with a repository must be running the git-annex assistant.</li>+<li>The assistant does not yet always manage to keep repositories in sync+when some are hidden from others behind firewalls.</li>+<li>If a file is checked into git as a normal file and gets modified+(or merged, etc), it will be converted into an annexed file. So you+should not mix use of the assistant with normal git files in the same+repository yet.</li>+<li>If you <code>git annex unlock</code> a file, it will immediately be re-locked.+See <span class="createlink">watcher commits unlocked files</span>.</li>+</ul>+++</div>++++<div id="comments">+<div  class="feedlink">+++</div>+<div class="comment" id="comment-750d9d9679548f9c107b86463ffc6c63">++++<div class="comment-subject">++<a href="/assistant/release_notes.html#comment-750d9d9679548f9c107b86463ffc6c63">OSX 10.8&#x27;s gatekeeper does not like git-annex</a>++</div>++<div class="inlinecontent">+<p>Trying to run this release on OSX results in an error message from Gatekeeper:</p>++<blockquote><p>"git-annex" can't be opened because it is from an unidentified developer.</p>++<p>Your security preferences allow installation of only apps from the Mac App Store and identified developers.</p></blockquote>++<p>It would be nice if the binary could be signed to make Gatekeeper happy. Until then a note in the installation instructions might be useful.</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://wiggy.net/">Wichert</a>+</span>+++&mdash; <span class="date">Tue Nov 13 10:47:52 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-4ec347a82669fabb94e58d4b5c462884">++++<div class="comment-subject">++<a href="/assistant/release_notes.html#comment-4ec347a82669fabb94e58d4b5c462884">git-annex not runnable on OSX 10.8</a>++</div>++<div class="inlinecontent">+<p>After telling Gatekeeper that I really want to run git-annex it still fails:</p>++<p>[fog;~]-131&gt; open Applications/git-annex.app+LSOpenURLsWithRole() failed with error -10810 for the file /Users/wichert/Applications/git-annex.app.</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://wiggy.net/">Wichert</a>+</span>+++&mdash; <span class="date">Tue Nov 13 10:49:35 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-bf41641d0dfc2a217615673f62d1e10e">++++<div class="comment-subject">++<a href="/assistant/release_notes.html#comment-bf41641d0dfc2a217615673f62d1e10e">comment 3</a>++</div>++<div class="inlinecontent">+<p>This has been previously reported: <span class="createlink">OSX git-annex.app error:  LSOpenURLsWithRole&#40;&#41;</span></p>++<p>No clue what that error is supposed to mean.</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Tue Nov 13 13:11:51 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-6cc0fc47b477d4906add9ddf5f983733">++++<div class="comment-subject">++<a href="/assistant/release_notes.html#comment-6cc0fc47b477d4906add9ddf5f983733">comment 4</a>++</div>++<div class="inlinecontent">+sadly i only have a 10.7 machine to create the builds, so I have no experience with 10.8. I haven't had a 10.6 machine in a while to create the builds. Anyone else want to work together in setting up another 10.6 or 10.8 builder for others?++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus">Jimmy</a>+</span>+++&mdash; <span class="date">Fri Nov 16 09:02:40 2012</span>+</div>++++<div style="clear: both"></div>+</div>+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="../assistant.html">assistant</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:34 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:34 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/assistant/repogroup.png view

binary file changed (absent → 10986 bytes)

+ debian/git-annex/usr/share/doc/git-annex/html/assistant/repogroups.png view

binary file changed (absent → 18490 bytes)

+ debian/git-annex/usr/share/doc/git-annex/html/assistant/repositories.png view

binary file changed (absent → 63405 bytes)

+ debian/git-annex/usr/share/doc/git-annex/html/assistant/rsync.net.png view

binary file changed (absent → 61465 bytes)

+ debian/git-annex/usr/share/doc/git-annex/html/assistant/running.png view

binary file changed (absent → 24664 bytes)

+ debian/git-annex/usr/share/doc/git-annex/html/assistant/thanks.html view
@@ -0,0 +1,379 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>thanks</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../assistant.html">assistant</a>/ ++</span>+<span class="title">+thanks++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>The development of the git-annex assistant was made possible by the+generous donations of many people. I want to say "Thank You!" to each of+you individually, but until I meet all 951 of you, this page will have to+do. You have my most sincere thanks. --<span class="createlink">Joey</span></p>++<p>(If I got your name wrong, or you don't want it publically posted here,+email <a href="mailto:joey@kitenet.net">&#x6a;&#111;&#101;&#x79;&#64;&#107;&#105;&#x74;&#101;&#110;&#x65;&#116;&#x2e;&#110;&#x65;&#116;</a>.)</p>++<h2>Major Backers</h2>++<p>These people are just inspiring in their enthusiasm and generosity to this+project.</p>++<ul>+<li>Jason Scott</li>+<li>strager</li>+</ul>+++<h2>Beta Testers</h2>++<p>Whole weeks of my time were made possible thanks to each of these+people, and their testing is invaluable to the development of+the git-annex assistant.</p>++<ul>+<li>Jimmy Tang</li>+<li>David Pollak</li>+<li>Pater</li>+<li>Francois Marier</li>+<li>Paul Sherwood</li>+<li>Fred Epma</li>+<li>Robert Ristroph</li>+<li>Josh Triplett</li>+<li>David Haslem</li>+<li>AJ Ashton</li>+<li>Svenne Krap</li>+<li>Drew Hess</li>+<li>Peter van Westen</li>+</ul>+++<h2>Prioritizers</h2>++<p>These forward-thinking people contributed generously just to help+set my priorities in which parts of the git-annex assistant were most+important to develop.</p>++<p>Paul C. Bryan, Paul Tötterman, Don Marti, Dean Thompson, Djoume, David Johnston+Asokan Pichai, Anders Østhus, Dominik Wagenknecht, Charlie Fox, Yazz D. Atlas,+fenchel, Erik Penninga, Richard Hartmann, Graham, Stan Yamane, Ben Skelton,+Ian McEwen, asc, Paul Tagliamonte, Sherif Abouseda, Igor Támara, Anne Wind,+Mesar Hameed, Brandur K. Holm Petersen, Takahiro Inoue, Kai Hendry,+Stephen Youndt, Lee Roberson, Ben Strawbridge, Andrew Greenberg, Alfred Adams+Andrew, Aaron De Vries, Monti Knazze, Jorge Canseco, Hamish, Mark Eichin,+Sherif Abouseda, Ben Strawbridge, chee rabbits, Pedro Côrte-Real</p>++<p>And special thanks to Kevin McKenzie, who also gave me a login to a Mac OSX+machine, which has proven invaluable, and Jimmy Tang who has helped+with Mac OSX autobuilding and packaging.</p>++<h2>Other Backers</h2>++<p>Most of the success of the Kickstarter is thanks to these folks. Some of+them spent significant amounts of money in the guise of getting some+swag. For others, being listed here, and being crucial to making the+git-annex assistant happen was reward enough. Large or small, these+contributions are, literally, my bread and butter this year.</p>++<p>Amitai Schlair, mvime, Romain Lenglet, James Petts, Jouni Uuksulainen,+Wichert Akkerman, Robert Bellus, Kasper Souren, rob, Michiel Buddingh',+Kevin, Rob Avina, Alon Levy, Vikash, Michael Alan Dorman, Harley Pig,+Andreas Olsson, Pietpiet, Christine Spang, Liz Young, Oleg Kosorukov,+Allard Hoeve, Valentin Haenel, Joost Baaij, Nathan Yergler, Nathan Howell,+Frédéric Schütz, Matti Eskelinen, Neil McGovern, Lane Lillquist, db48x,+Stuart Prescott, Mark Matienzo, KarlTheGood, leonm, Drew Slininger,+Andreas Fuchs, Conrad Parker, Johannes Engelke, Battlegarden, Justin Kelly,+Robin Wagner, Thad Ward, crenquis, Trudy Goold, Mike Cochrane, Adam Venturella,+Russell Foo, furankupan, Giorgio Occhioni, andy, mind, Mike Linksvayer,+Stefan Strahl, Jelmer Vernooij, Markus Fix, David Hicks, Justin Azoff,+Iain Nicol, Bob Ippolito, Thomas Lundstrøm, Jason Mandel, federico2,+Edd Cochran, Jose Ortega, Emmett Agnew, Rudy Garcia, Kodi, Nick Rusnov,+Michael Rubin, Tom de Grunt, Richard Murray, Peter, Suzanne Pierce, Jared+Marcotte, folk, Eamon, Jeff Richards, Leo Sutedja, dann frazier, Mikkel+kristiansen, Matt Thomas, Kilian Evang, Gergely Risko, Kristian Rumberg,+Peter Kropf, Mark Hepburn, greymont, D. Joe Anderson, Jeremy Zunker, ctebo,+Manuel Roumain, Jason Walsh, np, Shawn, Johan Tibell, Branden Tyree, Dinyar+Rabady, Andrew Mason, damond armstead, Ethan Aubin, TomTom Tommie, Jimmy+Kaplowitz, Steven Zakulec, mike smith, Jacob Kirkwood, Mark Hymers, Nathan+Collins, Asbjørn Sloth Tønnesen, Misty De Meo, James Shubin,+Jim Paris, Adam Sjøgren, miniBill, Taneli, Kumar Appaiah, Greg Grossmeier,+Sten Turpin, Otavio Salvador, Teemu Hukkanen, Brian Stengaard, bob walker,+bibeneus, andrelo, Yaroslav Halchenko, hesfalling, Tommy L, jlargentaye,+Serafeim Zanikolas, Don Armstrong, Chris Cormack, shayne.oneill, Radu+Raduta, Josh S, Robin Sheat, Henrik Mygind, kodx, Christian, Geoff+Crompton, Brian May, Olivier Berger, Filippo Gadotti, Daniel Curto-Millet,+Eskild Hustvedt, Douglas Soares de Andrade, Tom L, Michael Nacos, Michaël+P., William Roe, Joshua Honeycutt, Brian Kelly, Nathan Rasch, jorge, Martin+Galese, alex cox, Avery Brooks, David Whittington, Dan Martinez, Forrest+Sutton, Jouni K. Seppänen, Arnold Cano, Robert Beaty, Daniel, Kevin Savetz,+Randy, Ernie Braganza, Aaron Haviland, Brian Brunswick, asmw, sean, Michael+Williams, Alexander, Dougal Campbell, Robert Bacchas, Michael Lewis, Collin+Price, Wes Frazier, Matt Wall, Brandon Barclay, Derek van Vliet, Martin+DeMello, kitt hodsden, Stephen Kitt, Leif Bergman, Simon Lilburn, Michael+Prokop, Christiaan Conover, Nick Coombe, Tim Dysinger, Brandon Robinson,+Philip Newborough, keith, Mike Fullerton, Kyle, Phil Windley, Tyler Head,+George V. Reilly, Matthew, Ali Gündüz, Vasyl Diakonov, Paolo Capriotti,+allanfranta, Martin Haeberli, msingle, Vincent Sanders, Steven King, Dmitry+Gribanov, Brandon High, Ben Hughes, Mike Dank, JohnE, Diggory Hardy,+Michael Hanke, valhalla, Samuli Tuomola, Jeff Rau, Benjamin Lebsanft, John+Drago, James, Aidan Cooper, rondie, Paul Kohler, Matthew Knights, Aaron+Junod, Patrick R McDonald, Christopher Browne, Daniel Engel, John SJ+Anderson, Peter Sarossy, Mike Prasad, Christoph Ender, Jan Dittberner,+Zohar, Alexander Jelinek, stefan, Danny O'Brien, Matthew Thode, Nicole+Aptekar, maurice gaston, Chris Adams, Mike Klemencic, Reedy, Subito, Tobias+Gruetzmacher, Ole-Morten Duesund, André Koot, mp, gdop, Cole Scott, Blaker,+Matt Sottile, W. Craig Trader, Louis-Philippe Dubrule, Brian Boucheron,+Duncan Smith, Brenton Buchbach, Kyle Stevenson, Eliot Lash, Egon Elbre,+Praveen, williamji, Thomas Schreiber, Neil Ford, Ryan Pratt, Joshua Brand,+Peter Cox, Markus Engstrom, John Sutherland, Dean Bailey, Ed Summers,+Hillel Arnold, David Fiander, Kurt Yoder, Trevor Muñoz, keri, Ivan+Sergeyenko, Shad Bolling, Tal Kelrich, Steve Presley, gerald ocker, Essex+Taylor, Josh Thomson, Trevor Bramble, Lance Higgins, Frank Motta, Dirk+Kraft, soundray, Joe Haskins, nmjk, Apurva Desai, Colin Dean, docwhat,+Joseph Costello, Jst, flamsmark, Alex Lang, Bill Traynor, Anthony David,+Marc-André Lureau, AlNapp, Giovanni Moretti, John Lawrence, João Paulo+Pizani Flor, Jim Ray, Gregory Thrush, Alistair McGann, Andrew Wied,+Koutarou Furukawa, Xiscu Ignacio, Aaron Sachs, Matt, Quirijn, Chet+Williams, Chris Gray, Bruce Segal, Tom Conder, Louis Tovar, Alex Duryee,+booltox, d8uv, Decklin Foster, Rafael Cervantes, Micah R Ledbetter, Kevin+Sjöberg, Johan Strombom, Zachary Cohen, Jason Lewis, Yves Bilgeri, Ville+Aine, Mark Hurley, Marco Bonetti, Maximilian Haack, Hynek Schlawack,+Michael Leinartas, Andreas Liebschner, Duotrig, Nat Fairbanks, David+Deutsch, Colin Hayhurst, calca, Kyle Goodrick, Marc Bobillier, Robert+Snook, James Kim, Olivier Serres, Jon Redfern, Itai Tavor, Michael+Fladischer, Rob, Jan Schmid, Thomas H., Anders Söderbäck, Abhishek+Dasgupta, Jeff Goeke-Smith, Tommy Thorn, bonuswavepilot, Philipp Edelmann,+Nick, Alejandro Navarro Fulleda, Yann Lallemant, andrew brennan,+Dave Allen Barker Jr, Fabian, Lukas Anzinger, Carl Witty, Andy Taylor,+Andre Klärner, Andrew Chilton, Adam Gibbins, Alexander Wauck, Shane O'Dea,+Paul Waite, Iain McLaren, Maggie Ellen Robin Hess, Willard Korfhage,+Nicolas, Eric Nikolaisen, Magnus Enger, Philipp Kern, Andrew Alderwick,+Raphael Wimmer, Benjamin Schötz, Ana Guerrero, Pete, Pieter van der Eems,+Aaron Suggs, Fred Benenson, Cedric Howe, Lance Ivy, Tieg Zaharia, Kevin+Cooney, Jon Williams, Anton Kudris, Roman Komarov, Brad Hilton, Rick Dakan,+Adam Whitcomb, Paul Casagrande, Evgueni Baldin, Robert Sanders, Kagan+Kayal, Dean Gardiner, micah altman, Cameron Banga, Ross Mcnairn, Oscar+Vilaplana, Robin Graham, Dan Gervais, Jon Åslund, Ragan Webber, Noble Hays,+stephen brown, Sean True, Maciek Swiech, faser, eikenberry, Kai Laborenz,+Sergey Fedoseev, Chris Fournier, Svend Sorensen, Greg K, wojtek, Johan+Ribenfors, Anton, Benjamin, Oleg Tsarev, PsychoHazard, John Cochrane,+Kasper Lauritzen, Patrick Naish, Rob, Keith Nasman, zenmaster, David Royer,+Max Woolf, Dan Gabber, martin rhoads, Martin Schmidinger, Paul+Scott-Wilson, Tom Gromak, Andy Webster, Dale Webb, Jim Watson, Stephen+Hansen, Mircea, Dan Goodenberger, Matthias Fink, Andy Gott, Daniel, Jai+Nelson, Shrayas Rajagopal, Vladimir Rutsky, Alexander, Thorben Westerhuys,+hiruki, Tao Neuendorffer Flaherty, Elline, Marco Hegenberg, robert, Balda,+Brennen Bearnes, Richard Parkins, David Gwilliam, Mark Johnson, Jeff Eaton,+Reddawn90, Heather Pusey, Chris Heinz, Colin, Phatsaphong Thadabusapa,+valunthar, Michael Martinez, redlukas, Yury V. Zaytsev, Blake, Tobias+"betabrain" A., Leon, sopyer, Steve Burnett, bessarabov, sarble, krsch.com,+Jack Self, Jeff Welch, Sam Pettiford, Jimmy Stridh, Diego Barberá, David+Steele, Oscar Ciudad, John Braman, Jacob, Nick Jenkins, Ben Sullivan, Brian+Cleary, James Brosnahan, Darryn Ten, Alex Brem, Jonathan Hitchcock, Jan+Schmidle, Wolfrzx99, Steve Pomeroy, Matthew Sitton, Finkregh, Derek Reeve,+GDR!, Cory Chapman, Marc Olivier Chouinard, Andreas Ryland, Justin, Andreas+Persenius, Games That Teach, Walter Somerville, Bill Haecker, Brandon+Phenix, Justin Shultz, Colin Scroggins, Tim Goddard, Ben Margolin, Michael+Martinez, David Hobbs, Andre Le, Jason Roberts, Bob Lopez, Gert Van Gool,+Robert Carnel, Anders Lundqvist, Aniruddha Sathaye, Marco Gillies, Basti+von Bejga, Esko Arajärvi, Dominik Deobald, Pavel Yudaev, Fionn Behrens,+Davide Favargiotti, Perttu Luukko, Silvan Jegen, Marcelo Bittencourt,+Leonard Peris, smercer, Alexandre Dupas, Solomon Matthews, Peter Hogg,+Richard E. Varian, Ian Oswald, James W. Sarvey, Ed Grether, Frederic+Savard, Sebastian Nerz, Hans-Chr. Jehg, Matija Nalis, Josh DiMauro, Jason+Harris, Adam Byrtek, Tellef, Magnus, Bart Schuurmans, Giel van Schijndel,+Ryan, kiodos, Richard 'maddog' Collins, PawZubr, Jason Gassel, Alex+Boisvert, Richard Thompson, maddi bolton, csights, Aaron Bryson, Jason Chu,+Maxime Côté, Kineteka Systems, Joe Cabezas, Mike Czepiel, Rami Nasra,+Christian Simonsen, Wouter Beugelsdijk, Adam Gibson, Gal Buki, James+Marble, Alan Chambers, Bernd Wiehle, Simon Korzun, Daniel Glassey, Eero af+Heurlin, Mikael, Timo Engelhardt, Wesley Faulkner, Jay Wo, Mike Belle,+David Fowlkes Jr., Karl-Heinz Strass, Ed Mullins, Sam Flint,+Hendrica, Mark Emer Anderson, Joshua Cole, Jan Gondol, Henrik Lindhe,+Albert Delgado, Patrick, Alexa Avellar, Chris, sebsn1349, Maxim Kachur,+Andrew Marshall, Navjot Narula, Alwin Mathew, Christian Mangelsdorf, Avi+Shevin, Kevin S., Guillermo Sanchez Estrada, Alex Krieger, Luca Meier, Will+Jessop, Nick Ruest, Lani Aung, Ulf Benjaminsson, Rudi Engelbrecht, Miles+Matton, Cpt_Threepwood, Adam Kuyper, reacocard, David Kilsheimer, Peter+Olson, Bill Fischofer, Prashant Shah, Simon Bonnick, Alexander Grudtsov,+Antoine Boegli, Richard Warren, Sebastian Rust, AlmostHuman, Timmy+Crawford, PC, Marek Belski, pontus, Douglas S Butts, Eric Wallmander, Joe+Pelar, VIjay, Trahloc, Vernon Vantucci, Matthew baya, Viktor Štujber,+Stephen Akiki, Daniil Zamoldinov, Atley, Chris Thomson, Jacob Briggs, Falko+Richter, Andy Schmitz, Sergi Sagas, Peder Refsnes, Jonatan, Ben, Bill+Niblock, Agustin Acuna, Jeff Curl, Tim Humphrey, bib, James Zarbock,+Lachlan Devantier, Michal Berg, Jeff Lucas, Sid Irish, Franklyn, Jared+Dickson, Olli Jarva, Adam Gibson, Lukas Loesche, Jukka Määttä, Alexander+Lin, Dao Tran, Kirk, briankb, Ryan Villasenor, Daniel Wong, barista, Tomas+Jungwirth, Jesper Hansen, Nivin Singh, Alessandro Tieghi, Billy Roessler,+Peter Fetterer, Pallav Laskar, jcherney, Tyler Wang, Steve, Gigahost, Beat+Wolf, Hannibal Skorepa, aktiveradio, Mark Nunnikhoven, Bret Comnes, Alan+Ruttenberg, Anthony DiSanti, Adam Warkiewicz, Brian Bowman, Jonathan, Mark+Filley, Tobias Mohr, Christian St. Cyr, j. faceless user, Karl Miller,+Thomas Taimre, Vikram, Jason Mountcastle, Jason, Paul Elliott, Alexander,+Stephen Farmer, rayslava, Peter Leurs, Sky Kruse, JP Reeves, John J Schatz,+Martin Sandmair, Will Thompson, John Hergenroeder, Thomas, Christophe+Ponsart, Wolfdog, Eagertolearn, LukasM, Federico Hernandez, Vincent Bernat,+Christian Schmidt, Cameron Colby Thomson, Josh Duff, James Brown, Theron+Trowbridge, Falke, Don Meares, tauu, Greg Cornford, Max Fenton, Kenneth+Reitz, Bruce Bensetler, Mark Booth, Herb Mann, Sindre Sorhus, Chris+Knadler, Daniel Digerås, Derek, Sin Valentine, Ben Gamari, david+lampenscherf, fardles, Richard Burdeniuk, Tobias Kienzler, Dawid Humbla,+Bruno Barbaroxa, D Malt, krivar, James Valleroy, Peter, Tim Geddings,+Matthias Holzinger, Hanen, Petr Vacek, Raymond, Griff Maloney, Andreas+Helveg Rudolph, Nelson Blaha, Colonel Fubar, Skyjacker Captain Gavin+Phoenix, shaun, Michael, Kari Salminen, Rodrigo Miranda, Alan Chan, Justin+Eugene Evans, Isaac, Ben Staffin, Matthew Loar, Magos, Roderik, Eugenio+Piasini, Nico B, Scott Walter, Lior Amsalem, Thongrop Rodsavas, Alberto de+Paola, Shawn Poulen, John Swiderski, lluks, Waelen, Mark Slosarek, Jim+Cristol, mikesol, Bilal Quadri, LuP, Allan Nicolson, Kevin Washington,+Isaac Wedin, Paul Anguiano, ldacruz, Jason Manheim, Sawyer, Jason+Woofenden, Joe Danziger, Declan Morahan, KaptainUfolog, Vladron, bart, Jeff+McNeill, Christian Schlotter, Ben McQuillan, Anthony, Julian, Martin O,+altruism, Eric Solheim, MarkS, ndrwc, Matthew, David Lehn, Matthew+Cisneros, Mike Skoglund, Kristy Carey, fmotta, Tom Lowenthal, Branden+Tyree, Aaron Whitehouse</p>++<h2>Also thanks to</h2>++<ul>+<li>The Kickstarter team, who have unleashed much good on the world.</li>+<li>The Haskell developers, who toiled for 20 years in obscurity+before most of us noticed them, and on whose giant shoulders I now stand,+in awe of the view.</li>+<li>The Git developers, for obvious reasons.</li>+<li>All of git-annex's early adopters, who turned it from a personal+toy project into something much more, and showed me the interest was there.</li>+<li>Rsync.net, for providing me a free account so I can make sure git-annex+works well with it.</li>+<li>LeastAuthority.com, for providing me a free Tahoe-LAFS grid account,+so I can test git-annex with that, and back up the git-annex assistant+screencasts.</li>+<li>Anna and Mark, for the loan of the video camera; as well as the rest of+my family, for your support. Even when I couldn't explain what I was+working on.</li>+<li>The Hodges, for providing such a congenial place for me to live and work+on these first world problems, while you're off helping people in the+third world.</li>+</ul>+++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="../assistant.html">assistant</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:34 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:34 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/assistant/thumbnail.png view

binary file changed (absent → 3491 bytes)

+ debian/git-annex/usr/share/doc/git-annex/html/assistant/xmpp.png view

binary file changed (absent → 27753 bytes)

+ debian/git-annex/usr/share/doc/git-annex/html/assistant/xmppnudge.png view

binary file changed (absent → 6156 bytes)

+ debian/git-annex/usr/share/doc/git-annex/html/assistant/xmpppairingend.png view

binary file changed (absent → 34379 bytes)

+ debian/git-annex/usr/share/doc/git-annex/html/backends.html view
@@ -0,0 +1,285 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>backends</title>++<link rel="stylesheet" href="style.css" type="text/css" />++<link rel="stylesheet" href="local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="./index.html">git-annex</a>/ ++</span>+<span class="title">+backends++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="./install.html">install</a></li>+<li><a href="./assistant.html">assistant</a></li>+<li><a href="./walkthrough.html">walkthrough</a></li>+<li><a href="./tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="./comments.html">comments</a></li>+<li><a href="./contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>When a file is annexed, a key is generated from its content and/or metadata.+The file checked into git symlinks to the key. This key can later be used+to retrieve the file's content (its value).</p>++<p>Multiple pluggable key-value backends are supported, and a single repository+can use different ones for different files.</p>++<ul>+<li><code>SHA256E</code> -- The default backend for new files. This allows+verifying that the file content is right, and can avoid duplicates of+files with the same content. Its need to generate checksums+can make it slower for large files.</li>+<li><code>SHA256</code> -- Does not include the file extension in the key, which can+lead to better deduplication.</li>+<li><code>WORM</code> ("Write Once, Read Many") This assumes that any file with+the same basename, size, and modification time has the same content.+This is the the least expensive backend, recommended for really large+files or slow systems.</li>+<li><code>SHA512</code>, <code>SHA512E</code> -- Best currently available hash, for the very paranoid.</li>+<li><code>SHA1</code>, <code>SHA1E</code> -- Smaller hash than <code>SHA256</code> for those who want a checksum+ but are not concerned about security.</li>+<li><code>SHA384</code>, <code>SHA384E</code>, <code>SHA224</code>, <code>SHA224E</code> -- Hashes for people who like+unusual sizes.</li>+</ul>+++<p>The <code>annex.backends</code> git-config setting can be used to list the backends+git-annex should use. The first one listed will be used by default when+new files are added.</p>++<p>For finer control of what backend is used when adding different types of+files, the <code>.gitattributes</code> file can be used. The <code>annex.backend</code>+attribute can be set to the name of the backend to use for matching files.</p>++<p>For example, to use the SHA256E backend for sound files, which tend to be+smallish and might be modified or copied over time,+while using the WORM backend for everything else, you could set+in <code>.gitattributes</code>:</p>++<pre><code>* annex.backend=WORM+*.mp3 annex.backend=SHA256E+*.ogg annex.backend=SHA256E+</code></pre>++</div>++++<div id="comments">+<div  class="feedlink">+++</div>+<div class="comment" id="comment-3c1cd45d2a015b4fc412dd813293ad7d">++++<div class="comment-subject">++<a href="/backends.html#comment-3c1cd45d2a015b4fc412dd813293ad7d">SHA performance</a>++</div>++<div class="inlinecontent">+<p>It turns out that (at least on x86-64 machines) <code>SHA512</code> <a href="https://community.emc.com/community/edn/rsashare/blog/2010/11/01/sha-2-algorithms-when-sha-512-is-more-secure-and-faster">is faster than</a> <code>SHA256</code>. In some benchmarks I performed<sup>1</sup> <code>SHA256</code> was 1.8–2.2x slower than <code>SHA1</code> while <code>SHA512</code> was only 1.5–1.6x slower.</p>++<p><code>SHA224</code> and <code>SHA384</code> are effectively just truncated versions of <code>SHA256</code> and <code>SHA512</code> so their performance characteristics are identical.</p>++<p><sup>1</sup> <code>time head -c 100000000 /dev/zero | shasum -a 512</code></p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://nanotech.nanotechcorp.net/">NanoTech</a>+</span>+++&mdash; <span class="date">Fri Aug 10 00:37:32 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-f1af10fa62cec23b61a688a3f8191f53">++++<div class="comment-subject">++<a href="/backends.html#comment-f1af10fa62cec23b61a688a3f8191f53">Tracking remote copies not even stored locally / URL backend turned into a &#x22;special remote&#x22;.</a>++</div>++<div class="inlinecontent">+<p>In case you came here looking for the URL backend.</p>++<h2>The URL backend</h2>++<p>Several documents on the web refer to a special "URL backend", e.g. <a href="http://lwn.net/Articles/419241/">Large file management with git-annex [LWN.net]</a>.  Historical content will never be updated yet it drives people to living places.</p>++<h2>Why a URL backend ?</h2>++<p>It is interesting because you can:</p>++<ul>+<li>let <code>git-annex</code> rest on the fact that some documents are available as extra copies available at any time (but from something that is not a git repository).</li>+<li>track these documents like your own with all git features, which opens up some truly marvelous combinations, which this margin is too narrow to contain (Pierre d.F. wouldn't disapprove ;-).</li>+</ul>+++<h2>How/Where now ?</h2>++<p><code>git-annex</code> used to have a URL backend. It seems that the design changed into a "special remote" feature, not limited to the web. You can now track files available through plain directories, rsync, webdav, some cloud storage, etc, even clay tablets. For details see <a href="./special_remotes.html">special remotes</a>.</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawm7eqCMh_B7mxE0tnchbr0JoYu11FUAFRY">Stéphane</a>+</span>+++&mdash; <span class="date">Thu Jan  3 06:59:35 2013</span>+</div>++++<div style="clear: both"></div>+</div>+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./how_it_works.html">how it works</a>++<a href="./internals.html">internals</a>++<a href="./internals/key_format.html">internals/key format</a>++<a href="./links/the_details.html">links/the details</a>++<a href="./scalability.html">scalability</a>++<a href="./tips/Internet_Archive_via_S3.html">tips/Internet Archive via S3</a>++<a href="./tips/using_the_SHA1_backend.html">tips/using the SHA1 backend</a>++<a href="./upgrades.html">upgrades</a>++<a href="./upgrades/SHA_size.html">upgrades/SHA size</a>++<a href="./walkthrough/fsck:_verifying_your_data.html">walkthrough/fsck: verifying your data</a>+++<span class="popup">...+<span class="balloon">++<a href="./walkthrough/unused_data.html">walkthrough/unused data</a>++</span>+</span>++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:34 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:34 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/bare_repositories.html view
@@ -0,0 +1,223 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>bare repositories</title>++<link rel="stylesheet" href="style.css" type="text/css" />++<link rel="stylesheet" href="local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="./index.html">git-annex</a>/ ++</span>+<span class="title">+bare repositories++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="./install.html">install</a></li>+<li><a href="./assistant.html">assistant</a></li>+<li><a href="./walkthrough.html">walkthrough</a></li>+<li><a href="./tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="./comments.html">comments</a></li>+<li><a href="./contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>Due to popular demand, git-annex can now be used with bare repositories.</p>++<p>So, for example, you can stash a file away in the origin:+<code>git annex move mybigfile --to origin</code></p>++<p>Of course, for that to work, the bare repository has to be on a system with+<a href="./git-annex-shell.html">git-annex-shell</a> installed. If "origin" is on GitWeb, you still can't+use git-annex to store stuff there.</p>++<p>It took a while, but bare repositories are now supported exactly as well+as non-bare repositories. Except for these caveats:</p>++<ul>+<li><code>git annex fsck</code> works in a bare repository, but does not display+warnings about insufficient+<a href="./copies.html">copies</a>. To get those warnings, just run it in one of the non-bare+checkouts.</li>+<li><code>git annex unused</code> in a bare repository only knows about keys used in+branches that have been pushed to the bare repository. So use it with care..</li>+<li>Commands that need a work tree, like <code>git annex add</code> won't work in a bare+repository, of course.</li>+</ul>+++<hr />++<p>Here is a quick example of how to set this up, using <code>origin</code> as the remote name, and assuming <code>~/annex</code> contains an annex:</p>++<p>On the server:</p>++<pre><code>git init --bare bare-annex.git+git annex init origin+</code></pre>++<p>Now configure the remote and do the initial push:</p>++<pre><code>cd ~/annex+git remote add origin example.com:bare-annex.git+git push origin master git-annex+</code></pre>++<p>Now <code>git annex status</code> should show the configured bare remote. If it does not, you may have to pull from the remote first (older versions of <code>git-annex</code>)</p>++<p>If you wish to configure git such that you can push/pull without arguments, set the upstream branch:</p>++<pre><code>git branch master --set-upstream origin/master+</code></pre>++</div>++++<div id="comments">+<div  class="feedlink">+++</div>+<div class="comment" id="comment-6e007e9304d6f09aaf40ff942f429025">++++<div class="comment-subject">++<a href="/bare_repositories.html#comment-6e007e9304d6f09aaf40ff942f429025">How to convert bare repositories to non-bare</a>++</div>++<div class="inlinecontent">+<p>I made a repository bare and later wanted to convert it, this would have worked with just plain git:</p>++<pre><code>cd bare-repo.git+mkdir .git+mv .??* * .git/+git config --unset core.bare+git reset --hard+</code></pre>++<p>But because git-annex uses different hashing directories under bare repositories all the files in the repo will point to files you don't have. Here's how you can fix that up assuming you're using a backend that assigns unique hashes based on file content (e.g. the SHA256 backend):</p>++<pre><code>mv .git/annex/objects from-bare-repo+git annex add from-bare-repo+git rm -f from-bare-repo+</code></pre>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawmraN_ldJplGunVGmnjjLN6jL9s9TrVMGE">Ævar Arnfjörð</a>+</span>+++&mdash; <span class="date">Sun Nov 11 16:14:44 2012</span>+</div>++++<div style="clear: both"></div>+</div>+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./links/the_details.html">links/the details</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:34 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:34 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/coding_style.html view
@@ -0,0 +1,225 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>coding style</title>++<link rel="stylesheet" href="style.css" type="text/css" />++<link rel="stylesheet" href="local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="./index.html">git-annex</a>/ ++</span>+<span class="title">+coding style++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="./install.html">install</a></li>+<li><a href="./assistant.html">assistant</a></li>+<li><a href="./walkthrough.html">walkthrough</a></li>+<li><a href="./tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="./comments.html">comments</a></li>+<li><a href="./contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>If you do nothing else, avoid use of partial functions from the Prelude!+<code>import Utility.PartialPrelude</code> helps avoid this by defining conflicting+functions for all the common ones. Also avoid <code>!!</code>, it's partial too.</p>++<p>Use tabs for indentation. The one exception to this rule are+the Hamlet format files in <code>templates/*</code>. Hamlet, infuriatingly, refuses+to allow tabs to be used for indentation.</p>++<p>Code should make sense with any tab stop setting, but 8 space tabs are+the default. With 8 space tabs, code should not exceed 80 characters+per line. (With larger tabs, it may of course.)</p>++<p>Use spaces for layout. For example, here spaces (indicated with <code>.</code>)+are used after the initial tab to make the third test line up with+the others.</p>++<pre><code>    when (foo_test || bar_test ||+    ......some_other_long_test)+        print "hi"+</code></pre>++<p>As a special Haskell-specific rule, "where" clauses are indented with two+spaces, rather than a tab. This makes them stand out from the main body+of the function, and avoids excessive indentation of the where cause content.+The definitions within the where clause should be put on separate lines,+each indented with a tab.</p>++<pre><code>main = do+    foo+    bar+    foo+  where+    foo = ...+    bar = ...+</code></pre>++<p>Where clauses for instance definitions and modules tend to appear at the end+of a line, rather than on a separate line.</p>++<pre><code>module Foo (Foo, mkFoo, unFoo) where+instance MonadBaseControl IO Annex where+</code></pre>++<p>When a function's type signature needs to be wrapped to another line,+it's typical to switch to displaying one parameter per line.</p>++<pre><code>foo :: Bar -&gt; Baz -&gt; (Bar -&gt; Baz) -&gt; IO Baz++foo'+    :: Bar+    -&gt; Baz+    -&gt; (Bar -&gt; Baz)+    -&gt; IO Baz+</code></pre>++<p>Note that the "::" then starts its own line. It is not put on the same+line as the function name because then it would not be guaranteed to line+up with the "-&gt;" at all tab width settings. Similarly, guards are put+on their own lines:</p>++<pre><code>splat i+    | odd i = error "splat!"+    | otherwise = i+</code></pre>++<p>Multiline lists and record syntax are written with leading commas,+that line up with the open and close punctuation.</p>++<pre><code>list =+    [ item1+    , item2+    , item3+    ]++foo = DataStructure+    { name = "bar"+    , address = "baz"+    }+</code></pre>++<p>Module imports are separated into two blocks, one for third-party modules,+and one for modules that are part of git-annex. (Additional blocks can be used+if it makes sense.)</p>++<p>Using tabs for indentation makes use of <code>let .. in</code> particularly tricky.+There's no really good way to bind multiple names in a let clause with+tab indentation. Instead, a where clause is typically used. To bind a single+name in a let clause, this is sometimes used:</p>++<pre><code>foo = let x = 42+    in x + (x-1) + x+</code></pre>++<hr />++<p>If you feel that this coding style leads to excessive amounts of horizontal+or vertical whitespace around your code, making it hard to fit enough of it+on the screen, consider finding a better abstraction, so the code that+does fit on the screen is easily understandable. ;)</p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./download.html">download</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:40 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:40 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/comments.html view
@@ -0,0 +1,480 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>comments</title>++<link rel="stylesheet" href="style.css" type="text/css" />++<link rel="stylesheet" href="local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="./index.html">git-annex</a>/ ++</span>+<span class="title">+comments++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<div  class="feedlink">+++</div>++++<p>Comments in the moderation queue:+0</p>++</div>+++<div id="pagebody">++<div id="content">+<p>Recent comments posted to this site:</p>++<div  class="feedlink">+++</div>+<div class="comment" id="comment-fae19fdb9bb3650e47f45dcd9a08dec8">++++<div class="comment-subject">++<a href="/tips/Building_git-annex_on_Debian_OR___37____164____35____34____164____37____38____34____35___Haskell__33__.html#comment-fae19fdb9bb3650e47f45dcd9a08dec8">comment 2</a>++</div>++<div class="inlinecontent">+@Alexander that DAV-0.4 problem is a bug in DAV, not git-annex. I've informed its author and it should be fixed soon, in a new version of DAV.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joey</a>+</span>+++&mdash; <span class="date">Tue Apr 30 17:51:50 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-7cc94df1bf9a75a6d03369f3897d6816">++++<div class="comment-subject">++<a href="/tips/Building_git-annex_on_Debian_OR___37____164____35____34____164____37____38____34____35___Haskell__33__.html#comment-7cc94df1bf9a75a6d03369f3897d6816">can&#x27;t install git-annex on OS X Mountain Lion without disabling WebDAV support</a>++</div>++<div class="inlinecontent">+<p>possibly related to this Debian issue:</p>++<p>trying to install git-annex with cabal on OS X 10.8.3, the build fails with</p>++<pre><code>Loading package DAV-0.4 ... linking ... ghc: +lookupSymbol failed in relocateSection (relocate external)+~/.cabal/lib/DAV-0.4/ghc-7.4.2/HSDAV-0.4.o: unknown symbol `_DAVzm0zi4_PathszuDAV_version1_closure'+ghc: unable to load package `DAV-0.4'+Failed to install git-annex-4.20130417+cabal: Error: some packages failed to install:+git-annex-4.20130417 failed during the building phase. The exception was:+ExitFailure 1+</code></pre>++<p>This was after following all of the instructions for the Homebrew install at <a href="http://git-annex.branchable.com/install/OSX/">http://git-annex.branchable.com/install/OSX/</a>+I was able to work around this issue by installing with the WebDAV flag disabled (ie, added the option --flags="-WebDAV" to last command in the OS X install instructions):</p>++<pre><code>cabal install git-annex --bindir=$HOME/bin --flags="-WebDAV"+</code></pre>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawkCw26IdxXXPBoLcZsQFslM67OJSJynb1w">Alexander</a>+</span>+++&mdash; <span class="date">Mon Apr 29 13:57:03 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-656c072026f03c48b45d192bc1c4d9b1">++++<div class="comment-subject">++<a href="/design/assistant/xmpp.html#comment-656c072026f03c48b45d192bc1c4d9b1">file transfer?</a>++</div>++<div class="inlinecontent">+Would it be possible to add optional support for transferring files over XMPP (possibly being disabled out-of-the-box so as not to suck up third-party bandwidth)?++</div>++<div class="comment-header">++Comment by++<span class="author" title="Signed in">++<a href="?page=hhm&amp;do=goto">hhm</a>++</span>+++&mdash; <span class="date">Tue Apr 23 06:22:51 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-8a9be1ba31f0bbc707bb0d24cd418589">++++<div class="comment-subject">++<a href="/tips/using_the_web_as_a_special_remote.html#comment-8a9be1ba31f0bbc707bb0d24cd418589">comment 4</a>++</div>++<div class="inlinecontent">+<p>You can use <code>git annex rmurl $file $url</code>, which I just added to git-annex.</p>++<p>(Also, <code>git annex drop $file --from web</code> will remove all the urls..)</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joey</a>+</span>+++&mdash; <span class="date">Mon Apr 22 17:28:03 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-259ea36b60d38f5af5ab613bc4075b8b">++++<div class="comment-subject">++<a href="/design/assistant/polls/Android_default_directory.html#comment-259ea36b60d38f5af5ab613bc4075b8b">comment 3</a>++</div>++<div class="inlinecontent">+<p>@Richard, including all of /sdcard seems a reasonable thing to do if you want to back it all up. I don't know how likely anyone would be to want to sync the whole contents though.</p>++<p>@Leonardo direct mode is the default for all respositories created by the webapp, as well as all repositories on crippled filesystems that cannot support indirect mode. Android webapp thus defaults to direct mode twice over!</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joey</a>+</span>+++&mdash; <span class="date">Sat Apr 20 19:38:47 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-e398437e26fcf7a8a134ff544c1e2a5b">++++<div class="comment-subject">++<a href="/design/assistant/polls/Android_default_directory.html#comment-e398437e26fcf7a8a134ff544c1e2a5b">Direct mode</a>++</div>++<div class="inlinecontent">+I think direct mode should be the default on Android++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawnE6kFAbud1LWrQuyX76yMYnUjHt9tR-A8">Leonardo</a>+</span>+++&mdash; <span class="date">Sat Apr 20 16:55:09 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-d333f0a68724aa6febee23ed038f3179">++++<div class="comment-subject">++<a href="/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant.html#comment-d333f0a68724aa6febee23ed038f3179">comment 20</a>++</div>++<div class="inlinecontent">+You can turn off automatic commits in the webapp by pausing syncing for the local repository.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joey</a>+</span>+++&mdash; <span class="date">Fri Apr 19 14:01:44 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-b0655bad47adbd62653b734ca4364c0f">++++<div class="comment-subject">++<a href="/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant.html#comment-b0655bad47adbd62653b734ca4364c0f">Windows + git ignore like syntax for files to sync</a>++</div>++<div class="inlinecontent">+<p>Hi,</p>++<p>my company would need this for some project.</p>++<p>But to adopt it I would need:+* windows support (I don't care if now symlink support for now)+* being able to define which files are automatically synced using a syntax similar to the gitignore one+* being able to disable auto-commit (just synching, user should be able to commit on their own)</p>++<p>thanks</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawnmvVKc1ECzZx7EhtLHBP6RWPZewq4x_9I">Daniele</a>+</span>+++&mdash; <span class="date">Fri Apr 19 06:47:36 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-bdc97055fac2d28cb1baa9bd5f89eeb4">++++<div class="comment-subject">++<a href="/design/assistant/polls/Android_default_directory.html#comment-bdc97055fac2d28cb1baa9bd5f89eeb4">comment 1</a>++</div>++<div class="inlinecontent">+<p>While my main use case is a photo repo, I don't think it's wise to default to there.</p>++<p>Similarly, spamming what amounts to the root dir of "external" storage with repos seems like a bad idea.</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U">Richard</a>+</span>+++&mdash; <span class="date">Fri Apr 19 02:29:14 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-d020a3312a07e4edee8b03081922a8b8">++++<div class="comment-subject">++<a href="/install/OSX.html#comment-d020a3312a07e4edee8b03081922a8b8">comment 19</a>++</div>++<div class="inlinecontent">+sounds like a prime candidate for a nice lightweight linux distro ;)++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://edheil.wordpress.com/">edheil [wordpress.com]</a>+</span>+++&mdash; <span class="date">Wed Apr 17 22:05:34 2013</span>+</div>++++<div style="clear: both"></div>+</div>++++++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./sidebar.html">sidebar</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Fri Sep 28 01:45:57 2012</span>+<!-- Created <span class="date">Fri Sep 28 01:45:57 2012</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/contact.html view
@@ -0,0 +1,137 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>contact</title>++<link rel="stylesheet" href="style.css" type="text/css" />++<link rel="stylesheet" href="local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="./index.html">git-annex</a>/ ++</span>+<span class="title">+contact++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="./install.html">install</a></li>+<li><a href="./assistant.html">assistant</a></li>+<li><a href="./walkthrough.html">walkthrough</a></li>+<li><a href="./tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="./comments.html">comments</a></li>+<li><span class="selflink">contact</span></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>Joey Hess <a href="mailto:joey@kitenet.net">&#106;&#111;&#101;&#121;&#64;&#x6b;&#x69;&#x74;&#x65;&#110;&#x65;&#116;&#x2e;&#110;&#101;&#x74;</a> is the author of git-annex. If you need to+talk about something privately, email me.</p>++<p>The <span class="createlink">forum</span> is the best place to discuss git-annex.</p>++<p>For realtime chat, use the <code>#git-annex</code> channel on irc.oftc.net.+You can also watch incoming commits there.</p>++<p>The <a href="http://lists.madduck.net/listinfo/vcs-home">VCS-home mailing list</a>+is a good mailing list for users who want to use git-annex in the context+of managing their large personal files.</p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./sidebar.html">sidebar</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:40 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:40 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/copies.html view
@@ -0,0 +1,178 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>copies</title>++<link rel="stylesheet" href="style.css" type="text/css" />++<link rel="stylesheet" href="local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="./index.html">git-annex</a>/ ++</span>+<span class="title">+copies++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="./install.html">install</a></li>+<li><a href="./assistant.html">assistant</a></li>+<li><a href="./walkthrough.html">walkthrough</a></li>+<li><a href="./tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="./comments.html">comments</a></li>+<li><a href="./contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>Annexed data is stored inside  your git repository's <code>.git/annex</code> directory.+Some <a href="./special_remotes.html">special remotes</a> can store annexed data elsewhere.</p>++<p>It's important that data not get lost by an ill-considered <code>git annex drop</code>+command.  So, git-annex can be configured to try+to keep N copies of a file's content available across all repositories.+(Although <a href="./trust.html">untrusted repositories</a> don't count toward this total.)</p>++<p>By default, N is 1; it is configured by annex.numcopies. This default+can be overridden on a per-file-type basis by the annex.numcopies+setting in <code>.gitattributes</code> files. The --numcopies switch allows+temporarily using a different value.</p>++<p><code>git annex drop</code> attempts to check with other git remotes, to check that N+copies of the file exist. If enough repositories cannot be verified to have+it, it will retain the file content to avoid data loss. Note that+<a href="./trust.html">trusted repositories</a> are not explicitly checked.</p>++<p>For example, consider three repositories: Server, Laptop, and USB. Both Server+and USB have a copy of a file, and N=1. If on Laptop, you <code>git annex get+$file</code>, this will transfer it from either Server or USB (depending on which+is available), and there are now 3 copies of the file.</p>++<p>Suppose you want to free up space on Laptop again, and you <code>git annex drop</code> the file+there. If USB is connected, or Server can be contacted, git-annex can check+that it still has a copy of the file, and the content is removed from+Laptop. But if USB is currently disconnected, and Server also cannot be+contacted, it can't verify that it is safe to drop the file, and will+refuse to do so.</p>++<p>With N=2, in order to drop the file content from Laptop, it would need access+to both USB and Server.</p>++<p>Note that different repositories can be configured with different values of+N. So just because Laptop has N=2, this does not prevent the number of+copies falling to 1, when USB and Server have N=1. To avoid this,+configure it in <code>.gitattributes</code>, which is shared between repositories+using git.</p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./bare_repositories.html">bare repositories</a>++<a href="./future_proofing.html">future proofing</a>++<a href="./preferred_content.html">preferred content</a>++<a href="./special_remotes/S3.html">special remotes/S3</a>++<a href="./tips/using_the_web_as_a_special_remote.html">tips/using the web as a special remote</a>++<a href="./trust.html">trust</a>++<a href="./use_case/Bob.html">use case/Bob</a>++<a href="./walkthrough/backups.html">walkthrough/backups</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Fri Sep 28 01:45:57 2012</span>+<!-- Created <span class="date">Fri Sep 28 01:45:57 2012</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/design.html view
@@ -0,0 +1,132 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>design</title>++<link rel="stylesheet" href="style.css" type="text/css" />++<link rel="stylesheet" href="local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="./index.html">git-annex</a>/ ++</span>+<span class="title">+design++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="./install.html">install</a></li>+<li><a href="./assistant.html">assistant</a></li>+<li><a href="./walkthrough.html">walkthrough</a></li>+<li><a href="./tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="./comments.html">comments</a></li>+<li><a href="./contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>git-annex's high-level design is mostly inherent in the data that it+stores in git, and alongside git. See <a href="./internals.html">internals</a> for details.</p>++<p>See <a href="./design/encryption.html">encryption</a> for design of encryption elements.</p>++<p>See <a href="./design/assistant.html">assistant</a> for the design site for the git-annex <a href="./assistant.html">assistant</a>.</p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./links/the_details.html">links/the details</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:40 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:40 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/design/assistant.html view
@@ -0,0 +1,757 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>assistant</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../design.html">design</a>/ ++</span>+<span class="title">+assistant++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>This is the design site for the git-annex <a href="../assistant.html">assistant</a>.</p>++<p>Parts of the design is still being fleshed out, still many ideas+and use cases to add. Feel free to chip in with comments! --<span class="createlink">Joey</span></p>++<h2>roadmap</h2>++<ul>+<li>Month 1 "like dropbox": [[!traillink  inotify]] [[!traillink  syncing]]</li>+<li>Month 2 "shiny webapp": [[!traillink  webapp]] [[!traillink  progressbars]]</li>+<li>Month 3 "easy setup": [[!traillink  configurators]] [[!traillink  pairing]]</li>+<li>Month 4 "cloud": [[!traillink  cloud]] [[!traillink  transfer_control]]</li>+<li>Month 5 "cloud continued": [[!traillink  xmpp]] [[!traillink  more_cloud_providers]]</li>+<li>Month 6 "9k bonus round": [[!traillink  desymlink]]</li>+<li>Month 7: user-driven features and polishing;+<a href="http://mirror.linux.org.au/linux.conf.au/2013/mp4/gitannex.mp4">presentation at LCA2013</a></li>+<li>Month 8: [[!traillink  Android]]</li>+<li>Month 9: <a href="../videos.html">screencasts</a> and polishing</li>+</ul>+++<p>We are, approximately, here:</p>++<ul>+<li>Month 10: bugfixing, Android webapp</li>+<li>Month 11: more user-driven features and polishing</li>+<li>Month 12: "Windows purgatory" <a href="./assistant/windows.html">Windows</a></li>+</ul>+++<h2>porting</h2>++<ul>+<li><a href="./assistant/OSX.html">OSX</a> port is in fairly good shape, but still has some room for improvement</li>+<li><a href="./assistant/android.html">android</a> port is just getting started</li>+<li>Windows port does not exist yet</li>+</ul>+++<h2>not yet on the map:</h2>++<ul>+<li><a href="./assistant/rate_limiting.html">rate limiting</a></li>+<li><a href="./assistant/partial_content.html">partial content</a></li>+<li><a href="./assistant/encrypted_git_remotes.html">encrypted git remotes</a></li>+<li><a href="./assistant/deltas.html">deltas</a></li>+<li><a href="./assistant/leftovers.html">leftovers</a></li>+<li><span class="createlink">other todo items</span></li>+</ul>+++<h2>polls</h2>++<p>I post <a href="./assistant/polls.html">polls</a> occasionally to make decisions. You can vote!</p>++<h2>blog</h2>++<p>I'm blogging about my progress in the <span class="createlink">blog</span> on a semi-daily basis.+Follow along!</p>++</div>++++<div id="comments">+<div  class="feedlink">+++</div>+<div class="comment" id="comment-2dc9d65b6aca226e578eb7af2a8c8f3c">++++<div class="comment-subject">++<a href="/design/assistant.html#comment-2dc9d65b6aca226e578eb7af2a8c8f3c">comment 1</a>++</div>++<div class="inlinecontent">+Will statically linked binaries be provided for say Linux, OSX and *BSD?  I think having some statically linked binaries will certainly help and appeal to a lot of users.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus">Jimmy</a>+</span>+++&mdash; <span class="date">Sat Jun  2 08:06:37 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-071a8a4e7402d22af45051da70f9ccae">++++<div class="comment-subject">++<a href="/design/assistant.html#comment-071a8a4e7402d22af45051da70f9ccae">comment 2</a>++</div>++<div class="inlinecontent">+Jimmy, I hope to make it as easy as possible to install. I've been focusing on getting it directly into popular Linux distributions, rather than shipping my own binary. The OSX binary is static, and while I lack a OSX machine, I would like to get it easier to distribute to OSX users.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Mon Jun  4 15:45:00 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-5a552c09975efea1fa4d81e2722bec4d">++++<div class="comment-subject">++<a href="/design/assistant.html#comment-5a552c09975efea1fa4d81e2722bec4d">comment 3</a>++</div>++<div class="inlinecontent">+I'd agree getting it into the main distros is the way to go, if you need OSX binaries, I could volunteer to setup an autobuilder to generate binaries for OSX users, however it would rely on users to have macports with the correct ports installed to use it (things like coreutils etc...)++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus">Jimmy</a>+</span>+++&mdash; <span class="date">Thu Jun  7 16:22:55 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-e56bb71b2f6a200d167ee6b1bee6587e">++++<div class="comment-subject">++<a href="/design/assistant.html#comment-e56bb71b2f6a200d167ee6b1bee6587e">comment 4</a>++</div>++<div class="inlinecontent">+<p>I always appreciate your OSX work Jimmy...</p>++<p>Could it be put into macports?</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Thu Jun  7 21:56:52 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-c8c6ecfeff30f972792690a5bef58908">++++<div class="comment-subject">++<a href="/design/assistant.html#comment-c8c6ecfeff30f972792690a5bef58908">comment 5</a>++</div>++<div class="inlinecontent">+<p>In relation to macports, I often found that haskell in macports are often behind other distros, and I'm not willing to put much effort into maintaining or updating those ports. I found that to build git-annex, installing macports manually and then installing haskell-platform from the upstream to be the best way to get the most up to date dependancies for git-annex.</p>++<p>fyi in macports ghc is at version 6.10.4 and haskell platform is at version 2009.2, so there are a significant number of ports to update.</p>++<p>I was thinking about this a bit more and I reckon it might be easier to try and build a self contained .pkg package and have all the needed binaries in a .app styled package, that would work well when the webapp comes along. I will take a look at it in a week or two (currently moving house so I dont have much time)</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus">Jimmy</a>+</span>+++&mdash; <span class="date">Fri Jun  8 03:22:34 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-77e54e7ebfbd944c370173014b535c91">++++<div class="comment-subject">++<a href="/design/assistant.html#comment-77e54e7ebfbd944c370173014b535c91">comment 6</a>++</div>++<div class="inlinecontent">+<p>It's not much for now... but see <a href="http://www.sgenomics.org/~jtang/gitbuilder-git-annex-x00-x86_64-apple-darwin10.8.0/">http://www.sgenomics.org/~jtang/gitbuilder-git-annex-x00-x86_64-apple-darwin10.8.0/</a> I'm ignoring the debian-stable and pristine-tar branches for now, as I am just building and testing on osx 10.7.</p>++<p>Hope the autobuilder will help you develop the OSX side of things without having direct access to an osx machine! I will try and get gitbuilder to spit out appropriately named tarballs of the compiled binaries in a few days when I have more time.</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus">Jimmy</a>+</span>+++&mdash; <span class="date">Fri Jun  8 11:21:18 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-135a31b1e86ecc315f121fe53da32276">++++<div class="comment-subject">++<a href="/design/assistant.html#comment-135a31b1e86ecc315f121fe53da32276">comment 7</a>++</div>++<div class="inlinecontent">+Thanks, that's already been useful to me. You might as well skip the debian-specific "bpo" tags too.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Sat Jun  9 14:07:51 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-f65cad7d6e0a76a18b1801d27cd8de01">++++<div class="comment-subject">++<a href="/design/assistant.html#comment-f65cad7d6e0a76a18b1801d27cd8de01">macports</a>++</div>++<div class="inlinecontent">+<p>The average OSX user has a) no idea what macports is, and b) will not be able to install it. Anything that requires a user to do anything with a commandline (or really anything other than using a GUI installer) is effectively a dealbreaker. For our use cases OSX is definitely a requirement, but it must only use standard OSX installation methods in order to be usable. Being in the appstore would be ideal, but standard dmg/pkg installers are still common enough that they are also acceptable.</p>++<p>FWIW this is the same reason many git GUIs were not usable for our OSX users: they required separate installation of the git commandline tools.</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://wiggy.net/">Wichert</a>+</span>+++&mdash; <span class="date">Tue Jun 12 09:00:34 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-52daf652d7b7629489f942063cec87b7">++++<div class="comment-subject">++<a href="/design/assistant.html#comment-52daf652d7b7629489f942063cec87b7">Watch also possible with git?</a>++</div>++<div class="inlinecontent">+<p>Hi,</p>++<p>it seems that you put a lot of efforts in handling race conditions. Thats great. I wonder if the watch can also be used with git (i.e. changes are commited into git and not as annex)? I know that other projects follow this idea but why using different tools if the git-annex assistant could handle both...</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://www.klomp.eu/">klomp.eu</a>+</span>+++&mdash; <span class="date">Fri Jun 15 13:25:30 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-bcf6c709883506c83aa3111cc23bc7ff">++++<div class="comment-subject">++<a href="/design/assistant.html#comment-bcf6c709883506c83aa3111cc23bc7ff">Homebrew instead of MacPorts</a>++</div>++<div class="inlinecontent">+<p><a href="http://mxcl.github.com/homebrew/">Homebrew</a> is a much better package manager than MacPorts IMO.</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawldKnauegZulM7X6JoHJs7Gd5PnDjcgx-E">Matt</a>+</span>+++&mdash; <span class="date">Fri Jun 22 00:26:02 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-bbcaeb83ceffab6ec34d34db157a489e">++++<div class="comment-subject">++<a href="/design/assistant.html#comment-bbcaeb83ceffab6ec34d34db157a489e">comment 11</a>++</div>++<div class="inlinecontent">+<p>Yeah definately go with homebrew rather than macports if possible. macports and fink, whilst great systems, have a tendency to sort of create their own alternative-dimension of files within the system that just dont always feel particularly well integrated. As a result "brew" has become increasingly more popular to the point its almost ubuquitous now.</p>++<p>Plus its brew-doctor thing is awesome.</p>++<p>The best approach though thats agnostic to distro systems is to simply go for a generic installer.</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawneJXwhacIb0YvvdYFxhlNVpz6Wpg6V7AA">Shayne</a>+</span>+++&mdash; <span class="date">Sun Aug 12 20:37:35 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-f953069e70bcd5f6a3f05d1eb306325b">++++<div class="comment-subject">++<a href="/design/assistant.html#comment-f953069e70bcd5f6a3f05d1eb306325b">Multiple annexes?</a>++</div>++<div class="inlinecontent">+<p>Thank you for this great piece of software which is now becoming even better with the assistant.</p>++<p>Just one question: will one instance of the assistant be able to track multiple git annex repositories each building up their own network of annexes OR would I need to run multiple instances of the assistant?</p>++<p>Thanks,+Jörn</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawlu-fdXIt_RF9ggvg4zP0yBbtjWQwHAMS4">Jörn</a>+</span>+++&mdash; <span class="date">Thu Sep 20 12:10:29 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-6ddc18af9685a7ddbbe6e639e7b15feb">++++<div class="comment-subject">++<a href="/design/assistant.html#comment-6ddc18af9685a7ddbbe6e639e7b15feb">comment 13</a>++</div>++<div class="inlinecontent">+@Jörn, two days ago I added support in the webapp for multiple independent repositories. So you can create independent repos using it, and switch between them from a menu. Under the hood there are multiple git-annex assistant daemons running, but this is an implementation detail; it's not like these use any more memory or other resources than would a single daemon that managed multiple repositories.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Thu Sep 20 12:21:11 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-a38695b8a047c997862345ffe881d952">++++<div class="comment-subject">++<a href="/design/assistant.html#comment-a38695b8a047c997862345ffe881d952">you rock! &#x26; roadmap update?</a>++</div>++<div class="inlinecontent">+<p>joey, you rock. I just want to push on that point - it doesn't seem like there's that many tools that do what git-annex is trying to do out there, and you seem to be doing an incredible job at doing it, so this is great, keep going!</p>++<p>i was wondering - i am glad to see the progress, but it is unclear to me where you actually are in the roadmap. are things going according to plan? are we at month 3? 4? or 1-4? :) just little updates on that roadmap section above would be quite useful!</p>++<p>thanks again!</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://id.koumbit.net/anarcat">anarcat [id.koumbit.net]</a>+</span>+++&mdash; <span class="date">Fri Sep 21 00:25:58 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-269c4c315e1dac0d6c18069a9616c767">++++<div class="comment-subject">++<a href="/design/assistant.html#comment-269c4c315e1dac0d6c18069a9616c767">comment 15</a>++</div>++<div class="inlinecontent">+<p>We're on month 4 of work, and most of months 1-3 is done well enough for a first pass. Very little of what's listed in month 4 has happened yet, due to my being maybe 2 weeks behind schedule, but bits of <a href="./assistant/cloud.html">cloud</a> are being planned.</p>++<p>I've made a small adjustment, I think it'll make sense to spend a month on user-driven features before getting into Android.</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Fri Sep 21 01:25:53 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-f5af9f1fe608daa7eb6f45a4539311d0">++++<div class="comment-subject">++<a href="/design/assistant.html#comment-f5af9f1fe608daa7eb6f45a4539311d0">Maybe a DEB?2</a>++</div>++<div class="inlinecontent">+Month 3 was all about easy setup, so I kind of expected to download a deb package and just install it, not to download a whole bunch of haskell libraries. Is there a chance that you will release some packages?++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://launchpad.net/~gdr-go2">gdr-go2</a>+</span>+++&mdash; <span class="date">Thu Sep 27 05:44:14 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-3f7c7b52d5fadcf2e8a38e741d44ed61">++++<div class="comment-subject">++<a href="/design/assistant.html#comment-3f7c7b52d5fadcf2e8a38e741d44ed61">comment 17</a>++</div>++<div class="inlinecontent">+@gdr A package with the assistant is available in Debian unstable.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Thu Sep 27 14:44:11 2012</span>+</div>++++<div style="clear: both"></div>+</div>+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="../assistant.html">assistant</a>++<a href="../design.html">design</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:40 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:40 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/design/assistant/OSX.html view
@@ -0,0 +1,196 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>OSX</title>++<link rel="stylesheet" href="../../style.css" type="text/css" />++<link rel="stylesheet" href="../../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../../index.html">git-annex</a>/ ++<a href="../../design.html">design</a>/ ++<a href="../assistant.html">assistant</a>/ ++</span>+<span class="title">+OSX++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../../install.html">install</a></li>+<li><a href="../../assistant.html">assistant</a></li>+<li><a href="../../walkthrough.html">walkthrough</a></li>+<li><a href="../../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../../comments.html">comments</a></li>+<li><a href="../../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>Misc OSX porting things:</p>++<ul>+<li>autostart the assistant on OSX, using launchd <strong>done</strong></li>+<li>icon to start webapp <strong>done</strong></li>+<li>use FSEvents to detect file changes (better than kqueue) <strong>done</strong></li>+<li>Use OSX's "network reachability functionality" to detect when on a network+<a href="http://developer.apple.com/library/mac/#documentation/Networking/Conceptual/SystemConfigFrameworks/SC_Intro/SC_Intro.html#//apple_ref/doc/uid/TP40001065">http://developer.apple.com/library/mac/#documentation/Networking/Conceptual/SystemConfigFrameworks/SC_Intro/SC_Intro.html#//apple_ref/doc/uid/TP40001065</a></li>+</ul>+++<p>Bugs:</p>++<div  class="feedlink">+++</div>++++++</div>++++<div id="comments">+<div  class="feedlink">+++</div>+<div class="comment" id="comment-7295a75b6b4af9abb6a6437381580f2f">++++<div class="comment-subject">++<a href="/design/assistant/OSX.html#comment-7295a75b6b4af9abb6a6437381580f2f">Mount detection</a>++</div>++<div class="inlinecontent">+<p>regarding the current mount polling on OSX: why not use the NSNotificationCenter for being notified on mount events on OSX?</p>++<p>Details see:</p>++<ol>+<li><a href="http://stackoverflow.com/questions/12409458/detect-when-a-volume-is-mounted-on-os-x">http://stackoverflow.com/questions/12409458/detect-when-a-volume-is-mounted-on-os-x</a></li>+<li><a href="http://stackoverflow.com/questions/6062299/how-to-add-an-observer-to-nsnotificationcenter-in-a-c-class-using-objective-c">http://stackoverflow.com/questions/6062299/how-to-add-an-observer-to-nsnotificationcenter-in-a-c-class-using-objective-c</a></li>+<li><a href="https://developer.apple.com/library/mac/#documentation/CoreFoundation/Reference/CFNotificationCenterRef/Reference/reference.html#//apple_ref/doc/uid/20001438">https://developer.apple.com/library/mac/#documentation/CoreFoundation/Reference/CFNotificationCenterRef/Reference/reference.html#//apple_ref/doc/uid/20001438</a></li>+</ol>++++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawlu-fdXIt_RF9ggvg4zP0yBbtjWQwHAMS4">Jörn</a>+</span>+++&mdash; <span class="date">Fri Sep 21 05:23:34 2012</span>+</div>++++<div style="clear: both"></div>+</div>+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="../assistant.html">assistant</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:40 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:40 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/design/assistant/android.html view
@@ -0,0 +1,553 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>android</title>++<link rel="stylesheet" href="../../style.css" type="text/css" />++<link rel="stylesheet" href="../../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../../index.html">git-annex</a>/ ++<a href="../../design.html">design</a>/ ++<a href="../assistant.html">assistant</a>/ ++</span>+<span class="title">+android++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../../install.html">install</a></li>+<li><a href="../../assistant.html">assistant</a></li>+<li><a href="../../walkthrough.html">walkthrough</a></li>+<li><a href="../../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../../comments.html">comments</a></li>+<li><a href="../../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<h3>goals</h3>++<ol>+<li>Get git-annex working at the command line in Android,+along with all the programs it needs, and the assistant. <strong>done</strong></li>+<li>Deal with crippled filesystem; no symlinks; etc. <strong>done</strong></li>+<li>Get an easy to install Android app built. <strong>done</strong></li>+<li>Get the webapp working. Needs Template Haskell, or+switching to <a href="http://www.yesodweb.com/blog/2012/10/yesod-pure">http://www.yesodweb.com/blog/2012/10/yesod-pure</a>.</li>+<li>Possibly, switch from running inside terminal app to real standalone app.+See <a href="https://github.com/neurocyte/android-haskell-activity">https://github.com/neurocyte/android-haskell-activity</a>+and <a href="https://github.com/neurocyte/foreign-jni">https://github.com/neurocyte/foreign-jni</a>.</li>+</ol>+++<h3>Android specific features</h3>++<p>The app should be aware of power status, and avoid expensive background+jobs when low on battery or run flat out when plugged in.</p>++<p>The app should be aware of network status, and avoid expensive data+transfers when not on wifi. This may need to be configurable.</p>++<h2>TODO</h2>++<ul>+<li>autostart any configured assistants. Best on boot, but may need to only+do it when app is opened for the first time.</li>+<li>Don't make app initially open terminal, but go to a page that+allows opening the webapp or terminal.</li>+<li>I have seen an assistant thread crash with an interrupted system call+when the device went to sleep while it was running. Auto-detect and deal with+that somehow.</li>+<li>Make git stop complaining that "warning: no threads uspport, ignoring --threads"</li>+<li>git does not support http remotes. To fix, need to port libcurl and+allow git to link to it.</li>+<li>getEnvironment is broken on Android <a href="https://github.com/neurocyte/ghc-android/issues/7">https://github.com/neurocyte/ghc-android/issues/7</a>+and a few places use it.</li>+<li>XMPP support. I got all haskell libraries installed, but it fails to find+several C libraries at link time.</li>+<li>Get local pairing to work. network-multicast and network-info don't+currently install.</li>+<li>Get test suite to pass. Current failure is because <code>git fetch</code> is somehow+broken with local repositories.</li>+</ul>+++</div>++++<div id="comments">+<div  class="feedlink">+++</div>+<div class="comment" id="comment-cc3bb98d664d63afb99a641556867b0a">++++<div class="comment-subject">++<a href="/design/assistant/android.html#comment-cc3bb98d664d63afb99a641556867b0a">FAT symlinks</a>++</div>++<div class="inlinecontent">+It's a linux kernel so perhaps another option would be to create a big file and mount -o loop++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://launchpad.net/~gdr-go2">gdr-go2</a>+</span>+++&mdash; <span class="date">Mon May 28 14:12:10 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-944ce2fb20413b638d823bd9bd068717">++++<div class="comment-subject">++<a href="/design/assistant/android.html#comment-944ce2fb20413b638d823bd9bd068717">re @  gdr-go2 </a>++</div>++<div class="inlinecontent">+<code>mount</code> requires root and you'll have still the 4gb limit for your image by FAT. some phones (e.g. galaxy nexus) already use <code>ext4</code> for <code>/sdcard</code> though.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawlhIMPGF1E0XEJKV6j6-PFzAxA1-nIlydo">Bernhard</a>+</span>+++&mdash; <span class="date">Mon Sep 10 15:34:00 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-8b4190ffa50567ca74ef667a7461fcb4">++++<div class="comment-subject">++<a href="/design/assistant/android.html#comment-8b4190ffa50567ca74ef667a7461fcb4">GHC and Android</a>++</div>++<div class="inlinecontent">+<p>I played around a bit with GHC and Android today. It isn't really a result, but maybe useful for someone out there.</p>++<p>I have a Debian <code>chroot</code> environment on my Android device (howto: <a href="http://www.saurik.com/id/10/">http://www.saurik.com/id/10/</a>). In the Debian box:</p>++<pre><code>$ cat arm.hs+main = do+  putStrLn "Hello ARM"+$ ghc -static --make arm.hs+Linking arm ...+$ ldd arm+libgmp.so.3 =&gt; /usr/lib/libgmp.so.3 (0x40233000)+libm.so.6 =&gt; /lib/libm.so.6 (0x400c8000)+libffi.so.5 =&gt; /usr/lib/libffi.so.5 (0x401b1000)+librt.so.1 =&gt; /lib/librt.so.1 (0x40171000)+libdl.so.2 =&gt; /lib/libdl.so.2 (0x40180000)+libgcc_s.so.1 =&gt; /lib/libgcc_s.so.1 (0x4018b000)+libc.so.6 =&gt; /lib/libc.so.6 (0x40282000)+/lib/ld-linux.so.3 (0x400a2000)+libpthread.so.0 =&gt; /lib/libpthread.so.0 (0x4007e000)+</code></pre>++<p>well, that isn't really static. tell the linker to build a static binary (those are arguments to <code>ld</code>):</p>++<pre><code>$ ghc --make arm.hs -optl-static -optl-pthread+[1 of 1] Compiling Main             ( arm.hs, arm.o )+Linking arm ...+$ file arm+arm: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, for GNU/Linux 2.6.18, not stripped+$ ldd arm+    not a dynamic executable+$ ./arm+Hello ARM+</code></pre>++<p>now, get this (quite big) binary into the normal android environment, using <code>adb</code>, <code>SSHDroid</code> or whatever:</p>++<pre><code>% cd /data/local/tmp # assuming destination of file transfer+% ./arm+arm: mkTextEncoding: invalid argument (Invalid argument)+</code></pre>++<p>looking in the source of <code>System.IO</code> it seems like an <code>iconv</code> issue. So, there's still some dynamic dependency in there... <em>sigh</em></p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawlhIMPGF1E0XEJKV6j6-PFzAxA1-nIlydo">Bernhard</a>+</span>+++&mdash; <span class="date">Mon Sep 10 17:58:28 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-4062560571c35e4e39a1cce53e217ad3">++++<div class="comment-subject">++<a href="/design/assistant/android.html#comment-4062560571c35e4e39a1cce53e217ad3">comment 4</a>++</div>++<div class="inlinecontent">+<p>Thanks Bernard, that's really massively useful. It makes sense -- statically building with libc should work, the Android kernel is still Linux after all.</p>++<p>To get past the iconv problem, I think all you need is part of the <code>locales</code> package from your linux system installed on the Android. Probably just a few of the data files from /usr/share/i18n/charmaps/</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Mon Sep 10 22:12:45 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-c427cd8355b784544fc2d8160a70b1b8">++++<div class="comment-subject">++<a href="/design/assistant/android.html#comment-c427cd8355b784544fc2d8160a70b1b8">comment 5</a>++</div>++<div class="inlinecontent">+<p><code>/usr/share/i18n/</code> does not exists on my Debian ARM system :/</p>++<p>however, <code>strace ./arm</code> in the debian chroot reveals that some files from <code>/usr/lib/gconv/</code> are loaded:</p>++<pre><code>[...]+open("/usr/lib/gconv/UTF-32.so", O_RDONLY) = 3+read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\4\4\0\0004\0\0\0"..., 512) = 512+[...]+</code></pre>++<p>full log: <a href="http://wien.tomnetworks.com/strace_arm">http://wien.tomnetworks.com/strace_arm</a>.  Unfortunately, I don't have <code>strace</code> in the android userland for comparison.</p>++<p>Just copying the related <code>gconv</code> files didn't work. I don't have so much time at the moment, I'll investigate further in some days or so.</p>++<p>At least, output using <code>error :: String -&gt; a</code> does work :-)</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawlhIMPGF1E0XEJKV6j6-PFzAxA1-nIlydo">Bernhard</a>+</span>+++&mdash; <span class="date">Tue Sep 11 05:34:42 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-a21b5fd3e124c4da7299bf4bdb5c5011">++++<div class="comment-subject">++<a href="/design/assistant/android.html#comment-a21b5fd3e124c4da7299bf4bdb5c5011">comment 6</a>++</div>++<div class="inlinecontent">+<p>Just so this does not get lost: For better or for worse, the vanilla Android devices stopped shipping with micro-SD support in 2011 (or 2010 if the Nexus S does not support them either; on sketchy GPRS so not googling around). Most higher-end Android devices ship with at least 8 GiB of on-board Flash storage, some even go up to 64 GiB.</p>++<p>IMHO, this would make it viable to first get git-annex working on Android without regard for FAT.</p>++<p>The obvious advantage is that porting should be easier and quicker.</p>++<p>The obvious downside is that this may mean revisiting some parts of the code later.</p>++<p>-- Richard</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U">Richard</a>+</span>+++&mdash; <span class="date">Tue Oct 30 04:44:32 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-ca7583eb7e094478bc73fe8a7a33d62c">++++<div class="comment-subject">++<a href="/design/assistant/android.html#comment-ca7583eb7e094478bc73fe8a7a33d62c">comment 7</a>++</div>++<div class="inlinecontent">+<p>Actually, this is something that would be ideal for a poll:</p>++<p>Should FAT-based Android repos be implemented:</p>++<ul>+<li>Immediately</li>+<li>After the initial release of the Android app is working</li>+<li>Before the kickstarter ends</li>+<li>Not at all</li>+</ul>+++<p>Also, as another data point, the FAT-based SD card can be mounted as USB storage by any computer an Android device is connected to whereas the EXT4-based root FS can only be accessed via MTP.</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U">Richard</a>+</span>+++&mdash; <span class="date">Tue Oct 30 04:51:17 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-b578ffb2e84c147759f28c348963c284">++++<div class="comment-subject">++<a href="/design/assistant/android.html#comment-b578ffb2e84c147759f28c348963c284">Terminal IDE</a>++</div>++<div class="inlinecontent">+<p>I use Terminal IDE on android, which is 'sort of a shell environment'.</p>++<p>It has bash, git, dropbear ssh, and vim. It is a bit limited, but it does feel like a linux shell.</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawnZEanlyzay_QlEAL0CWpyZcRTyN7vay8U">Carlo</a>+</span>+++&mdash; <span class="date">Wed Nov 21 17:46:19 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-f01ded73ad68c9301348ed074a534048">++++<div class="comment-subject">++<a href="/design/assistant/android.html#comment-f01ded73ad68c9301348ed074a534048">Feature request: Events triggered on wifi SSID or connection state</a>++</div>++<div class="inlinecontent">+<p>I'd like to have my phone sync a bunch of files when I'm at home and when I get to work, have them synced to my work machine, deleted off my phone and when I get home, also deleted off my home machine.</p>++<p>This will allow incremental backups to a local folder at home and I can then "mule" my files, sneaker-net style, to work with zero user intervention. It only works if events can be triggered or I can combine a triggering app with a special android intent for both ends of my trip.</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawl7ciFZWmffuw6sLRww3CcL_F5ItsttL9w">Aaron</a>+</span>+++&mdash; <span class="date">Tue Jan  8 09:04:05 2013</span>+</div>++++<div style="clear: both"></div>+</div>+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="../assistant.html">assistant</a>++<a href="./desymlink.html">desymlink</a>++<a href="./partial_content.html">partial content</a>++<a href="./polls/Android.html">polls/Android</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:40 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:40 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/design/assistant/cloud.html view
@@ -0,0 +1,324 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>cloud</title>++<link rel="stylesheet" href="../../style.css" type="text/css" />++<link rel="stylesheet" href="../../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../../index.html">git-annex</a>/ ++<a href="../../design.html">design</a>/ ++<a href="../assistant.html">assistant</a>/ ++</span>+<span class="title">+cloud++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../../install.html">install</a></li>+<li><a href="../../assistant.html">assistant</a></li>+<li><a href="../../walkthrough.html">walkthrough</a></li>+<li><a href="../../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../../comments.html">comments</a></li>+<li><a href="../../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>The <a href="./syncing.html">syncing</a> design assumes the network is connected. But it's often+not in these pre-IPV6 days, so the cloud needs to be used to bridge between+LANS.</p>++<h2>The cloud notification problem (<strong>done</strong>)</h2>++<p>Alice and Bob have repos, and there is a cloud remote they both share.+Alice adds a file; the assistant transfers it to the cloud remote.+How does Bob find out about it?</p>++<p>There are two parts to this problem. Bob needs to find out that there's+been a change to Alice's git repo. Then he needs to pull from Alice's git repo,+or some other repo in the cloud she pushed to. Once both steps are done,+the assistant will transfer the file from the cloud to Bob.</p>++<ul>+<li>dvcs-autosync uses xmppp; all repos need to have the same xmpp account+configured, and send self-messages. An alternative would be to have+different accounts that join a channel or message each other. Still needs+account configuration.</li>+<li>irc could be used. With a default irc network, and an agreed-upon channel,+no configuration should be needed. IRC might be harder to get through+some firewalls, and is prone to netsplits, etc. IRC networks have reasons+to be wary of bots using them. Only basic notifications could be done over+irc, as it has little security.</li>+<li>When there's a ssh server involved, code could be run on it to notify+logged-in clients. But this is not a general solution to this problem.</li>+<li>pubsubhubbub does not seem like an option; its hubs want to pull down+a feed over http.</li>+</ul>+++<p>See <a href="./xmpp.html">xmpp</a> for design of git-annex's use of xmpp for push notifications.</p>++<h2>storing git repos in the cloud <strong>done for XMPP</strong></h2>++<p>Of course, one option is to just use github etc to store the git repo.</p>++<p>Two things can store git repos in Amazon S3:+* <a href="http://gabrito.com/post/storing-git-repositories-in-amazon-s3-for-high-availability">http://gabrito.com/post/storing-git-repositories-in-amazon-s3-for-high-availability</a>+* <a href="http://wiki.cs.pdx.edu/oss2009/index/projects/gits3.html">http://wiki.cs.pdx.edu/oss2009/index/projects/gits3.html</a></p>++<p>Another option is to not store the git repo in the cloud, but push/pull+peer-to-peer. When peers cannot directly talk to one-another, this could be+bounced through something like XMPP. This is <strong>done</strong> for <a href="./xmpp.html">xmpp</a>!</p>++<p>Another option: Use <a href="https://github.com/blake2-ppc/git-remote-gcrypt">https://github.com/blake2-ppc/git-remote-gcrypt</a> to store+git repo encrypted on cloud storage.</p>++</div>++++<div id="comments">+<div  class="feedlink">+++</div>+<div class="comment" id="comment-bff38388465cb7c83fd1440853a45410">++++<div class="comment-subject">++<a href="/design/assistant/cloud.html#comment-bff38388465cb7c83fd1440853a45410">is ftp an option?</a>++</div>++<div class="inlinecontent">+for people only having ftp-access to there storage.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawn7Oyqusvn0oONFtVhCx5gRAcvPjyRMcBI">Michaël</a>+</span>+++&mdash; <span class="date">Wed May 30 06:44:12 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-5aea3eb7e8aec1e2110b6a4f1a843433">++++<div class="comment-subject">++<a href="/design/assistant/cloud.html#comment-5aea3eb7e8aec1e2110b6a4f1a843433">Cloud Service Limitations</a>++</div>++<div class="inlinecontent">+<p>Hey Joey!</p>++<p>I'm not very tech savvy, but here is my question.+I think for all cloud service providers, there is an upload limitation on how big one file may be.+For example, I can't upload a file bigger than 100 MB on box.net.+Does this affect git-annex at all? Will git-annex automatically split the file depending on the cloud provider or will I have to create small RAR archives of one large file to upload them?</p>++<p>Thanks!+James</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawkq0-zRhubO6kR9f85-5kALszIzxIokTUw">James</a>+</span>+++&mdash; <span class="date">Sun Jun 10 22:15:04 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-c0b4e1ebdb4ac122b1b1e8723336544e">++++<div class="comment-subject">++<a href="/design/assistant/cloud.html#comment-c0b4e1ebdb4ac122b1b1e8723336544e">re: cloud</a>++</div>++<div class="inlinecontent">+Yes, git-annex has to split files for certian providers. I already added support for this as part of my first pass at supporting box.com, see <a href="../../tips/using_box.com_as_a_special_remote.html">using box.com as a special remote</a>.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Mon Jun 11 00:48:08 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-5e27fcb1377b57315d90fc31268e4abb">++++<div class="comment-subject">++<a href="/design/assistant/cloud.html#comment-5e27fcb1377b57315d90fc31268e4abb">OwnCloud</a>++</div>++<div class="inlinecontent">+<p>“Google drive (attractive because it's free, only 5 gb tho)”</p>++<p>Just in case somebody also wants their 5GB of disk space in the cloud, consider using some of the <a href="http://owncloud.org/providers/">owncloud providers</a>. They also offer that amount, but they use free software for everything, using standard protocols (WebDav mostly, because is well supported in all OS).</p>++<p>Git Annex works with them through davfs2, but it would be great if it could support this other program/protocol (OwnCloud/WebDAV) in a more integrated way.</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawk9XEh8pxrJxZxIkyK7lWaA7QG1UWt9lgU">Gugelplus</a>+</span>+++&mdash; <span class="date">Mon Aug 27 16:43:19 2012</span>+</div>++++<div style="clear: both"></div>+</div>+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./comment_15_68c98a27083567f20c2e6bc2a760991b.html">comment 15 68c98a27083567f20c2e6bc2a760991b</a>++<a href="./polls/prioritizing_special_remotes.html">polls/prioritizing special remotes</a>++<a href="./xmpp.html">xmpp</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:40 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:40 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/design/assistant/deltas.html view
@@ -0,0 +1,176 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>deltas</title>++<link rel="stylesheet" href="../../style.css" type="text/css" />++<link rel="stylesheet" href="../../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../../index.html">git-annex</a>/ ++<a href="../../design.html">design</a>/ ++<a href="../assistant.html">assistant</a>/ ++</span>+<span class="title">+deltas++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../../install.html">install</a></li>+<li><a href="../../assistant.html">assistant</a></li>+<li><a href="../../walkthrough.html">walkthrough</a></li>+<li><a href="../../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../../comments.html">comments</a></li>+<li><a href="../../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>Speed up syncing of modified versions of existing files.</p>++<p>One simple way is to find the key of the old version of a file that's+being transferred, so it can be used as the basis for rsync, or any+other similar transfer protocol.</p>++<p>For remotes that don't use rsync, a poor man's version could be had by+chunking each object into multiple parts. Only modified parts need be+transferred. Sort of sub-keys to the main key being stored.</p>++</div>++++<div id="comments">+<div  class="feedlink">+++</div>+<div class="comment" id="comment-16106e3d96459d2de00f385071acaff5">++++<div class="comment-subject">++<a href="/design/assistant/deltas.html#comment-16106e3d96459d2de00f385071acaff5">zsync?</a>++</div>++<div class="inlinecontent">+zsync.moria.org.uk may have broken some of the ground here.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawkfHTPsiAcHEEN7Xl7WxiZmYq-vX7azxFY">Vincent</a>+</span>+++&mdash; <span class="date">Mon Sep 10 08:35:45 2012</span>+</div>++++<div style="clear: both"></div>+</div>+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="../assistant.html">assistant</a>++<a href="./polls/goals_for_April.html">polls/goals for April</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Fri Sep 28 01:45:57 2012</span>+<!-- Created <span class="date">Fri Sep 28 01:45:57 2012</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/design/assistant/inotify.html view
@@ -0,0 +1,549 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>inotify</title>++<link rel="stylesheet" href="../../style.css" type="text/css" />++<link rel="stylesheet" href="../../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../../index.html">git-annex</a>/ ++<a href="../../design.html">design</a>/ ++<a href="../assistant.html">assistant</a>/ ++</span>+<span class="title">+inotify++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../../install.html">install</a></li>+<li><a href="../../assistant.html">assistant</a></li>+<li><a href="../../walkthrough.html">walkthrough</a></li>+<li><a href="../../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../../comments.html">comments</a></li>+<li><a href="../../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>"git annex watch" command, which runs, in the background, watching via+inotify for changes, and automatically annexing new files, etc. Now+available!</p>++<div class="toc">+	<ol>+		<li class="L2"><a href="#index1h2">known bugs</a>+		</li>+		<li class="L2"><a href="#index2h2">todo</a>+		</li>+		<li class="L2"><a href="#index3h2">beyond Linux</a>+		</li>+		<li class="L2"><a href="#index4h2">the races</a>+		</li>+		<li class="L2"><a href="#index5h2">done</a>+		</li>+	</ol>+</div>+++<h2><a name="index1h2"></a>known bugs</h2>++<ul>+<li>Kqueue has to open every directory it watches, so too many directories+will run it out of the max number of open files (typically 1024), and fail.+I may need to fork off multiple watcher processes to handle this.+See <span class="createlink">bug</span>. (Does not affect+OSX any longer, only other BSDs).</li>+</ul>+++<h2><a name="index2h2"></a>todo</h2>++<ul>+<li>Run niced and ioniced? Seems to make sense, this is a background job.</li>+<li>configurable option to only annex files meeting certian size or+filename criteria</li>+<li>option to check files not meeting annex criteria into git directly,+automatically</li>+<li>honor .gitignore, not adding files it excludes (difficult, probably+needs my own .gitignore parser to avoid excessive running of git commands+to check for ignored files)</li>+<li>There needs to be a way for a new version of git-annex, when installed,+to restart any running watch or assistant daemons. Or for the daemons+to somehow detect it's been upgraded and restart themselves. Needed+to allow for incompatable changes and, I suppose, for security upgrades..</li>+</ul>+++<h2><a name="index3h2"></a>beyond Linux</h2>++<p>I'd also like to support OSX and if possible the BSDs.</p>++<ul>+<li><p>kqueue (<a href="http://hackage.haskell.org/package/kqueue">haskell bindings</a>)+is supported by FreeBSD, OSX, and other BSDs.</p>++<p>In kqueue, to watch for changes to a file, you have to have an open file+descriptor to the file. This wouldn't scale.</p>++<p>Apparently, a directory can be watched, and events are generated when+files are added/removed from it. You then have to scan to find which+files changed. <a href="https://developer.apple.com/library/mac/#samplecode/FileNotification/Listings/Main_c.html#//apple_ref/doc/uid/DTS10003143-Main_c-DontLinkElementID_3">example</a></p>++<p>Gamin does the best it can with just kqueue, supplimented by polling.+The source file <code>server/gam_kqueue.c</code> makes for interesting reading.+Using gamin to do the heavy lifting is one option.+(<a href="http://hackage.haskell.org/package/hlibfam">haskell bindings</a> for FAM;+gamin shares the API)</p>++<p>kqueue does not seem to provide a way to tell when a file gets closed,+only when it's initially created. Poses problems..</p>++<ul>+<li><a href="http://www.freebsd.org/cgi/man.cgi?query=kqueue&amp;apropos=0&amp;sektion=0&amp;format=html">man page</a></li>+<li><a href="https://github.com/gorakhargosh/watchdog/blob/master/src/watchdog/observers/kqueue.py">https://github.com/gorakhargosh/watchdog/blob/master/src/watchdog/observers/kqueue.py</a> (good example program)</li>+</ul>+++<p><em>kqueue is now supported</em></p></li>+<li><p>hfsevents (<a href="http://hackage.haskell.org/package/hfsevents">haskell bindings</a>)+is OSX specific.</p>++<p>Originally it was only directory level, and you were only told a+directory had changed and not which file. Based on the haskell+binding's code, from OSX 10.7.0, file level events were added.</p>++<p>This will be harder for me to develop for, since I don't have access to+OSX machines..</p>++<p>hfsevents does not seem to provide a way to tell when a file gets closed,+only when it's initially created. Poses problems..</p>++<ul>+<li><a href="https://developer.apple.com/library/mac/#documentation/Darwin/Conceptual/FSEvents_ProgGuide/Introduction/Introduction.html">https://developer.apple.com/library/mac/#documentation/Darwin/Conceptual/FSEvents_ProgGuide/Introduction/Introduction.html</a></li>+<li><a href="http://pypi.python.org/pypi/MacFSEvents/0.2.8">http://pypi.python.org/pypi/MacFSEvents/0.2.8</a> (good example program)</li>+<li><a href="https://github.com/gorakhargosh/watchdog/blob/master/src/watchdog/observers/fsevents.py">https://github.com/gorakhargosh/watchdog/blob/master/src/watchdog/observers/fsevents.py</a> (good example program)</li>+</ul>+</li>+<li><p>Windows has a Win32 ReadDirectoryChangesW, and perhaps other things.</p></li>+</ul>+++<h2><a name="index4h2"></a>the races</h2>++<p>Many races need to be dealt with by this code. Here are some of them.</p>++<ul>+<li><p>File is added and then removed before the add event starts.</p>++<p>Not a problem; The add event does nothing since the file is not present.</p></li>+<li><p>File is added and then removed before the add event has finished+processing it.</p>++<p><strong>Minor problem</strong>; When the add's processing of the file (checksum and so+on) fails due to it going away, there is an ugly error message, but+things are otherwise ok.</p></li>+<li><p>File is added and then replaced with another file before the annex add+moves its content into the annex.</p>++<p>Fixed this problem; Now it hard links the file to a temp directory and+operates on the hard link, which is also made unwritable.</p></li>+<li><p>File is added and then replaced with another file before the annex add+makes its symlink.</p>++<p><strong>Minor problem</strong>; The annex add will fail creating its symlink since+the file exists. There is an ugly error message, but the second add+event will add the new file.</p></li>+<li><p>File is added and then replaced with another file before the annex add+stages the symlink in git.</p>++<p>Now fixed; <code>git annex watch</code> avoids running <code>git add</code> because of this+race. Instead, it stages symlinks directly into the index, without+looking at what's currently on disk.</p></li>+<li><p>Link is moved, fixed link is written by fix event, but then that is+removed by the user and replaced with a file before the event finishes.</p>++<p>Now fixed; same fix as previous race above.</p></li>+<li><p>File is removed and then re-added before the removal event starts.</p>++<p>Not a problem; The removal event does nothing since the file exists,+and the add event replaces it in git with the new one.</p></li>+<li><p>File is removed and then re-added before the removal event finishes.</p>++<p>Not a problem; The removal event removes the old file from the index, and+the add event adds the new one.</p></li>+<li><p>Symlink appears, but is then deleted before it can be processed.</p>++<p>Leads to an ugly message, otherwise no problem:</p>++<p>  ./me: readSymbolicLink: does not exist (No such file or directory)</p>++<p>Here <code>me</code> is a file that was in a conflicted merge, which got+removed as part of the resolution. This is probably coming from the watcher+thread, which sees the newly added symlink (created by the git merge),+but finds it deleted (by the conflict resolver) by the time it processes it.</p></li>+</ul>+++<h2><a name="index5h2"></a>done</h2>++<ul>+<li>on startup, add any files that have appeared since last run <strong>done</strong></li>+<li>on startup, fix the symlinks for any renamed links <strong>done</strong></li>+<li>on startup, stage any files that have been deleted since last run+(seems to require a <code>git commit -a</code> on startup, or at least a+<code>git add --update</code>, which will notice deleted files) <strong>done</strong></li>+<li>notice new files, and git annex add <strong>done</strong></li>+<li>notice renamed files, auto-fix the symlink, and stage the new file location+<strong>done</strong></li>+<li>handle cases where directories are moved outside the repo, and stop+watching them <strong>done</strong></li>+<li>when a whole directory is deleted or moved, stage removal of its+contents from the index <strong>done</strong></li>+<li>notice deleted files and stage the deletion+(tricky; there's a race with add since it replaces the file with a symlink..)+<strong>done</strong></li>+<li>Gracefully handle when the default limit of 8192 inotified directories+is exceeded. This can be tuned by root, so help the user fix it.+<strong>done</strong></li>+<li>periodically auto-commit staged changes (avoid autocommitting when+lots of changes are coming in) <strong>done</strong></li>+<li>coleasce related add/rm events for speed and less disk IO <strong>done</strong></li>+<li>don't annex <code>.gitignore</code> and <code>.gitattributes</code> files <strong>done</strong></li>+<li>run as a daemon <strong>done</strong></li>+<li><p>A process has a file open for write, another one closes it,+and so it's added. Then the first process modifies it.</p>++<p>Or, a process has a file open for write when <code>git annex watch</code> starts+up, it will be added to the annex. If the process later continues+writing, it will change content in the annex.</p>++<p>This changes content in the annex, and fsck will later catch+the inconsistency.</p>++<p>Possible fixes:</p>++<ul>+<li><p>Somehow track or detect if a file is open for write by any processes.+<code>lsof</code> could be used, although it would be a little slow.</p>++<p>Here's one way to avoid the slowdown: When a file is being added,+set it read-only, and hard-link it into a quarantine directory,+remembering both filenames.+Then use the batch change mode code to detect batch adds and bundle+them together.+Just before committing, lsof the quarantine directory. Any files in+it that are still open for write can just have their write bit turned+back on and be deleted from quarantine, to be handled when their writer+closes. Files that pass quarantine get added as usual. This avoids+repeated lsof calls slowing down adds, but does add a constant factor+overhead (0.25 seconds lsof call) before any add gets committed. <strong>done</strong></p></li>+<li><p>Or, when possible, making a copy on write copy before adding the file+would avoid this.</p></li>+<li>Or, as a last resort, make an expensive copy of the file and add that.</li>+<li>Tracking file opens and closes with inotify could tell if any other+processes have the file open. But there are problems.. It doesn't+seem to differentiate between files opened for read and for write.+And there would still be a race after the last close and before it's+injected into the annex, where it could be opened for write again.+Would need to detect that and undo the annex injection or something.</li>+</ul>+</li>+<li><p>If a file is checked into git as a normal file and gets modified+(or merged, etc), it will be converted into an annexed file.+See <span class="createlink">day 7  bugfixes</span>. <strong>done</strong>; we always check ls-files now</p></li>+<li>When you <code>git annex unlock</code> a file, it will immediately be re-locked.+See <span class="createlink">watcher commits unlocked files</span>. Seems fixed now?</li>+</ul>+++</div>++++<div id="comments">+<div  class="feedlink">+++</div>+<div class="comment" id="comment-532957e00093e922ead28eeab8806a04">++++<div class="comment-subject">++<a href="/design/assistant/inotify.html#comment-532957e00093e922ead28eeab8806a04">watch branch?</a>++</div>++<div class="inlinecontent">+<p>Hello there? Where can I find more info about this git watch branch?+Keep up the good work!</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawnV2c63kDc6X21a1H81me1mIenUCScd2Gs">Emanuele</a>+</span>+++&mdash; <span class="date">Fri Jun  1 15:19:17 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-6934e371956835434618894470e16cbc">++++<div class="comment-subject">++<a href="/design/assistant/inotify.html#comment-6934e371956835434618894470e16cbc">comment 1</a>++</div>++<div class="inlinecontent">+I would find it useful if the watch command could 'git add' new files (instead of 'git annex add') for certain repositories.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://ciffer.net/~svend/">svend [ciffer.net]</a>+</span>+++&mdash; <span class="date">Mon Jun  4 15:42:07 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-f792b5b56ba6dd7c7566315975ac5ed1">++++<div class="comment-subject">++<a href="/design/assistant/inotify.html#comment-f792b5b56ba6dd7c7566315975ac5ed1">comment 2</a>++</div>++<div class="inlinecontent">+I think it's already on the list: "configurable option to only annex files meeting certian size or filename criteria" -- files not meeting those criteria would just be git added.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Mon Jun  4 15:46:03 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-651cae71218a94050ec80910dfb758d8">++++<div class="comment-subject">++<a href="/design/assistant/inotify.html#comment-651cae71218a94050ec80910dfb758d8">comment 3</a>++</div>++<div class="inlinecontent">+In relation to OSX support, hfsevents (or supporting hfs is probably a bad idea), its very osx specific and users who are moving usb keys and disks between systems will probably end up using fat32/exfat/vfat disks around. Also if you want I can lower the turn around time for the OSX auto-builder that I have setup to every 1 or 2mins? would that help?++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus">Jimmy</a>+</span>+++&mdash; <span class="date">Sun Jun 17 04:52:32 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-bf6d49e300fb8e3934b600b1a9a3b687">++++<div class="comment-subject">++<a href="/design/assistant/inotify.html#comment-bf6d49e300fb8e3934b600b1a9a3b687">comment 4</a>++</div>++<div class="inlinecontent">+<p>hfsevents seems usable, git-annex does not need to watch for file changes on remotes on other media.</p>++<p>But, trying kqueue first.</p>++<p>You could perhaps run the autobuilder on a per-commit basis..</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Sun Jun 17 12:39:43 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-fea4b173ef5a9707b1c71bb2482ab6e7">++++<div class="comment-subject">++<a href="/design/assistant/inotify.html#comment-fea4b173ef5a9707b1c71bb2482ab6e7">comment 5</a>++</div>++<div class="inlinecontent">+okay, I've gotten gitbuilder to poll the git repo every minute for changes, gitbuilder doesn't build every commit. It doesn't work like that, it checks out the master and builds that. If there is a failure it automatically bisects to find out where the problem first got introduced. Hope the change to the builder helps!++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus">Jimmy</a>+</span>+++&mdash; <span class="date">Sun Jun 17 17:42:59 2012</span>+</div>++++<div style="clear: both"></div>+</div>+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">++++++++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:40 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:40 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/design/assistant/pairing.html view
@@ -0,0 +1,219 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>pairing</title>++<link rel="stylesheet" href="../../style.css" type="text/css" />++<link rel="stylesheet" href="../../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../../index.html">git-annex</a>/ ++<a href="../../design.html">design</a>/ ++<a href="../assistant.html">assistant</a>/ ++</span>+<span class="title">+pairing++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../../install.html">install</a></li>+<li><a href="../../assistant.html">assistant</a></li>+<li><a href="../../walkthrough.html">walkthrough</a></li>+<li><a href="../../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../../comments.html">comments</a></li>+<li><a href="../../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>For git-annex to be able to clone its repo to another host, it'd be good to+have some way of pairing devices.</p>++<h2>security</h2>++<p>Pairing uses its own network protocol, built on top of multicast UDP.</p>++<p>It's important that pairing securely verifies that the right host is being+paired with. This is accomplied by having a shared secret be entered on+both the hosts that will be paired. Hopefully that secret is communicated+securely out of band.</p>++<p>(In practice, the security of that communication will vary. To guard against+interception, each pairing session pairs exactly two hosts and then forgets+the shared secret. So an attacker who tries to reuse an intercepted secret+will not succeed in pairing. This does not guard against an intercepted+secret that is used before the legitimate parties finish pairing.)</p>++<p>Each host can construct messages that the other host can verify using the+shared secret, and so know that, for example, the ssh public key it+received belongs to the right host and has not been altered by a man in the+middle.</p>++<p>The verification works like this: Take a HMAC SHA1 checksum of the message,+using the shared secret as the HMAC key. Include this checksum after the+message. The other host can then do the same calculation and verify the+checksum.</p>++<p>Additionally, a UUID is included in the message. Messages that are part of+the same pairing session all share a UUID. And all such messages should+be verifiable as described above. If a message has the same UUID but is+not verifiable, then someone on the network is up to no good. Perhaps+they are trying to brute-force the shared secret. When this is detected,+the pairing session is shut down. (Which would still let an attacker+DOS pairing, but that's not a very interesting attack.)</p>++<p>The protocol used for pairing consists of 3 messages, a PairReq, and+PairAck, and a PairDone. Let's consider what an attacker could accomplish+by replaying these:</p>++<ul>+<li>PairReq: This would make the webapp pop up an alert about an incoming+pair request. If the user thought it was real and for some reason+entered the right shared secret used in the real one earlier, the+ssh key inside the PairReq would be added to <code>authorized_keys</code>. Which+allows the host that originally sent the PairReq to access its git+repository, but doesn't seem to do the attacker any good.</li>+<li>PairAck:  If the host that originally sent+the PairReq is still pairing, it'll add the ssh key from the PairAck,+and start syncing, which again does the attacker no good.</li>+<li>PairDone: If the host that sent the PairAck is still syncing, it'll+add the ssh key from the PairDone, and start syncing, and stop+sending PairAcks. But probably, it's not syncing, because it would have+seen the original PairDone.. and anyway, this seems to do the attacker no+good.</li>+</ul>+++<p>So replay attacks don't seem to be a problem.</p>++<p>So far I've considered security from a third-party attacker, but either the+first or second parties in pairing could also be attackers. Presumably they+trust each other with access to their files as mediated by+<a href="../../git-annex-shell.html">git-annex-shell</a>. However, one could try to get shell access to the+other's computer by sending malicious data in a pairing message. So the+pairing code always checks every data field's content, for example the ssh+public key is rejected if it looks at all unusual. Any control characters+in the pairing message cause it to be rejected, to guard against console+poisoning attacks. Furthermore, git-annex is careful not to expose data to+the shell, and the webapp uses Yesod's type safety to ensure all user input+is escaped before going to the browser.</p>++<h2>TODO</h2>++<ul>+<li>pairing over IPV6 only networks does not work. Haskell's+<code>network-multicast</code> library complains "inet_addr: Malformed address: ff02::1"+.. seems it just doesn't support IPv6. The pairing code in git-annex+does support ipv6, apart from this, it's just broadcasting the messages+that fails. (Pairing over mixed networks is fine.)</li>+<li><p>If there are three assistants on the network, and 2 pair, the third is+left displaying a "Pair request from foo" alert, until it's close.+Or, if the user clicks the button to pair, it'll get to the+"Pairing in progress" alert, which will show forever (until canceled).</p>++<p>It should be possible for third parties to tell when pairing is done,+but it's actually rather hard since they don't necessarily share the secret.</p></li>+</ul>+++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./configurators.html">configurators</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:40 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:40 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/design/assistant/polls.html view
@@ -0,0 +1,375 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>polls</title>++<link rel="stylesheet" href="../../style.css" type="text/css" />++<link rel="stylesheet" href="../../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../../index.html">git-annex</a>/ ++<a href="../../design.html">design</a>/ ++<a href="../assistant.html">assistant</a>/ ++</span>+<span class="title">+polls++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../../install.html">install</a></li>+<li><a href="../../assistant.html">assistant</a></li>+<li><a href="../../walkthrough.html">walkthrough</a></li>+<li><a href="../../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../../comments.html">comments</a></li>+<li><a href="../../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<div  class="feedlink">+++</div>+<div class="inlinepage">++<div class="inlineheader">++<span class="header">++<a href="./polls/what_is_preventing_me_from_using_git-annex_assistant.html">what is preventing me from using git-annex assistant</a>++</span>+</div>++<div class="inlinecontent">+<p>My goal for this month is to get more people using the git-annex assistant,+and fix issues that might be blocking you from using it. To do this,+I'd like to get an idea about whether you're already using it,+or what's keeping you from using it.</p>++<p>If you use <code>git-annex</code> at the command line and have no reason to use the+assistant, please instead fill in this poll on behalf of less technically+adept friends or family -- what's preventing you from introducing them to+the assistant?</p>++<p>[[!poll  open=no expandable=yes 8 "I'm using the assistant!" 28 "I need a Windows port" 30 "I need an Android port" 3 "I need an IPhone port (not holding my breath)" 2 "Well, it's still in beta..." 11 "I want to, but have not had the time to try it" 5 "Just inertia. I've got this dropbox/whatever that already works.." 3 "It's too hard to install (please say why in comments)" 2 "Perceived recent increase of bug reports and thus sitting it out." 25 "Initially the lack of direct-mode. Now concerns about the safety of direct mode. Perhaps after the next release." 10 "I haven't always well understood the differences between commandline operation &amp; the assistant, so the differences would confuse me, and I found the command line more understandable &amp; less scary.  Now trying to learn to like &amp; trust the assistant. :)" 21 "An Ubuntu PPA would be supercool! Thanks for your great work!!" 18 "Not yet in Debian sid amd64" 6 "Waiting for Fedora/CentOS rpm repository." 2 "throttling transfers, it upsets people when I saturate the connection" 2 "partial content" 1 "Not yet available in macports" 4 "No build yet for Nokia N9" 3 "Using only git-annex webapp to config does not seem to work: Create walkthough?" 5 "No build for OSX 10.6" 5 "Needs more focus on the UI." 1 "Just inertia. I don't have a Dropbox/whatever." 4 "Replaces files with a symlink mess." 2 "configurable option to only annex files meeting certian size or filename criteria" 4 "I'm really confused about how to make it sync with a remote NON-bare repository. I'm even afraid to try <code>git remote add</code>, since there is no clear method to completely forget a git-annex remote..." 5 "A build for te raspberry pi would be supercol!" 1 "Would be nice to exclude subfolders from the gui or through a config file" 1 "I wish I had transparently encrypted git repos in the cloud available, like jgit." 1 "too many inodes used in direct mode. maybe it's possible to keep more info as git objects instead?" 2 "I need to be able to restrict in which repo dirs changes get auto-committed" 1 "Provide .deb package" 1 "Better documentation/walkthroughs on using git-annex within an existing git repo. AKA mixed use" 1 "Union mounts to have a single view of file collection on the network" 1 "Ubuntu PPA does not build with webapp" 1 "I set it up, but am confused about what I set up! It would be great to be able to start from scratch." 1 "I need to be able to restrict in which repo dirs changes get auto-committed using a syntax similar to gitignore"]]</p>++<p>Feel free to write in your own reasons, or add a comment to give me more info.</p>++<p>Note: Poll is now closed. Nearly all these issues have been dealt with.+Please file bug reports if any of these issues still affect you.</p>++</div>++<div class="inlinefooter">++<span class="pagedate">+Posted <span class="date">Sat May  4 11:06:41 2013</span>+</span>++++++++++</div>++</div>+<div class="inlinepage">++<div class="inlineheader">++<span class="header">++<a href="./polls/Android.html">Android</a>++</span>+</div>++<div class="inlinecontent">+<p>Help me choose a goal for the month of December. The last poll showed+a lot of interest in using the git-annex assistant with phones, etc.</p>++<p>Background: git-annex uses symbolic links in its repositories. This makes it+hard to use with filesystems, such as FAT, that do not support symbolic links.+FAT filesystems are the main storage available on some Android devices that+have a micro-SD card. Other, newer Android devices don't have a SD card and so+avoid this problem.</p>++<p>I can either work on the idea described in+<a href="./desymlink.html">desymlink</a>, which could solve the symlink problem and+also could lead to a nicer workflow to editing files that are stored in+git-annex.</p>++<p>Or, I can work on <a href="./android.html">Android porting</a>, and try to+get the assistant working on Android's built-in storage.</p>++<p>[[!poll  open=no 81 "solve the symlink problem first" 17 "port to Android first" 1 "other"]]</p>++</div>++<div class="inlinefooter">++<span class="pagedate">+Posted <span class="date">Sat May  4 11:06:41 2013</span>+</span>++++++++++</div>++</div>+<div class="inlinepage">++<div class="inlineheader">++<span class="header">++<a href="./polls/Android_default_directory.html">Android default directory</a>++</span>+</div>++<div class="inlinecontent">+<p>What directory should the Android webapp default to creating an annex in?</p>++<p>Same as the desktop webapp, users will be able to enter a directory they+want the first time they run it, but to save typing on android, anything+that gets enough votes will be included in a list of choices as well.</p>++<p>[[!poll  open=yes expandable=yes 42 "/sdcard/annex" 3 "Whole /sdcard" 4 "DCIM directory (photos and videos only)" 1 "Same as for regular git-annex. ~/annex/"]]</p>++</div>++<div class="inlinefooter">++<span class="pagedate">+Posted <span class="date">Sat May  4 11:06:41 2013</span>+</span>++++++++++</div>++</div>+<div class="inlinepage">++<div class="inlineheader">++<span class="header">++<a href="./polls/goals_for_April.html">goals for April</a>++</span>+</div>++<div class="inlinecontent">+<p>What should I work on in April? I expect I could get perhaps two of these+features done in a month if I'm lucky. I have only 3 more funded months,+and parts of one will be spent working on porting to Windows, so choose wisely!+--<span class="createlink">Joey</span></p>++<p>[[!poll  open=yes expandable=yes 4 "upload and download rate limiting" 15 "get webapp working on Android" 5 "deltas: speed up syncing modified versions of existing files" 8 "encrypted git remotes using git-remote-gcrypt" 0 "add support for more cloud storage remotes" 19 "don't work on features, work on making it easier to install and use" 2 "Handle duplicate files" 6 "direct mode (aka real files instead of symlinks) [already done --joey]" 3 "start windows port now"]]</p>++<p>References:</p>++<ul>+<li><a href="./rate_limiting.html">rate limiting</a></li>+<li><a href="./polls/Android.html">Android</a></li>+<li><a href="./deltas.html">deltas</a> to speed up syncing modified files (at least for remotes using rsync)</li>+<li><a href="./encrypted_git_remotes.html">encrypted git remotes</a></li>+<li><a href="./more_cloud_providers.html">more cloud providers</a> (OpenStack Swift, Owncloud, Google drive,+Dropbox, Mediafire, nimbus.io, Mega, etc.)</li>+<li><a href="./polls/what_is_preventing_me_from_using_git-annex_assistant.html">old poll on "what is preventing me from using git-annex assistant"</a>+(many of the items on it should be fixed now, but I have plenty of bug reports to chew on still)</li>+</ul>+++</div>++<div class="inlinefooter">++<span class="pagedate">+Posted <span class="date">Sat May  4 11:06:41 2013</span>+</span>++++++++++</div>++</div>+<div class="inlinepage">++<div class="inlineheader">++<span class="header">++<a href="./polls/prioritizing_special_remotes.html">prioritizing special remotes</a>++</span>+</div>++<div class="inlinecontent">+<p>Background: git-annex supports storing data in various <a href="../../special_remotes.html">special remotes</a>.+The git-annex assistant will make it easy to configure these, and easy+configurators have already been built for a few: removable drives, rsync.net,+locally paired systems, and remote servers with rsync.</p>++<p>Help me prioritize my work: What special remote would you most like+to use with the git-annex assistant?</p>++<p>[[!poll  open=yes 15 "Amazon S3 (done)" 12 "Amazon Glacier (done)" 9 "Box.com (done)" 70 "My phone (or MP3 player)" 18 "Tahoe-LAFS" 7 "OpenStack SWIFT" 28 "Google Drive"]]</p>++<p>This poll is ordered with the options I consider easiest to build+listed first. Mostly because git-annex already supports them and they+only need an easy configurator. The ones at the bottom are likely to need+significant work. See <a href="./cloud.html">cloud</a> for detailed discussion.</p>++<p>Have another idea? Absolutely need two or more? Post comments..</p>++</div>++<div class="inlinefooter">++<span class="pagedate">+Posted <span class="date">Sat May  4 11:06:41 2013</span>+</span>++++++++++</div>++</div>++++++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="../assistant.html">assistant</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:40 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:40 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/design/assistant/syncing.html view
@@ -0,0 +1,593 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>syncing</title>++<link rel="stylesheet" href="../../style.css" type="text/css" />++<link rel="stylesheet" href="../../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../../index.html">git-annex</a>/ ++<a href="../../design.html">design</a>/ ++<a href="../assistant.html">assistant</a>/ ++</span>+<span class="title">+syncing++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../../install.html">install</a></li>+<li><a href="../../assistant.html">assistant</a></li>+<li><a href="../../walkthrough.html">walkthrough</a></li>+<li><a href="../../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../../comments.html">comments</a></li>+<li><a href="../../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>Once files are added (or removed or moved), need to send those changes to+all the other git clones, at both the git level and the key/value level.</p>++<h2>efficiency</h2>++<p>Currently after each file transfer (upload or download), a git sync is done+to all remotes. This is rather a lot of work, also it prevents collecting+presence changes to the git-annex branch into larger commits, which would+save disk space over time.</p>++<p>In many cases, this sync is necessary. For example, when a file is uploaded+to a transfer remote, the location change needs to be synced out so that+other clients know to grab it.</p>++<p>Or, when downloading a file from a drive, the sync lets other locally+paired repositories know we got it, so they can download it from us.+OTOH, this is also a case where a sync is sometimes unnecessary, since+if we're going to upload the file to them after getting it, the sync+only perhaps lets them start downloading it before our transfer queue+reaches a point where we'd upload it.</p>++<p>Do we need all the mapping stuff discussed below to know when we can avoid+syncs?</p>++<h2>TODO</h2>++<ul>+<li>Test MountWatcher on LXDE.</li>+<li>Add a hook, so when there's a change to sync, a program can be run+ and do its own signaling.</li>+<li>--debug will show often unnecessary work being done. Optimise.</li>+<li>Configurablity, including only enabling git syncing but not data transfer;+only uploading new files but not downloading, and only downloading+files in some directories and not others. See for use cases:+<span class="createlink">Wishlist: options for syncing meta-data and data</span></li>+<li>speed up git syncing by using the cached ssh connection for it too+Will need to use <code>GIT_SSH</code>, which needs to point to a command to run,+not a shell command line. Beware that the network connection may have+bounced and the cached ssh connection not be usable.</li>+<li>Map the network of git repos, and use that map to calculate+optimal transfers to keep the data in sync. Currently a naive flood fill+is done instead. Maybe use XMPP as a side channel to learn about the+network topology?</li>+<li>Find a more efficient way for the TransferScanner to find the transfers+that need to be done to sync with a remote. Currently it walks the git+working copy and checks each file. That probably needs to be done once,+but further calls to the TransferScanner could eg, look at the delta+between the last scan and the current one in the git-annex branch.</li>+<li><span class="createlink">use multiple transfer slots</span></li>+<li>The TransferQueue's list of deferred downloads could theoretically+grow without bounds in memory. Limit it to a given number of entries,+and fall back to some other method -- either storing deferred downloads+on disk, or perhaps scheduling a TransferScanner run to get back into sync.</li>+</ul>+++<h2>data syncing</h2>++<p>There are two parts to data syncing. First, map the network and second,+decide what to sync when.</p>++<p>Mapping the network can reuse code in <code>git annex map</code>. Once the map is+built, we want to find paths through the network that reach all nodes+eventually, with the least cost. This is a minimum spanning tree problem,+except with a directed graph, so really a Arborescence problem.</p>++<p>With the map, we can determine which nodes to push new content to. Then we+need to control those data transfers, sending to the cheapest nodes first,+and with appropriate rate limiting and control facilities.</p>++<p>This probably will need lots of refinements to get working well.</p>++<h3>first pass: flood syncing</h3>++<p>Before mapping the network, the best we can do is flood all files out to every+reachable remote. This is worth doing first, since it's the simplest way to+get the basic functionality of the assistant to work. And we'll need this+anyway.</p>++<h2>TransferScanner</h2>++<p>The TransferScanner thread needs to find keys that need to be Uploaded+to a remote, or Downloaded from it.</p>++<p>How to find the keys to transfer? I'd like to avoid potentially+expensive traversals of the whole git working copy if I can.+(Currently, the TransferScanner does do the naive and possibly expensive+scan of the git working copy.)</p>++<p>One way would be to do a git diff between the (unmerged) git-annex branches+of the git repo, and its remote. Parse that for lines that add a key to+either, and queue transfers. That should work fairly efficiently when the+remote is a git repository. Indeed, git-annex already does such a diff+when it's doing a union merge of data into the git-annex branch. It+might even be possible to have the union merge and scan use the same+git diff data.</p>++<p>But that approach has several problems:</p>++<ol>+<li>The list of keys it would generate wouldn't have associated git+filenames, so the UI couldn't show the user what files were being+transferred.</li>+<li>Worse, without filenames, any later features to exclude+files/directories from being transferred wouldn't work.</li>+<li>Looking at a git diff of the git-annex branches would find keys+that were added to either side while the two repos were disconnected.+But if the two repos' keys were not fully in sync before they+disconnected (which is quite possible; transfers could be incomplete),+the diff would not show those older out of sync keys.</li>+</ol>+++<p>The remote could also be a special remote. In this case, I have to either+traverse the git working copy, or perhaps traverse the whole git-annex+branch (which would have the same problems with filesnames not being+available).</p>++<p>If a traversal is done, should check all remotes, not just+one. Probably worth handling the case where a remote is connected+while in the middle of such a scan, so part of the scan needs to be+redone to check it.</p>++<h2>done</h2>++<ol>+<li>Can use <code>git annex sync</code>, which already handles bidirectional syncing.+When a change is committed, launch the part of <code>git annex sync</code> that pushes+out changes. <strong>done</strong>; changes are pushed out to all remotes in parallel</li>+<li>Watch <code>.git/refs/remotes/</code> for changes (which would be pushed in from+another node via <code>git annex sync</code>), and run the part of <code>git annex sync</code>+that merges in received changes, and follow it by the part that pushes out+changes (sending them to any other remotes).+[The watching can be done with the existing inotify code! This avoids needing+any special mechanism to notify a remote that it's been synced to.]<br/>+<strong>done</strong></li>+<li>Periodically retry pushes that failed.  <strong>done</strong> (every half an hour)</li>+<li>Also, detect if a push failed due to not being up-to-date, pull,+and repush. <strong>done</strong></li>+<li><p>Use a git merge driver that adds both conflicting files,+so conflicts never break a sync. <strong>done</strong></p></li>+<li><p>on-disk transfers in progress information files (read/write/enumerate)+<strong>done</strong></p></li>+<li>locking for the files, so redundant transfer races can be detected,+and failed transfers noticed <strong>done</strong></li>+<li>transfer info for git-annex-shell <strong>done</strong></li>+<li>update files as transfers proceed. See <a href="./progressbars.html">progressbars</a>+(updating for downloads is easy; for uploads is hard)</li>+<li>add Transfer queue TChan <strong>done</strong></li>+<li>add TransferInfo Map to DaemonStatus for tracking transfers in progress.+<strong>done</strong></li>+<li>Poll transfer in progress info files for changes (use inotify again!+wow! hammer, meet nail..), and update the TransferInfo Map <strong>done</strong></li>+<li>enqueue Transfers (Uploads) as new files are added to the annex by+Watcher. <strong>done</strong></li>+<li>enqueue Tranferrs (Downloads) as new dangling symlinks are noticed by+Watcher. <strong>done</strong>+(Note: Needs git-annex branch to be merged before the tree is merged,+so it knows where to download from. Checked and this is the case.)</li>+<li>Write basic Transfer handling thread. Multiple such threads need to be+able to be run at once. Each will need its own independant copy of the+Annex state monad. <strong>done</strong></li>+<li>Write transfer control thread, which decides when to launch transfers.+<strong>done</strong></li>+<li>Transfer watching has a race on kqueue systems, which makes finished+fast transfers not be noticed by the TransferWatcher. Which in turn+prevents the transfer slot being freed and any further transfers+from happening. So, this approach is too fragile to rely on for+maintaining the TransferSlots. Instead, need <span class="createlink">assistant threaded runtime</span>,+which would allow running something for sure when a transfer thread+finishes. <strong>done</strong></li>+<li>Test MountWatcher on KDE, and add whatever dbus events KDE emits when+drives are mounted. <strong>done</strong></li>+<li>It would be nice if, when a USB drive is connected,+syncing starts automatically. Use dbus on Linux? <strong>done</strong></li>+<li><p>Optimisations in 5c3e14649ee7c404f86a1b82b648d896762cbbc2 temporarily+broke content syncing in some situations, which need to be added back.+<strong>done</strong></p>++<p>Now syncing a disconnected remote only starts a transfer scan if the+remote's git-annex branch has diverged, which indicates it probably has+new files. But that leaves open the cases where the local repo has+new files; and where the two repos git branches are in sync, but the+content transfers are lagging behind; and where the transfer scan has+never been run.</p>++<p>Need to track locally whether we're believed to be in sync with a remote.+This includes:</p>++<ul>+<li>All local content has been transferred to it successfully.</li>+<li>The remote has been scanned once for data to transfer from it, and all+transfers initiated by that scan succeeded.</li>+</ul>+++<p>Note the complication that, if it's initiated a transfer, our queued+transfer will be thrown out as unnecessary. But if its transfer then+fails, that needs to be noticed.</p>++<p>If we're going to track failed transfers, we could just set a flag,+and use that flag later to initiate a new transfer scan. We need a flag+in any case, to ensure that a transfer scan is run for each new remote.+The flag could be <code>.git/annex/transfer/scanned/uuid</code>.</p>++<p>But, if failed transfers are tracked, we could also record them, in+order to retry them later, without the scan. I'm thinking about a+directory like <code>.git/annex/transfer/failed/{upload,download}/uuid/</code>,+which failed transfer log files could be moved to.</p></li>+<li>A remote may lose content it had before, so when requeuing+a failed download, check the location log to see if the remote still has+the content, and if not, queue a download from elsewhere. (And, a remote+may get content we were uploading from elsewhere, so check the location+log when queuing a failed Upload too.) <strong>done</strong></li>+<li>Fix MountWatcher to notice umounts and remounts of drives. <strong>done</strong></li>+<li>Run transfer scan on startup. <strong>done</strong></li>+<li>Often several remotes will be queued for full TransferScanner scans,+and the scan does the same thing for each .. so it would be better to+combine them into one scan in such a case. <strong>done</strong></li>+<li><p>The syncing code currently doesn't run for special remotes. While+transfering the git info about special remotes could be a complication,+if we assume that's synced between existing git remotes, it should be+possible for them to do file transfers to/from special remotes.+<strong>done</strong></p></li>+<li><p>The transfer code doesn't always manage to transfer file contents.</p>++<p>Besides reconnection events, there are two places where transfers get queued:</p>++<ol>+<li>When the committer commits a file, it queues uploads.</li>+<li>When the watcher sees a broken symlink be created, it queues downloads.</li>+</ol>+++<p>Consider a doubly-linked chain of three repositories, A B and C.+(C and A do not directly communicate.)</p>++<ul>+<li>File is added to A.</li>+<li>A uploads its content to B.</li>+<li>At the same time, A git syncs to B.</li>+<li>Once B gets the git sync, it git syncs to C.</li>+<li>When C's watcher sees the file appear, it tries to download it. But if+B had not finished receiving the file from A, C doesn't know B has it,+and cannot download it from anywhere.</li>+</ul>+++<p>Possible solution: After B receives content, it could queue uploads of it+to all remotes that it doesn't know have it yet, which would include C.+<strong>done</strong></p>++<p>In practice, this had the problem that when C receives the content,+it will queue uploads of it, which can send back to B (or to some other repo+that already has the content) and loop, until the git-annex branches catch+up and break the cycle.</p>++<p>To avoid that problem, incoming uploads should not result in a transfer+info file being written when the key is already present. <strong>done</strong></p>++<p>Possible solution: C could record a deferred download. (Similar to a failed+download, but with an unknown source.) When C next receives a git-annex+branch push, it could try to queue deferred downloads. <strong>done</strong></p>++<p>Note that this solution won't cover use cases the other does. For example,+connect a USB drive A; B syncs files from it, and then should pass them to C.+If the files are not new, C won't immediatly request them from B.</p></li>+<li><p>Running the assistant in a fresh clone of a repository, it sometimes+skips downloading a file, while successfully downloading all the rest.+There does not seem to be an error message. This will sometimes reproduce+(in a fresh clone each time) several times in a row, but then stops happening,+which has prevented me from debugging it.+This could possibly have been caused by the bug fixed in 750c4ac6c282d14d19f79e0711f858367da145e4.+Provisionally closed.</p></li>+</ol>+++</div>++++<div id="comments">+<div  class="feedlink">+++</div>+<div class="comment" id="comment-bf456e8b83e7228d5a91ea31bb0119eb">++++<div class="comment-subject">++<a href="/design/assistant/syncing.html#comment-bf456e8b83e7228d5a91ea31bb0119eb">comment 1</a>++</div>++<div class="inlinecontent">+<p>On "git syncing" point number 9, on OSX you could potentially do this on a semi-regular basis</p>++<pre>+system_profiler SPNetworkVolumeDataType+Volumes:++    net:++      Type: autofs+      Mount Point: /net+      Mounted From: map -hosts+      Automounted: Yes++    home:++      Type: autofs+      Mount Point: /home+      Mounted From: map auto_home+      Automounted: Yes+</pre>+++<p>and</p>++<pre>+x00:~ jtang$ system_profiler SPUSBDataType+USB:++    USB High-Speed Bus:++      Host Controller Location: Built-in USB+      Host Controller Driver: AppleUSBEHCI+      PCI Device ID: 0x0aa9 +      PCI Revision ID: 0x00b1 +      PCI Vendor ID: 0x10de +      Bus Number: 0x26 ++        Hub:++          Product ID: 0x2504+          Vendor ID: 0x0424  (SMSC)+          Version: 0.01+          Speed: Up to 480 Mb/sec+          Location ID: 0x26200000 / 3+          Current Available (mA): 500+          Current Required (mA): 2++            USB to ATA/ATAPI Bridge:++              Capacity: 750.16 GB (750,156,374,016 bytes)+              Removable Media: Yes+              Detachable Drive: Yes+              BSD Name: disk1+              Product ID: 0x2338+              Vendor ID: 0x152d  (JMicron Technology Corp.)+              Version: 1.00+              Serial Number: 313541813001+              Speed: Up to 480 Mb/sec+              Manufacturer: JMicron+              Location ID: 0x26240000 / 5+              Current Available (mA): 500+              Current Required (mA): 2+              Partition Map Type: MBR (Master Boot Record)+              S.M.A.R.T. status: Not Supported+              Volumes:+                Porta-Disk:+                  Capacity: 750.16 GB (750,156,341,760 bytes)+                  Available: 668.42 GB (668,424,208,384 bytes)+                  Writable: Yes+                  File System: ExFAT+....+</pre>+++<p>I think its possible to programatically get this information either from the CLI (it dumps out XML output if required) or some development library. There is also DBUS in macports, but I have never had much interaction with it, so I don't know if its good or bad on OSX.</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus">Jimmy</a>+</span>+++&mdash; <span class="date">Tue Jul  3 04:26:43 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-f5adf55cfc878ae2d1e3d69da053630f">++++<div class="comment-subject">++<a href="/design/assistant/syncing.html#comment-f5adf55cfc878ae2d1e3d69da053630f">Bridging LANs</a>++</div>++<div class="inlinecontent">+Why rely on the cloud when you can instead use XMPP and jingle to perform NAT traversal for you? AFAIKT, it also means that traffic won't leave your router if the two endpoints are behind the same router.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawnBl7cA6wLDxVNUyLIHvAyCkf8ir3alYpk">Tyson</a>+</span>+++&mdash; <span class="date">Tue Jul 10 06:20:59 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-c4ed7092a37f27eb941e8c9737597b99">++++<div class="comment-subject">++<a href="/design/assistant/syncing.html#comment-c4ed7092a37f27eb941e8c9737597b99">selective data syncing</a>++</div>++<div class="inlinecontent">+<p>How will the assistant know which files' data to distribute between the repos?</p>++<p>I'm using git-annex and it's numcopies attribute to maintain a redundant archive spread over different computers and usb drives. Not all drives should get a copy of everything, e.g. the usb drive I take to work should not automatically get a copy of family pictures.</p>++<p>How about .gitattributes?</p>++<ul>+<li>* annex.auto-sync-data = false # don't automatically sync the data</li>+<li>archive/ annex.auto-push-repos = NAS # everything added to archive/ in any repo goes automatically to the NAS remote.</li>+<li>work/ annex.auto-synced-repos = LAPTOP WORKUSB # everything added to work/ in LAPTOP or WORKUSB gets synced to WORKUSB and LAPTOP</li>+<li>work/ annex.auto-push-repos = LAPTOP WORKUSB # stuff added to work/ anywhere gets synced to LAPTOP and WORKUSB</li>+<li>important/ annex.auto-sync-data = true # push data to all repos</li>+<li>webserver_logs/ annex.remote.WEBSERVER.auto-push-repos = S3 # only the assistant running in WEBSERVER pushes webserver_logs/ to S3 remote</li>+</ul>++++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawk4YX0PWICfWGRLuncCPufMPDctT7KAYJA">betabrain</a>+</span>+++&mdash; <span class="date">Tue Jul 24 11:27:08 2012</span>+</div>++++<div style="clear: both"></div>+</div>+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./cloud.html">cloud</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:41 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:41 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/design/assistant/webapp.html view
@@ -0,0 +1,344 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>webapp</title>++<link rel="stylesheet" href="../../style.css" type="text/css" />++<link rel="stylesheet" href="../../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../../index.html">git-annex</a>/ ++<a href="../../design.html">design</a>/ ++<a href="../assistant.html">assistant</a>/ ++</span>+<span class="title">+webapp++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../../install.html">install</a></li>+<li><a href="../../assistant.html">assistant</a></li>+<li><a href="../../walkthrough.html">walkthrough</a></li>+<li><a href="../../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../../comments.html">comments</a></li>+<li><a href="../../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>The webapp is a web server that displays a shiny interface.</p>++<h2>performance</h2>++<p>Having the webapp open while transfers are+running uses significant CPU just for the browser to update the progress+bar. Unsurprising, since the webapp is sending the browser a new <code>&lt;div&gt;</code>+each time. Updating the DOM instead from javascript would avoid that;+the webapp just needs to send the javascript either a full <code>&lt;div&gt;</code> or a+changed percentage and quantity complete to update a single progress bar.</p>++<p>(Another reason to do this is it'll cut down on the refreshes, which+sometimes make browsers ignore clicks on UI elements like the pause button,+if the transfer display refreshes just as the click is made.)</p>++<h2>other features</h2>++<ul>+<li>there could be a UI to export a file, which would make it be served up+over http by the web app</li>+<li>there could be a UI (some javascript thing) in the web browser to+submit urls to the web app to be added to the annex and downloaded.+See: <span class="createlink">wishlist: an &#34;assistant&#34; for web-browsing -- tracking the sources of the downloads</span></li>+<li>Display the <code>inotify max_user_watches</code> exceeded message. <strong>done</strong></li>+<li>Display something sane when kqueue runs out of file descriptors.</li>+<li>allow removing git remotes <strong>done</strong></li>+<li>allow disabling syncing to here, which should temporarily disable all+local syncing. <strong>done</strong></li>+</ul>+++<h2>better headless support</h2>++<p><code>--listen</code> is insecure, and using HTTPS would still not make it 100% secure+as there would be no way for the browser to verify its certificate.</p>++<p>I do have a better idea, but it'd be hard to implement.+<code>git annex webapp --remote user@host:dir</code> could ssh to the remote host,+run the webapp there, listening only on localhost, and then send the+port the webapp chose back over the ssh connection. Then the same+ssh connection could be reused (using ssh connection caching) to set up+port forwarding from a port on the local host to the remote webapp.</p>++<p>This would need to handle the first run case too, which would require+forwarding a second port once the webapp made the repository and+the second webapp started up.</p>++<h2>first start <strong>done</strong></h2>++<ul>+<li>make git repo <strong>done</strong></li>+<li>generate a nice description like "joey@hostname Desktop/annex" <strong>done</strong></li>+<li>record repository that was made, and use it next time run <strong>done</strong></li>+<li>write a pid file, to prevent more than one first-start process running+at once <strong>done</strong></li>+</ul>+++<h2>security <strong>acceptable/done</strong></h2>++<ul>+<li>Listen only to localhost. <strong>done</strong></li>+<li>Instruct the user's web browser to open an url that contains a secret+token. This guards against other users on the same system. <strong>done</strong>+(I would like to avoid passwords or other authentication methods,+it's your local system.)</li>+<li>Don't pass the url with secret token directly to the web browser,+as that exposes it to <code>ps</code>. Instead, write a html file only the user can read,+that redirects to the webapp. <strong>done</strong></li>+<li>Alternative for Linux at least would be to write a small program using+GTK+ Webkit, that runs the webapp, and can know what user ran it, avoiding+needing authentication.</li>+</ul>+++</div>++++<div id="comments">+<div  class="feedlink">+++</div>+<div class="comment" id="comment-66f9834d5ad31c3d31c2078845cc6a0f">++++<div class="comment-subject">++<a href="/design/assistant/webapp.html#comment-66f9834d5ad31c3d31c2078845cc6a0f">Secret URL token</a>++</div>++<div class="inlinecontent">+<blockquote><p>Instruct the user's web browser to open an url that contains a secret token. This guards against other users on the same system.</p></blockquote>++<p>How will you implement that? Running "sensible-browser URL" would be the obvious way, but the secret URL would show up in a well timed ps listing. (And depending on the browser, ps may show the URL the entire time it's running.)</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="Signed in">++<a href="?page=yatesa&amp;do=goto">yatesa</a>++</span>+++&mdash; <span class="date">Mon Jun 18 23:41:16 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-ded5c5608cbc936a6e5575e52e4744dd">++++<div class="comment-subject">++<a href="/design/assistant/webapp.html#comment-ded5c5608cbc936a6e5575e52e4744dd">ARM support</a>++</div>++<div class="inlinecontent">+The closure of <a href="http://hackage.haskell.org/trac/ghc/ticket/5839">this</a> ticket hopefully marks the end of TH issues on ARM. As of 7.4.2, GHC's linker has enough ARM support to allow a selection of common packages compile on my PandaBoard. That being said, it hasn't had a whole lot of testing so it's possible I still need to implement a few relocation types.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawlup4hyZo4eCjF8T85vfRXMKBxGj9bMdl0">Ben</a>+</span>+++&mdash; <span class="date">Fri Jul 13 12:51:15 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-4af69b775df8a89c570165f608b29672">++++<div class="comment-subject">++<a href="/design/assistant/webapp.html#comment-4af69b775df8a89c570165f608b29672">comment 3</a>++</div>++<div class="inlinecontent">+Using twitter-bootstrap for the webapp - this might be a wishlist item, but would it be possible to ensure that the webapp's css uses twitter-bootstrap classes. It would make theming much easier in the long run and it would give you a nice modern look with a low amount of effort.++</div>++<div class="comment-header">++Comment by++<span class="author" title="Signed in">++<a href="?page=jtang&amp;do=goto">jtang</a>++</span>+++&mdash; <span class="date">Thu Jul 26 13:35:18 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-3a63f1e7dcdd65b98769280dc73a3d59">++++<div class="comment-subject">++<a href="/design/assistant/webapp.html#comment-3a63f1e7dcdd65b98769280dc73a3d59">comment 4</a>++</div>++<div class="inlinecontent">+<p>So, Yesod's scaffolded site actually does use bootstrap, but I didn't use the scaffolded site so don't have it. I am not quite to the point of doing any theming of the webapp, but I do have this nice example of how to put in bootstrap right here..</p>++<p>By the way, if anyone would like to play with the html templates for the webapp, the main html template is <code>templates/default-layout.hamlet</code>. Uses a slightly weird template markup, but plain html will also work. And there's also the <code>static/</code> directory; every file in there will be compiled directly into the git-annex binary, and is available at <code>http://localhost:port/static/$file</code> in the webapp. See the favicon link in <code>default-layout.hamlet</code> of how to construct a type-safe link to a static file: <code>href=@{StaticR favicon_ico}</code>. That's all you really need to theme the webapp, without doing any real programming!</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Thu Jul 26 13:45:28 2012</span>+</div>++++<div style="clear: both"></div>+</div>+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./configurators.html">configurators</a>++<a href="./progressbars.html">progressbars</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:41 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:41 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/design/assistant/windows.html view
@@ -0,0 +1,204 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>windows</title>++<link rel="stylesheet" href="../../style.css" type="text/css" />++<link rel="stylesheet" href="../../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../../index.html">git-annex</a>/ ++<a href="../../design.html">design</a>/ ++<a href="../assistant.html">assistant</a>/ ++</span>+<span class="title">+windows++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../../install.html">install</a></li>+<li><a href="../../assistant.html">assistant</a></li>+<li><a href="../../walkthrough.html">walkthrough</a></li>+<li><a href="../../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../../comments.html">comments</a></li>+<li><a href="../../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>See <span class="createlink">windows support</span>..</p>++<h2>symlinks</h2>++<p>Apparently new versions of Windows have something very like symlinks.+(Or really, 3 or so things not entirely unlike symlinks and all different.)+Stackoverflow has some details.</p>++<p>NTFS supports symbolic links two different ways: an [[!wikipedia  NTFS symbolic link]] and an [[!wikipedia  NTFS_junction_point]].  The former seems like the closest analogue to POSIX symlinks.</p>++<p>Make git use them, as it (apparently) does not yet.</p>++<p>Currently, on Windows, git checks out symlinks as files containing the symlink+target as their contents.</p>++<h2>POSIX</h2>++<p>Lots of ifdefs and pain to deal with POSIX calls in the code base.</p>++<p>Or I could try to use Cygwin.</p>++<h2>Deeper system integration</h2>++<p><a href="http://msdn.microsoft.com/en-us/library/aa365503%28v=VS.85%29.aspx">NTFS Reparse Points</a> allow a program to define how the OS will interpret a file or directory in arbitrary ways.  This requires writing a file system filter.</p>++<h2>Developement environment</h2>++<p>Someone wrote in to say:</p>++<blockquote><p>For Windows Development you can easily qualify+for Bizspark - http://www.microsoft.com/bizspark/</p>++<p>This will get you 100% free Windows OS licenses and+Dev tools, plus a free Azure account for cloud testing.+(You can also now deploy Linux VMs to Azure as well)+No money required at all.</p></blockquote>++</div>++++<div id="comments">+<div  class="feedlink">+++</div>+<div class="comment" id="comment-283d05f150362dcc1725b5dbda5e66ab">++++<div class="comment-subject">++<a href="/design/assistant/windows.html#comment-283d05f150362dcc1725b5dbda5e66ab">comment 1</a>++</div>++<div class="inlinecontent">+<p>NTFS symbolic links should do exactly what you would expect them to do. They can point to files or directories. Junction points are legacy NTFS functionality and reparse points are more like the POSIX mount functionality.</p>++<p>NTFS symbolic links should work for you, junction point should be avoided, and reparse points would be like using a nuke to kill a fly. The only hang up you might have is that I think all three features require elevated privileges to manage.</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawlCGROoy62svBUy6P24x1KoGoDWrBq2ErA">Steve</a>+</span>+++&mdash; <span class="date">Tue Aug  7 00:15:43 2012</span>+</div>++++<div style="clear: both"></div>+</div>+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="../assistant.html">assistant</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Fri Sep 28 01:45:57 2012</span>+<!-- Created <span class="date">Fri Sep 28 01:45:57 2012</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/design/assistant/xmpp.html view
@@ -0,0 +1,373 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>xmpp</title>++<link rel="stylesheet" href="../../style.css" type="text/css" />++<link rel="stylesheet" href="../../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../../index.html">git-annex</a>/ ++<a href="../../design.html">design</a>/ ++<a href="../assistant.html">assistant</a>/ ++</span>+<span class="title">+xmpp++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../../install.html">install</a></li>+<li><a href="../../assistant.html">assistant</a></li>+<li><a href="../../walkthrough.html">walkthrough</a></li>+<li><a href="../../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../../comments.html">comments</a></li>+<li><a href="../../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>The git-annex assistant uses XMPP to communicate between peers that+cannot directly talk to one-another. A typical scenario is two users+who share a repository, that is stored in the <a href="./cloud.html">cloud</a>.</p>++<h3>TODO</h3>++<ul>+<li>Prevent idle disconnection. Probably means sending or receiving pings,+but would prefer to avoid eg pinging every 60 seconds as some clients do.</li>+<li>Do git-annex clients sharing an account with regular clients cause confusing+things to happen?+See <a href="http://git-annex.branchable.com/design/assistant/blog/day_114__xmpp/#comment-aaba579f92cb452caf26ac53071a6788">http://git-annex.branchable.com/design/assistant/blog/day_114__xmpp/#comment-aaba579f92cb452caf26ac53071a6788</a></li>+</ul>+++<h2>design goals</h2>++<ol>+<li><p>Avoid user-visible messages. dvcs-autosync uses XMPP similarly, but+sends user-visible messages. Avoiding user-visible messages lets+the user configure git-annex to use his existing XMPP account+(eg, Google Talk).</p></li>+<li><p>Send notifications to buddies. dvcs-autosync sends only self-messages,+but that requires every node have the same XMPP account configured.+git-annex should support that mode, but it should also send notifications+to a user's buddies. (This will also allow for using XMPP for pairing+in the future.)</p></li>+<li><p>Don't make account appear active. Just because git-annex is being an XMPP+client, it doesn't mean that it wants to get chat messages, or make the+user appear active when he's not using his chat program.</p></li>+</ol>+++<h2>protocol</h2>++<p>To avoid relying on XMPP extensions, git-annex communicates+using presence messages, and chat messages (with empty body tags,+so clients don't display them).</p>++<p>git-annex sets a negative presence priority, to avoid any regular messages+getting eaten by its clients. It also sets itself extended away.+Note that this means that chat messages always have to be directed at+specific git-annex clients.</p>++<p>To the presence and chat messages, it adds its own tag as+<a href="http://xmpp.org/rfcs/rfc6121.html#presence-extended">extended content</a>.+The xml namespace is "git-annex" (not an URL because I hate wasting bandwidth).</p>++<p>To indicate it's pushed changes to a git repo with a given UUID, a message+that is sent to all buddies and other clients using the account (no+explicit pairing needed), it uses a broadcast presence message containing:</p>++<pre><code>&lt;git-annex xmlns='git-annex' push="uuid[,uuid...]" /&gt;+</code></pre>++<p>Multiple UUIDs can be listed when multiple clients were pushed. If the+git repo does not have a git-annex UUID, an empty string is used.</p>++<p>To query if other git-annex clients are around, a presence message is used,+containing:</p>++<pre><code>&lt;git-annex xmlns='git-annex' query="" /&gt;+</code></pre>++<p>For pairing, a chat message is sent to every known git-annex client,+containing:</p>++<pre><code>&lt;git-annex xmlns='git-annex' pairing="PairReq|PairAck|PairDone myuuid" /&gt;+</code></pre>++<h3>git push over XMPP</h3>++<p>To indicate that we could push over XMPP, a chat message is sent,+to each known client of each XMPP remote.</p>++<pre><code>&lt;git-annex xmlns='git-annex' canpush="myuuid" /&gt;+</code></pre>++<p>To request that a remote push to us, a chat message can be sent.</p>++<pre><code>&lt;git-annex xmlns='git-annex' pushrequest="myuuid" /&gt;+</code></pre>++<p>When replying to an canpush message, this is directed at the specific+client that indicated it could push. To solicit pushes from all clients,+the message has to be sent directed individually to each client.</p>++<p>When a peer is ready to send a git push, it sends:</p>++<pre><code>&lt;git-annex xmlns='git-annex' startingpush="myuuid" /&gt;+</code></pre>++<p>The receiver runs <code>git receive-pack</code>, and sends back its output in+one or more chat messages, directed to the client that is pushing:</p>++<pre><code>&lt;git-annex xmlns='git-annex' rp="N"&gt;+007b27ca394d26a05d9b6beefa1b07da456caa2157d7 refs/heads/git-annex report-status delete-refs side-band-64k quiet ofs-delta+&lt;/git-annex&gt;+</code></pre>++<p>The sender replies with the data from <code>git push</code>, in+one or more chat messages, directed to the receiver:</p>++<pre><code>&lt;git-annex xmlns='git-annex' sp="N"&gt;+data+&lt;/git-annex&gt;+</code></pre>++<p>The value of rp and sp used to be empty, but now it's a sequence number.+This indicates the sequence of this packet, counting from 1. The receiver+and sender each have their own sequence numbers. These sequence numbers+are not really used yet, but are available for debugging.</p>++<p>When <code>git receive-pack</code> exits, the receiver indicates its exit+status with a chat message, directed at the sender:</p>++<pre><code>&lt;git-annex xmlns='git-annex' rpdone="0" /&gt;+</code></pre>++<h3>security</h3>++<p>Data git-annex sends over XMPP will be visible to the XMPP+account's buddies, to the XMPP server, and quite likely to other interested+parties. So it's important to consider the security exposure of using it.</p>++<p>Even if git-annex sends only a single bit notification, this lets attackers+know when the user is active and changing files. Although the assistant's other+syncing activities can somewhat mask this.</p>++<p>As soon as git-annex does anything unlike any other client, an attacker can+see how many clients are connected for a user, and fingerprint the ones+running git-annex, and determine how many clients are running git-annex.</p>++<p>If git-annex sent the UUID of the remote it pushed to, this would let+attackers determine how many different remotes are being used,+and map some of the connections between clients and remotes.</p>++<p>An attacker could replay push notification messages, reusing UUIDs it's+observed. This would make clients pull repeatedly, perhaps as a DOS.</p>++</div>++++<div id="comments">+<div  class="feedlink">+++</div>+<div class="comment" id="comment-9f0899c3cbe02e70727bdf53dcf7d187">++++<div class="comment-subject">++<a href="/design/assistant/xmpp.html#comment-9f0899c3cbe02e70727bdf53dcf7d187">xmlns</a>++</div>++<div class="inlinecontent">+<p>A minor point, but is saving a couple of bytes per message worth using a <a href="http://www.w3.org/TR/REC-xml-names/#iri-use">deprecated feature</a> of the namespaces specification? This is not technically <em>breaking</em> the current specification, since "git-annex" is of course still a (relative) URI reference; and anyway chances of problems are, I guess, slim. But is it the lesser of two bugs?</p>++<p>The shortest moderately sane absolute URI containing "git-annex" would probably be "data:,git-annex".</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://meep.pl/">meep.pl</a>+</span>+++&mdash; <span class="date">Sun Nov 11 05:00:01 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-509b6646daee0dfe1c72f898b12532db">++++<div class="comment-subject">++<a href="/design/assistant/xmpp.html#comment-509b6646daee0dfe1c72f898b12532db">Plans for two factor authentication or oath?</a>++</div>++<div class="inlinecontent">+Are there plans to support google's two factor authentication?  Right now I have to use an application specific password.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawkurjhi0CRJvgm7QNaZDWS9hitBtavqIpc">Bret</a>+</span>+++&mdash; <span class="date">Sun Apr 14 20:58:04 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-656c072026f03c48b45d192bc1c4d9b1">++++<div class="comment-subject">++<a href="/design/assistant/xmpp.html#comment-656c072026f03c48b45d192bc1c4d9b1">file transfer?</a>++</div>++<div class="inlinecontent">+Would it be possible to add optional support for transferring files over XMPP (possibly being disabled out-of-the-box so as not to suck up third-party bandwidth)?++</div>++<div class="comment-header">++Comment by++<span class="author" title="Signed in">++<a href="?page=hhm&amp;do=goto">hhm</a>++</span>+++&mdash; <span class="date">Tue Apr 23 06:22:51 2013</span>+</div>++++<div style="clear: both"></div>+</div>+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./cloud.html">cloud</a>++<a href="../../special_remotes/xmpp.html">special remotes/xmpp</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:41 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:41 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/design/encryption.html view
@@ -0,0 +1,524 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>encryption</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../design.html">design</a>/ ++</span>+<span class="title">+encryption++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>This was the design doc for <a href="../encryption.html">encryption</a> and is preserved for+the curious. For an example of using git-annex with an encrypted S3 remote,+see <a href="../tips/using_Amazon_S3.html">using Amazon S3</a>.</p>++<div class="toc">+	<ol>+		<li class="L2"><a href="#index1h2">encryption backends</a>+		</li>+		<li class="L2"><a href="#index2h2">encryption key management</a>+		</li>+		<li class="L2"><a href="#index3h2">filename enumeration</a>+		</li>+		<li class="L2"><a href="#index4h2">other use of the symmetric cipher</a>+		</li>+		<li class="L2"><a href="#index5h2">risks</a>+		</li>+	</ol>+</div>+++<h2><a name="index1h2"></a>encryption backends</h2>++<p>It makes sense to support multiple encryption backends. So, there+should be a way to tell what backend is responsible for a given filename+in an encrypted remote. (And since special remotes can also store files+unencrypted, differentiate from those as well.)</p>++<p>The rest of this page will describe a single encryption backend using GPG.+Probably only one will be needed, but who knows? Maybe that backend will+turn out badly designed, or some other encryptor needed. Designing+with more than one encryption backend in mind helps future-proofing.</p>++<h2><a name="index2h2"></a>encryption key management</h2>++<p>[[!template <span class="error">Error: failed to process template <span class="createlink">note</span> </span>]]</p>++<p>Data is encrypted by GnuPG, using a symmetric cipher. The cipher is+generated by GnuPG when the special remote is created. By default the+best entropy pool is used, hence the generation may take a while; One+can use <code>initremote</code> with <code>highRandomQuality=false</code> or <code>--fast</code> options+to speed up things, but at the expense of using random numbers of a+lower quality. The generated cipher is then checked into your git+repository, encrypted using one or more OpenPGP public keys. This scheme+allows new OpenPGP private keys to be given access to content that has+already been stored in the remote.</p>++<p>Different encrypted remotes need to be able to each use different ciphers.+Allowing multiple ciphers to be used within a single remote would add a lot+of complexity, so is not planned to be supported.+Instead, if you want a new cipher, create a new S3 bucket, or whatever.+There does not seem to be much benefit to using the same cipher for+two different encrypted remotes.</p>++<p>So, the encrypted cipher could just be stored with the rest of a remote's+configuration in <code>remotes.log</code> (see <a href="../internals.html">internals</a>). When <code>git+annex intiremote</code> makes a remote, it can generate a random symmetric+cipher, and encrypt it with the specified gpg key. To allow another gpg+public key access, update the encrypted cipher to be encrypted to both gpg+keys.</p>++<h2><a name="index3h2"></a>filename enumeration</h2>++<p>If the names of files are encrypted or securely hashed, or whatever is+chosen, this makes it harder for git-annex (let alone untrusted third parties!)+to get a list of the files that are stored on a given enrypted remote.+But, does git-annex really ever need to do such an enumeration?</p>++<p>Apparently not. <code>git annex unused --from remote</code> can now check for+unused data that is stored on a remote, and it does so based only on+location log data for the remote. This assumes that the location log is+kept accurately.</p>++<p>What about <code>git annex fsck --from remote</code>? Such a command should be able to,+for each file in the repository, contact the encrypted remote to check+if it has the file. This can be done without enumeration, although it will+mean running gpg once per file fscked, to get the encrypted filename.</p>++<p>So, the files stored in the remote should be encrypted. But, it needs to+be a repeatable encryption, so they cannot just be gpg encrypted, that+would yeild a new name each time. Instead, HMAC is used. Any hash could+be used with HMAC. SHA-1 is the default, but <a href="../encryption.html">other hashes</a>+can be chosen for new remotes.</p>++<p>It was suggested that it might not be wise to use the same cipher for both+gpg and HMAC. Being paranoid, it's best not to tie the security of one+to the security of the other. So, the encrypted cipher described above is+actually split in two; half is used for HMAC, and half for gpg.</p>++<hr />++<p>Does the HMAC cipher need to be gpg encrypted? Imagine if it were+stored in plainext in the git repository. Anyone who can access+the git repository already knows the actual filenames, and typically also+the content hashes of annexed content. Having access to the HMAC cipher+could perhaps be said to only let them verify that data they already+know.</p>++<p>While this seems a pretty persuasive argument, I'm not 100% convinced, and+anyway, most times that the HMAC cipher is needed, the gpg cipher is also+needed. Keeping the HMAC cipher encrypted does slow down two things:+dropping content from encrypted remotes, and checking if encrypted remotes+really have content. If it's later determined to be safe to not encrypt the+HMAC cipher, the current design allows changing that, even for existing+remotes.</p>++<h2><a name="index4h2"></a>other use of the symmetric cipher</h2>++<p>The symmetric cipher can be used to encrypt other content than the content+sent to the remote. In particular, it may make sense to encrypt whatever+access keys are used by the special remote with the cipher, and store that+in remotes.log. This way anyone whose gpg key has been given access to+the cipher can get access to whatever other credentials are needed to+use the special remote.</p>++<h2><a name="index5h2"></a>risks</h2>++<p>A risk of this scheme is that, once the symmetric cipher has been obtained, it+allows full access to all the encrypted content. This scheme does not allow+revoking a given gpg key access to the cipher, since anyone with such a key+could have already decrypted the cipher and stored a copy.</p>++<p>If git-annex stores the decrypted symmetric cipher in memory, then there+is a risk that it could be intercepted from there by an attacker. Gpg+amelorates these type of risks by using locked memory. For git-annex, note+that an attacker with local machine access can tell at least all the+filenames and metadata of files stored in the encrypted remote anyway,+and can access whatever content is stored locally.</p>++<p>This design does not support obfuscating the size of files by chunking+them, as that would have added a lot of complexity, for dubious benefits.+If the untrusted party running the encrypted remote wants to know file sizes,+they could correlate chunks that are accessed together. Encrypting data+changes the original file size enough to avoid it being used as a direct+fingerprint at least.</p>++</div>++++<div id="comments">+<div  class="feedlink">+++</div>+<div class="comment" id="comment-4675041b2a74c1d27846f59c6d281880">++++<div class="comment-subject">++<a href="/design/encryption.html#comment-4675041b2a74c1d27846f59c6d281880">comment 1</a>++</div>++<div class="inlinecontent">+<p>New encryption keys could be used for different directories/files/patterns/times/whatever. One could then encrypt this new key for the public keys of other people/machines and push them out along with the actual data. This would allow some level of access restriction or future revocation. git-annex would need to keep track of which files can be decrypted with which keys. I am undecided if that information needs to be encrypted or not.</p>++<p>Encrypted object files should be checksummed in encrypted form so that it's possible to verify integrity without knowing any keys. Same goes for encrypted keys, etc.</p>++<p>Chunking files in this context seems like needless overkill. This might make sense to store a DVD image on CDs or similar, at some point. But not for encryption, imo. Coming up with sane chunk sizes for all use cases is literally impossible and as you pointed out, correlation by the remote admin is trivial.</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U">Richard</a>+</span>+++&mdash; <span class="date">Sun Apr  3 16:03:14 2011</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-cc025ab2686094fb313a0f96e2ddd64f">++++<div class="comment-subject">++<a href="/design/encryption.html#comment-cc025ab2686094fb313a0f96e2ddd64f">comment 2</a>++</div>++<div class="inlinecontent">+<p>I see no use case for verifying encrypted object files w/o access to the encryption key. And possible use cases for not allowing anyone to verify your data.</p>++<p>If there are to be multiple encryption keys usable within a single encrypted remote, than they would need to be given some kind of name (a since symmetric key is used, there is no pubkey to provide a name), and the name encoded in the files stored in the remote. While certainly doable I'm not sold that adding a layer of indirection is worthwhile. It only seems it would be worthwhile if setting up a new encrypted remote was expensive to do. Perhaps that could be the case for some type of remote other than S3 buckets.</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joey.kitenet.net/">joey</a>+</span>+++&mdash; <span class="date">Tue Apr  5 14:41:49 2011</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-4f78277c4847fbb12575162da684d130">++++<div class="comment-subject">++<a href="/design/encryption.html#comment-4f78277c4847fbb12575162da684d130">comment 3</a>++</div>++<div class="inlinecontent">+<p>Assuming you're storing your encrypted annex with me and I with you, our regular cron jobs to verify all data will catch corruption in each other's annexes.</p>++<p>Checksums of the encrypted objects could be optional, mitigating any potential attack scenarios.</p>++<p>It's not only about the cost of setting up new remotes. It would also be a way to keep data in one annex while making it accessible only in a subset of them. For example, I might need some private letters at work, but I don't want my work machine to be able to access them all.</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U">Richard</a>+</span>+++&mdash; <span class="date">Tue Apr  5 19:24:17 2011</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-f5f2ec243a7a1034cc52b894df78c290">++++<div class="comment-subject">++<a href="/design/encryption.html#comment-f5f2ec243a7a1034cc52b894df78c290">comment 4</a>++</div>++<div class="inlinecontent">+<p>@Richard the easy way to deal with that scenario is to set up a remote that work can access, and only put in it files work should be able to see. Needing to specify which key a file should be encrypted to when putting it in a remote that supported multiple keys would add another level of complexity which that avoids.</p>++<p>Of course, the right approach is probably to have a separate repository for work. If you don't trust it with seeing file contents, you probably also don't trust it with the contents of your git repository.</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joey.kitenet.net/">joey</a>+</span>+++&mdash; <span class="date">Thu Apr  7 15:59:30 2011</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-f5cd94e227a4b70e41048e3b420e96dd">++++<div class="comment-subject">++<a href="/design/encryption.html#comment-f5cd94e227a4b70e41048e3b420e96dd">using sshfs + cryptmount is more secure</a>++</div>++<div class="inlinecontent">+<p>"For git-annex, note that an attacker with local machine access can tell at least all the filenames and metadata of files stored in the encrypted remote anyway, and can access whatever content is stored locally."</p>++<p>Better security is given by sshfs + cryptmount, which I used when I recently setup a git-annex repository on a free shell account from a provider I do not trust.</p>++<p>See http://code.cjb.net/free-secure-online-backup.html for what I did to get a really secure solution.</p>++<p>Kind regards,</p>++<p>Hans Ekbrand</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawkS6aFVrEwOrDuQBTMXxtGHtueA69NS_jo">Hans</a>+</span>+++&mdash; <span class="date">Tue Aug 14 09:41:47 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-a035b1698e1253e7a5244721d73c71cf">++++<div class="comment-subject">++<a href="/design/encryption.html#comment-a035b1698e1253e7a5244721d73c71cf">comment 6</a>++</div>++<div class="inlinecontent">+<p>Hans,</p>++<p>You are misunderstanding how git-annex encryption works.  The "untrusted host" and the "local machine" are not the same machine.  git-annex only transfers pre-encrypted files to the "untrusted host".</p>++<p>You should setup a git-annex encrypted remote and watch how it works so you can see for yourself that it is not insecure.</p>++<p>Your solution does not provide better security, it accomplishes the same thing as git-annex in a more complicated way.  In addition, since you are mounting the image from the client your solution will not work with multiple clients.</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawmBUR4O9mofxVbpb8JV9mEbVfIYv670uJo">Justin</a>+</span>+++&mdash; <span class="date">Tue Aug 14 10:10:40 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-802a6776b0b661fc53c68a3c489f09d6">++++<div class="comment-subject">++<a href="/design/encryption.html#comment-802a6776b0b661fc53c68a3c489f09d6">comment 7</a>++</div>++<div class="inlinecontent">+<p>Justin,</p>++<p>thanks for clearing that up. It's great that git-annex has implemented mechanisms to work securely on untrusted hosts. My solution is thus only interesting for files that are impractical to manage with git-annex (e.g. data for/from applications that need rw-access to a large number of files). And, possibly, for providers that do not provide rsync.</p>++<p>Your remark that my solution does not work with more than one client, is not entirely accurate. No more than one client can access the repository at any given time, but as long as access is not simultaneous, any number of clients can access the repository. Still, your point is taken, it's a limitation I should mention.</p>++<p>It would be interesting to compare the performance of individually encrypted files to encrypted image-file. My intuition says that encrypted image-file should be faster, but that's just a guess.</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawkS6aFVrEwOrDuQBTMXxtGHtueA69NS_jo">Hans</a>+</span>+++&mdash; <span class="date">Wed Aug 15 15:16:10 2012</span>+</div>++++<div style="clear: both"></div>+</div>+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="../design.html">design</a>++<a href="../encryption.html">encryption</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:41 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:41 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/direct_mode.html view
@@ -0,0 +1,357 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>direct mode</title>++<link rel="stylesheet" href="style.css" type="text/css" />++<link rel="stylesheet" href="local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="./index.html">git-annex</a>/ ++</span>+<span class="title">+direct mode++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="./install.html">install</a></li>+<li><a href="./assistant.html">assistant</a></li>+<li><a href="./walkthrough.html">walkthrough</a></li>+<li><a href="./tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="./comments.html">comments</a></li>+<li><a href="./contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>Normally, git-annex repositories consist of symlinks that are checked into+git, and in turn point at the content of large files that is stored in+<code>.git/annex/objects/</code>. Direct mode gets rid of the symlinks.</p>++<p>The advantage of direct mode is that you can access files directly,+including modifying them. The disadvantage is that most regular git+commands cannot safely be used, and only a subset of git-annex commands+can be used.</p>++<p>Normally, git-annex repositories start off in indirect mode. With some+exceptions:</p>++<ul>+<li>Repositories created by the <a href="./assistant.html">assistant</a> use direct mode by default.</li>+<li>Repositories on FAT and other less than stellar filesystems+that don't support things like symlinks will be automatically put+into direct mode.</li>+</ul>+++<h2>enabling (and disabling) direct mode</h2>++<p>Any repository can be converted to use direct mode at any time, and if you+decide not to use it, you can convert back to indirect mode just as easily.+Also, you can have one clone of a repository using direct mode, and another+using indirect mode; direct mode interoperates.</p>++<p>To start using direct mode:</p>++<pre><code>git annex direct+</code></pre>++<p>To stop using direct mode:</p>++<pre><code>git annex indirect+</code></pre>++<h2>safety of using direct mode</h2>++<p>With direct mode, you're operating without large swathes of git-annex's+carefully constructed safety net, which ensures that past versions of+files are preserved and can be accessed (until you dropunused them).+With direct mode, any file can be edited directly, or deleted at any time,+and there's no guarantee that the old version is backed up somewhere else.</p>++<p>So if you care about preserving the history of files, you're strongly+encouraged to tell git-annex that your direct mode repository cannot be+trusted to retain the content of a file. To do so:</p>++<pre><code>git annex untrust .+</code></pre>++<p>On the other hand, if you only care about the current versions of files,+and are using git-annex with direct mode to keep files synchronised between+computers, and manage your files, this should not be a concern for you.</p>++<h2>use a direct mode repository</h2>++<p>You can use most git-annex commands as usual in a direct mode repository.+A very few commands don't work in direct mode, and will refuse to do anything.</p>++<p>Direct mode also works well with the git-annex assistant.</p>++<p>You can use <code>git commit --staged</code>, or plain <code>git commit</code>.+But not <code>git commit -a</code>, or <code>git commit &lt;file&gt;</code> ..+that'd commit whole large files into git!</p>++<h2>what doesn't work in direct mode</h2>++<p><code>git annex status</code> shows incomplete information. A few other commands,+like <code>git annex unlock</code> don't make sense in direct mode and will refuse to+run.</p>++<p>As for git commands, you can probably use some git working tree+manipulation commands, like <code>git checkout</code> and <code>git revert</code> in useful+ways... But beware, these commands can replace files that are present in+your repository with broken symlinks. If that file was the only copy you+had of something, it'll be lost.</p>++<p>This is one more reason it's wise to make git-annex untrust your direct mode+repositories. Still, you can lose data using these sort of git commands, so+use extreme caution.</p>++</div>++++<div id="comments">+<div  class="feedlink">+++</div>+<div class="comment" id="comment-e2f32651b81efbf28c21647fbe2ec5f9">++++<div class="comment-subject">++<a href="/direct_mode.html#comment-e2f32651b81efbf28c21647fbe2ec5f9">comment 1</a>++</div>++<div class="inlinecontent">+So, just which git commands <em>are</em> safe?  It seems like I'm going to have to use direct mode, so it'd be nice to know just what I'm allowed to do, and what the workflow should be.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawl2Jj8q2upJL4ZQAc2lp7ugTxJiGtcICv8">Michael</a>+</span>+++&mdash; <span class="date">Mon Feb 18 19:24:11 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-57bb6513674551d20b8d382c1cf991c7">++++<div class="comment-subject">++<a href="/direct_mode.html#comment-57bb6513674551d20b8d382c1cf991c7">safe and unsafe commands</a>++</div>++<div class="inlinecontent">+<p>All git commands that do not change files in the work tee (and do not stage files from the work tree), are safe. I don't have a complete list; it includes <code>git log</code>, <code>git show</code>, <code>git diff</code>, <code>git commit</code> (but not -a or with a file as a parameter), <code>git branch</code>, <code>git fetch</code>, <code>git push</code>, <code>git grep</code>, <code>git status</code>, <code>git tag</code>, <code>git mv</code> (this one is somewhat surprising, but I've tested it and it's ok)</p>++<p>git commands that change files in the work tree will replace your data with dangling symlinks. This includes things like <code>git revert</code>, <code>git checkout</code>, <code>git merge</code>, <code>git pull</code>, <code>git reset</code></p>++<p>git commands that stage files from the work tree will commit your data to git directly. This includes <code>git add</code>, <code>git commit -a</code>, and <code>git commit file</code></p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Mon Feb 18 22:55:13 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-6f97f966cdafd65509aa68ab6096dd69">++++<div class="comment-subject">++<a href="/direct_mode.html#comment-6f97f966cdafd65509aa68ab6096dd69">comment 3</a>++</div>++<div class="inlinecontent">+<p>So, if I edit a "content file" (change a music file's metadata, say), what's the workflow to record that fact and then synchronise it to other repositories?</p>++<p>I can't do a <code>git add</code>, so I don't understand what has to happen as a first step.  (Thanks for your quick reply above, BTW.)</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawl2Jj8q2upJL4ZQAc2lp7ugTxJiGtcICv8">Michael</a>+</span>+++&mdash; <span class="date">Mon Feb 18 23:03:14 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-7f6b16c9fca70ac26b57542a956fd968">++++<div class="comment-subject">++<a href="/direct_mode.html#comment-7f6b16c9fca70ac26b57542a956fd968">comment 4</a>++</div>++<div class="inlinecontent">+<pre>+git annex add $file+git commit -m changed+git annex sync+git annex copy $file --to otherrepo+</pre>++++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Mon Feb 18 23:05:35 2013</span>+</div>++++<div style="clear: both"></div>+</div>+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./internals.html">internals</a>++<a href="./links/key_concepts.html">links/key concepts</a>++<a href="./upgrades.html">upgrades</a>++<a href="./walkthrough/modifying_annexed_files.html">walkthrough/modifying annexed files</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:41 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:41 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/download.html view
@@ -0,0 +1,246 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>download</title>++<link rel="stylesheet" href="style.css" type="text/css" />++<link rel="stylesheet" href="local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="./index.html">git-annex</a>/ ++</span>+<span class="title">+download++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="./install.html">install</a></li>+<li><a href="./assistant.html">assistant</a></li>+<li><a href="./walkthrough.html">walkthrough</a></li>+<li><a href="./tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="./comments.html">comments</a></li>+<li><a href="./contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>The main git repository for git-annex is <code>git://git-annex.branchable.com/</code></p>++<p>(You can push changes to this wiki from that anonymous git checkout.)</p>++<p>Other mirrors of the git repository:</p>++<ul>+<li><code>git://git.kitenet.net/git-annex</code> [<a href="http://git.kitenet.net/?p=git-annex.git;a=summary">gitweb</a>]</li>+<li><a href="https://github.com/joeyh/git-annex">at github</a></li>+</ul>+++<p>Releases of git-annex are uploaded+<a href="http://hackage.haskell.org/package/git-annex">to hackage</a>. Get your+tarballs there, if you need them.</p>++<p>Some operating systems include git-annex in easily prepackaged form and+others need some manual work. See <a href="./install.html">install</a> for details.</p>++<h2>git branches</h2>++<p>The git repository has some branches:</p>++<ul>+<li><code>ghc7.0</code> supports versions of ghc older than 7.4, which+had a major change to filename encoding.</li>+<li><code>old-monad-control</code> is for systems that don't have a newer monad-control+library.</li>+<li><code>no-ifelse</code> avoids using the IFelse library+(merge it into master if you need it)</li>+<li><code>no-bloom</code> avoids using bloom filters. (merge it into master if you need it)</li>+<li><code>no-s3</code> avoids using the S3 library (merge it into master if you need it)</li>+<li><code>debian-stable</code> contains the latest backport of git-annex to Debian+stable.</li>+<li><code>tweak-fetch</code> adds support for the git tweak-fetch hook, which has+been proposed and implemented but not yet accepted into git.</li>+<li><code>setup</code> contains configuration for this website</li>+<li><code>pristine-tar</code> contains <a href="http://kitenet.net/~joey/code/pristine-tar">pristine-tar</a>+data to create tarballs of any past git-annex release.</li>+</ul>+++<hr />++<p>Developing git-annex? Patches are very welcome.+You should read <a href="./coding_style.html">coding style</a>.</p>++</div>++++<div id="comments">+<div  class="feedlink">+++</div>+<div class="comment" id="comment-48efe492343c27a89c035c03da473d38">++++<div class="comment-subject">++<a href="/download.html#comment-48efe492343c27a89c035c03da473d38">git clone git://git-annex.branchable.com/ gives an error</a>++</div>++<div class="inlinecontent">+<p>Thought you would want to know</p>++<p>error: unable to create file doc/forum/<strong>91</strong>Installation<strong>93</strong><em>base-3.0.3.2_requires_syb</em><strong>61</strong><strong>61</strong>0.1.0.2_however_syb-0.1.0.2_was_excluded_because_json-0.5_requires_syb<em><strong>62</strong><strong>61</strong>0.3.3.mdwn (File name too long)+fatal: cannot create directory at 'doc/forum/<strong>91</strong>Installation<strong>93</strong></em>base-3.0.3.2_requires_syb<em><strong>61</strong><strong>61</strong>0.1.0.2_however_syb-0.1.0.2_was_excluded_because_json-0.5_requires_syb</em><strong>62</strong><strong>61</strong>0.3.3': File name too long</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawm3uJkdiJJejvqix9dULvw_Ma7DCtB-6zA">Ian</a>+</span>+++&mdash; <span class="date">Mon Aug 13 16:57:34 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-2e374c18fcc0aae22c79b090509965c7">++++<div class="comment-subject">++<a href="/download.html#comment-2e374c18fcc0aae22c79b090509965c7">comment 2</a>++</div>++<div class="inlinecontent">+Ok, I've renamed that long-ish filename.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Thu Aug 16 19:28:30 2012</span>+</div>++++<div style="clear: both"></div>+</div>+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./install.html">install</a>++<a href="./install/cabal.html">install/cabal</a>++<a href="./install/fromscratch.html">install/fromscratch</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:41 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:41 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/encryption.html view
@@ -0,0 +1,240 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>encryption</title>++<link rel="stylesheet" href="style.css" type="text/css" />++<link rel="stylesheet" href="local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="./index.html">git-annex</a>/ ++</span>+<span class="title">+encryption++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="./install.html">install</a></li>+<li><a href="./assistant.html">assistant</a></li>+<li><a href="./walkthrough.html">walkthrough</a></li>+<li><a href="./tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="./comments.html">comments</a></li>+<li><a href="./contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>git-annex mostly does not use encryption. Anyone with access to a git+repository can see all the filenames in it, its history, and can access+any annexed file contents.</p>++<p>Encryption is needed when using <a href="./special_remotes.html">special remotes</a> like Amazon S3, where+file content is sent to an untrusted party who does not have access to the+git repository.</p>++<p>Such an encrypted remote uses strong GPG encryption on the contents of files,+as well as HMAC hashing of the filenames. The size of the encrypted files,+and access patterns of the data, should be the only clues to what is+stored in such a remote.</p>++<p>You should decide whether to use encryption with a special remote before+any data is stored in it. So, <code>git annex initremote</code> requires you+to specify "encryption=none" when first setting up a remote in order+to disable encryption.</p>++<p>If you want to use encryption, run <code>git annex initremote</code> with+"encryption=USERID". The value will be passed to <code>gpg</code> to find encryption keys.+Typically, you will say "encryption=2512E3C7" to use a specific gpg key.+Or, you might say "encryption=joey@kitenet.net" to search for matching keys.</p>++<p>The default MAC algorithm to be applied on the filenames is HMACSHA1. A+stronger one, for instance HMACSHA512, one can be chosen upon creation+of the special remote with the option <code>mac=HMACSHA512</code>. The available+MAC algorithms are HMACSHA1, HMACSHA224, HMACSHA256, HMACSHA384, and+HMACSHA512. Note that it is not possible to change algorithm for a+non-empty remote.</p>++<p>The <a href="./design/encryption.html">encryption design</a> allows additional encryption keys+to be added on to a special remote later. Once a key is added, it is able+to access content that has already been stored in the special remote.+To add a new key, just run <code>git annex enableremote</code> specifying the+new encryption key:</p>++<pre><code>git annex enableremote myremote encryption=788A3F4C+</code></pre>++<p>Note that once a key has been given access to a remote, it's not+possible to revoke that access, short of deleting the remote. See+<a href="./design/encryption.html">encryption design</a> for other security risks+associated with encryption.</p>++<h2>shared cipher mode</h2>++<p>Alternatively, you can configure git-annex to use a shared cipher to+encrypt data stored in a remote. This shared cipher is stored,+<strong>unencrypted</strong> in the git repository. So it's shared amoung every+clone of the git repository. The advantage is you don't need to set up gpg+keys. The disadvantage is that this is <strong>insecure</strong> unless you+trust every clone of the git repository with access to the encrypted data+stored in the special remote.</p>++<p>To use shared encryption, specify "encryption=shared" when first setting+up a special remote.</p>++</div>++++<div id="comments">+<div  class="feedlink">+++</div>+<div class="comment" id="comment-e676b9d3a2afeac2140a508745729db3">++++<div class="comment-subject">++<a href="/encryption.html#comment-e676b9d3a2afeac2140a508745729db3">Tahoe-LAFS comes with encryption</a>++</div>++<div class="inlinecontent">+<p>The Tahoe-LAFS special remote automatically encrypts and adds cryptography integrity checks/digital signatures. For that special remote you should not use the git-annex encryption scheme.</p>++<p>Tahoe-LAFS encryption generates a new independent key for each file. This means that you can share access to one of the files without thereby sharing access to all of them, and it means that individual files can be deduplicated among multiple users.</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="Signed in">++<a href="?page=zooko&amp;do=goto">zooko</a>++</span>+++&mdash; <span class="date">Wed May 18 00:32:14 2011</span>+</div>++++<div style="clear: both"></div>+</div>+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./design/encryption.html">design/encryption</a>++<a href="./internals.html">internals</a>++<a href="./links/the_details.html">links/the details</a>++<a href="./special_remotes/S3.html">special remotes/S3</a>++<a href="./special_remotes/bup.html">special remotes/bup</a>++<a href="./special_remotes/directory.html">special remotes/directory</a>++<a href="./special_remotes/glacier.html">special remotes/glacier</a>++<a href="./special_remotes/hook.html">special remotes/hook</a>++<a href="./special_remotes/rsync.html">special remotes/rsync</a>++<a href="./special_remotes/webdav.html">special remotes/webdav</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:41 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:41 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/favicon.ico view

binary file changed (absent → 405 bytes)

+ debian/git-annex/usr/share/doc/git-annex/html/feeds.html view
@@ -0,0 +1,133 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>feeds</title>++<link rel="stylesheet" href="style.css" type="text/css" />++<link rel="stylesheet" href="local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="./index.html">git-annex</a>/ ++</span>+<span class="title">+feeds++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="./install.html">install</a></li>+<li><a href="./assistant.html">assistant</a></li>+<li><a href="./walkthrough.html">walkthrough</a></li>+<li><a href="./tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="./comments.html">comments</a></li>+<li><a href="./contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>Aggregating git-annex mentions from elsewhere on the net..</p>++<ul>+<li>[[!aggregate  expirecount=25 name="identica" feedurl="http://identi.ca/api/statusnet/tags/timeline/gitannex.rss" url="http://identi.ca/tag/gitannex"]]</li>+<li>[[!aggregate  expirecount=25 name="twitter" feedurl="http://search.twitter.com/search.atom?q=git-annex" url="http://twitter.com/"]]</li>+</ul>+++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./index.html">index</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Fri Sep 28 01:45:57 2012</span>+<!-- Created <span class="date">Fri Sep 28 01:45:57 2012</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/footer/column_a.html view
@@ -0,0 +1,131 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>column a</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../index.html">footer</a>/ ++</span>+<span class="title">+column a++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<h3>Recent <a href="../news.html">news</a></h3>+++++<h3><span class="createlink">Dev blog</span></h3>+++++++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">++++++++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:41 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:41 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/footer/column_b.html view
@@ -0,0 +1,149 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>column b</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../index.html">footer</a>/ ++</span>+<span class="title">+column b++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<h3>Recent <a href="../videos.html">videos</a></h3>++<p>++<a href="../videos/git-annex_assistant_archiving.html">git-annex assistant archiving</a><br />++<i>+Posted <span class="date">Sat May  4 11:06:46 2013</span>++</i>+</p>+<p>++<a href="../videos/git-annex_assistant_remote_sharing.html">git-annex assistant remote sharing</a><br />++<i>+Posted <span class="date">Sat May  4 11:06:46 2013</span>++</i>+</p>++++<h3>Recent <span class="createlink">forum posts</span></h3>+++++++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">++++++++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:41 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:41 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/future_proofing.html view
@@ -0,0 +1,165 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>future proofing</title>++<link rel="stylesheet" href="style.css" type="text/css" />++<link rel="stylesheet" href="local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="./index.html">git-annex</a>/ ++</span>+<span class="title">+future proofing++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="./install.html">install</a></li>+<li><a href="./assistant.html">assistant</a></li>+<li><a href="./walkthrough.html">walkthrough</a></li>+<li><a href="./tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="./comments.html">comments</a></li>+<li><a href="./contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>Imagine putting a git-annex drive in a time capsule. In 20, or 50, or 100+years, you'd like its contents to be as accessible as possible to whoever+digs it up.</p>++<p>This is a hard problem. git-annex cannot completly solve it, but it does+its best to not contribute to the problem. Here are some aspects of the+problem:</p>++<ul>+<li><p>How are files accessed? Git-annex carefully adds minimal complexity+to access files in a repository. Nothing needs to be done to extract+files from the repository; they are there on disk in the usual way,+with just some symlinks pointing at the annexed file contents.+Neither git-annex nor git is needed to get at the file contents.</p>++<p>(Also, git-annex provides an "uninit" command that moves everything out+of the annex, if you should ever want to stop using it.)</p></li>+<li><p>What file formats are used? Will they still be readable? To deal with+this, it's best to stick to plain text files, and the most common+image, sound, etc formats. Consider storing the same content in multiple+formats.</p></li>+<li><p>What filesystem is used on the drive? Will that filesystem still be+available? Whatever you choose to use, git-annex can put files on it.+Even if you choose (ugh) FAT.</p></li>+<li><p>What is the hardware interface of the drive? Will hardware still exist+to talk to it?</p></li>+<li><p>What if some of the data is damaged? git-annex facilitates storing a+configurable number of <a href="./copies.html">copies</a> of the file contents. The metadata+about your files is stored in git, and so every clone of the repository+means another copy of that is stored. Also, git-annex uses filenames+for the data that encode everything needed to match it back to the+metadata. So if a filesystem is badly corrupted and all your annexed+files end up in <code>lost+found</code>, they can easily be lifted back out into+another clone of the repository. Even if the filenames are lost,+it's possible to <a href="./tips/recover_data_from_lost+found.html">recover data from lost+found</a>.</p></li>+</ul>+++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./special_remotes/S3/comment_8_0fa68d584ee7f6b5c9058fba7e911a11.html">special remotes/S3/comment 8 0fa68d584ee7f6b5c9058fba7e911a11</a>++<a href="./use_case/Bob.html">use case/Bob</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Fri Sep 28 01:45:57 2012</span>+<!-- Created <span class="date">Fri Sep 28 01:45:57 2012</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/git-annex-shell.html view
@@ -0,0 +1,248 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>git-annex-shell</title>++<link rel="stylesheet" href="style.css" type="text/css" />++<link rel="stylesheet" href="local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="./index.html">git-annex</a>/ ++</span>+<span class="title">+git-annex-shell++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="./install.html">install</a></li>+<li><a href="./assistant.html">assistant</a></li>+<li><a href="./walkthrough.html">walkthrough</a></li>+<li><a href="./tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="./comments.html">comments</a></li>+<li><a href="./contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<h1>NAME</h1>++<p>git-annex-shell - Restricted login shell for git-annex only SSH access</p>++<h1>SYNOPSIS</h1>++<p>git-annex-shell [-c] command [params ...]</p>++<h1>DESCRIPTION</h1>++<p>git-annex-shell is a restricted shell, similar to git-shell, which+can be used as a login shell for SSH accounts.</p>++<p>Since its syntax is identical to git-shell's, it can be used as a drop-in+replacement anywhere git-shell is used. For example it can be used as a+user's restricted login shell.</p>++<h1>COMMANDS</h1>++<p>Any command not listed below is passed through to git-shell.</p>++<p>Note that the directory parameter should be an absolute path, otherwise+it is assumed to be relative to the user's home directory. Also the+first "/~/" or "/~user/" is expanded to the specified home directory.</p>++<ul>+<li><p>configlist directory</p>++<p>This outputs a subset of the git configuration, in the same form as+<code>git config --list</code></p></li>+<li><p>inannex directory [key ...]</p>++<p>This checks if all specified keys are present in the annex,+and exits zero if so.</p></li>+<li><p>dropkey directory [key ...]</p>++<p>This drops the annexed data for the specified keys.</p></li>+<li><p>recvkey directory key</p>++<p>This runs rsync in server mode to receive the content of a key,+and stores the content in the annex.</p></li>+<li><p>sendkey directory key</p>++<p>This runs rsync in server mode to transfer out the content of a key.</p></li>+<li><p>transferinfo directory key</p>++<p>This is typically run at the same time as sendkey is sending a key+to the remote. Using it is optional, but is used to update+progress information for the transfer of the key.</p>++<p>It reads lines from standard input, each giving the number of bytes+that have been received so far.</p></li>+<li><p>commit directory</p>++<p>This commits any staged changes to the git-annex branch.+It also runs the annex-content hook.</p></li>+</ul>+++<h1>OPTIONS</h1>++<p>Most options are the same as in git-annex. The ones specific+to git-annex-shell are:</p>++<ul>+<li><p>--uuid=UUID</p>++<p>git-annex uses this to specify the UUID of the repository it was expecting+git-annex-shell to access, as a sanity check.</p></li>+<li><p>-- fields=val fields=val.. --</p>++<p>Additional fields may be specified this way, to retain compatability with+past versions of git-annex-shell (that ignore these, but would choke+on new dashed options).</p>++<p>Currently used fields include remoteuuid=, associatedfile=,+and direct=</p></li>+</ul>+++<h1>HOOK</h1>++<p>After content is received or dropped from the repository by git-annex-shell,+it runs a hook, <code>.git/hooks/annex-content</code> (or <code>hooks/annex-content</code> on a bare+repository). The hook is not currently passed any information about what+changed.</p>++<h1>ENVIRONMENT</h1>++<ul>+<li><p>GIT_ANNEX_SHELL_READONLY</p>++<p>If set, disallows any command that could modify the repository.</p></li>+<li><p>GIT_ANNEX_SHELL_LIMITED</p>++<p>If set, disallows running git-shell to handle unknown commands.</p></li>+<li><p>GIT_ANNEX_SHELL_DIRECTORY</p>++<p>If set, git-annex-shell will refuse to run commands that do not operate+on the specified directory.</p></li>+</ul>+++<h1>SEE ALSO</h1>++<p><a href="./git-annex.html">git-annex</a>(1)</p>++<p>git-shell(1)</p>++<h1>AUTHOR</h1>++<p>Joey Hess <a href="mailto:joey@kitenet.net">&#106;&#x6f;&#101;&#121;&#64;&#x6b;&#105;&#116;&#x65;&#x6e;&#x65;&#x74;&#x2e;&#110;&#101;&#x74;</a></p>++<p><a href="http://git-annex.branchable.com/">http://git-annex.branchable.com/</a></p>++<p>Warning: Automatically converted into a man page by mdwn2man. Edit with care</p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./bare_repositories.html">bare repositories</a>++<a href="./design/assistant/pairing.html">design/assistant/pairing</a>++<a href="./special_remotes/bup.html">special remotes/bup</a>++<a href="./walkthrough/using_ssh_remotes.html">walkthrough/using ssh remotes</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:45 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:45 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/git-annex.html view
@@ -0,0 +1,1174 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>git-annex</title>++<link rel="stylesheet" href="style.css" type="text/css" />++<link rel="stylesheet" href="local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="./index.html">git-annex</a>/ ++</span>+<span class="title">+git-annex++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="./install.html">install</a></li>+<li><a href="./assistant.html">assistant</a></li>+<li><a href="./walkthrough.html">walkthrough</a></li>+<li><a href="./tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="./comments.html">comments</a></li>+<li><a href="./contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<h1>NAME</h1>++<p>git-annex - manage files with git, without checking their contents in</p>++<h1>SYNOPSIS</h1>++<p>git annex command [params ...]</p>++<h1>DESCRIPTION</h1>++<p>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.</p>++<p>Even without file content tracking, being able to manage files with git,+move files around and delete files with versioned directory trees, and use+branches and distributed clones, are all very handy reasons to use git. And+annexed files can co-exist in the same git repository with regularly+versioned files, which is convenient for maintaining documents, Makefiles,+etc that are associated with annexed files but that benefit from full+revision control.</p>++<p>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+there aware of the annexed file, and it can be used to retrieve its+content from the key-value store.</p>++<h1>EXAMPLES</h1>++<pre><code># git annex get video/hackity_hack_and_kaxxt.mov+get video/_why_hackity_hack_and_kaxxt.mov (not available)+  I was unable to access these remotes: server+  Try making some of these repositories available:+    5863d8c0-d9a9-11df-adb2-af51e6559a49  -- my home file server+    58d84e8a-d9ae-11df-a1aa-ab9aa8c00826  -- portable USB drive+    ca20064c-dbb5-11df-b2fe-002170d25c55  -- backup SATA drive+failed+# sudo mount /media/usb+# git remote add usbdrive /media/usb+# git annex get video/hackity_hack_and_kaxxt.mov+get video/hackity_hack_and_kaxxt.mov (from usbdrive...) ok++# git annex add iso+add iso/Debian_5.0.iso ok++# git annex drop iso/Debian_4.0.iso+drop iso/Debian_4.0.iso ok++# git annex move iso --to=usbdrive+move iso/Debian_5.0.iso (moving to usbdrive...) ok+</code></pre>++<h1>COMMONLY USED COMMANDS</h1>++<p>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+default to acting on all relevant files in the current directory (and+subdirectories).</p>++<ul>+<li><p>add [path ...]</p>++<p>Adds files in the path to the annex. Files that are already checked into+git, or that git has been configured to ignore will be silently skipped.+(Use --force to add ignored files.) Dotfiles are skipped unless explicitly+listed.</p></li>+<li><p>get [path ...]</p>++<p>Makes the content of annexed files available in this repository. This+will involve copying them from another repository, or downloading them,+or transferring them from some kind of key-value store.</p>++<p>Normally git-annex will choose which repository to copy the content from,+but you can override this using the --from option.</p></li>+<li><p>drop [path ...]</p>++<p>Drops the content of annexed files from this repository.</p>++<p>git-annex will refuse to drop content if it cannot verify it is+safe to do so. This can be overridden with the --force switch.</p>++<p>To drop content from a remote, specify --from.</p></li>+<li><p>move [path ...]</p>++<p>When used with the --from option, moves the content of annexed files+from the specified repository to the current one.</p>++<p>When used with the --to option, moves the content of annexed files from+the current repository to the specified one.</p></li>+<li><p>copy [path ...]</p>++<p>When used with the --from option, copies the content of annexed files+from the specified repository to the current one.</p>++<p>When used with the --to option, copies the content of annexed files from+the current repository to the specified one.</p>++<p>To avoid contacting the remote to check if it has every file, specify --fast</p></li>+<li><p>unlock [path ...]</p>++<p>Normally, the content of annexed files is protected from being changed.+Unlocking a annexed file allows it to be modified. This replaces the+symlink for each specified file with a copy of the file's content.+You can then modify it and <code>git annex add</code> (or <code>git commit</code>) to inject+it back into the annex.</p></li>+<li><p>edit [path ...]</p>++<p>This is an alias for the unlock command. May be easier to remember,+if you think of this as allowing you to edit an annexed file.</p></li>+<li><p>lock [path ...]</p>++<p>Use this to undo an unlock command if you don't want to modify+the files, or have made modifications you want to discard.</p></li>+<li><p>sync [remote ...]</p>++<p>Use this command when you want to synchronize the local repository with+one or more of its remotes. You can specifiy the remotes to sync with;+the default is to sync with all remotes. Or specify --fast to sync with+the remotes with the lowest annex-cost value.</p>++<p>The sync process involves first committing all local changes (git commit -a),+then fetching and merging the <code>synced/master</code> and the <code>git-annex</code> 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+worry about the details, you can use sync.</p>++<p>Merge conflicts are automatically resolved by sync. When two conflicting+versions of a file have been committed, both will be added to the tree,+under different filenames. For example, file "foo" would be replaced+with "foo.somekey" and "foo.otherkey".</p>++<p>Note that syncing with a remote will not update the remote's working+tree with changes made to the local repository. However, those changes+are pushed to the remote, so can be merged into its working tree+by running "git annex sync" on the remote.</p>++<p>Note that sync does not transfer any file contents from or to the remote+repositories.</p></li>+<li><p>addurl [url ...]</p>++<p>Downloads each url to its own file, which is added to the annex.</p>++<p>To avoid immediately downloading the url, specify --fast.</p>++<p>To avoid storing the size of the url's content, and accept whatever+is there at a future point, specify --relaxed. (Implies --fast.)</p>++<p>Normally the filename is based on the full url, so will look like+"www.example.com_dir_subdir_bigfile". For a shorter filename, specify+--pathdepth=N. For example, --pathdepth=1 will use "dir/subdir/bigfile",+while --pathdepth=3 will use "bigfile". It can also be negative;+--pathdepth=-2 will use the last two parts of the url.</p>++<p>Or, to directly specify what file the url is added to, specify --file.+This changes the behavior; now all the specified urls are recorded as+alternate locations from which the file can be downloaded. In this mode,+addurl can be used both to add new files, or to add urls to existing files.</p></li>+<li><p>rmurl file url</p>++<p>Record that the file is no longer available at the url.</p></li>+<li><p>import [path ...]</p>++<p>Moves files from somewhere outside the git working copy, and adds them to+the annex. Individual files to import can be specified.+If a directory is specified, all files in it are imported, and any+subdirectory structure inside it is preserved.</p>++<p>  git annex import /media/camera/DCIM/</p></li>+<li><p>watch</p>++<p>Watches for changes to files in the current directory and its subdirectories,+and takes care of automatically adding new files, as well as dealing with+deleted, copied, and moved files. With this running as a daemon in the+background, you no longer need to manually run git commands when+manipulating your files.</p>++<p>To not daemonize, run with --foreground ; to stop a running daemon,+run with --stop</p></li>+<li><p>assistant</p>++<p>Like watch, but also automatically syncs changes to other remotes.+Typically started at boot, or when you log in.</p>++<p>With the --autostart option, the assistant is started in any repositories+it has created. These are listed in <code>~/.config/git-annex/autostart</code></p></li>+<li><p>webapp</p>++<p>Opens a web app, that allows easy setup of a git-annex repository,+and control of the git-annex assistant.</p>++<p>By default, the webapp can only be accessed from localhost, and running+it opens a browser window.</p>++<p>With the --listen=address[:port] option, the webapp can be made to listen+for connections on the specified address. This disables running a+local web browser, and outputs the url you can use to open the webapp+from a remote computer.+Note that this does not yet use HTTPS for security, so use with caution!</p></li>+</ul>+++<h1>REPOSITORY SETUP COMMANDS</h1>++<ul>+<li><p>init [description]</p>++<p>Until a repository (or one of its remotes) has been initialized,+git-annex will refuse to operate on it, to avoid accidentially+using it in a repository that was not intended to have an annex.</p>++<p>It's useful, but not mandatory, to initialize each new clone+of a repository with its own description. If you don't provide one,+one will be generated.</p></li>+<li><p>describe repository description</p>++<p>Changes the description of a repository.</p>++<p>The repository to describe can be specified by git remote name or+by uuid. To change the description of the current repository, use+"here".</p></li>+<li><p>initremote name [param=value ...]</p>++<p>Creates a new special remote, and adds it to <code>.git/config</code>.</p>++<p>The remote's configuration is specified by the parameters. Different+types of special remotes need different configuration values. The+command will prompt for parameters as needed.</p>++<p>All special remotes support encryption. You must either specify+encryption=none to disable encryption, or use encryption=keyid+(or encryption=emailaddress) to specify a gpg key that can access+the encrypted special remote.</p>++<p>Example Amazon S3 remote:</p>++<p>  git annex initremote mys3 type=S3 encryption=me@example.com datacenter=EU</p></li>+<li><p>enableremote name [param=value ...]</p>++<p>Enables use of an existing special remote in the current repository,+which may be a different repository than the one in which it was+originally created with the initremote command.</p>++<p>The name of the remote is the same name used when origianlly+creating that remote with "initremote". Run "git annex enableremote"+with no parameters to get a list of special remote names.</p>++<p>Some special remotes may need parameters to be specified every time.+For example, the directory special remote requires a directory= parameter.</p>++<p>This command can also be used to modify the configuration of an existing+special remote, by specifying new values for parameters that were originally+set when using initremote. For example, to add a new gpg key to the keys+that can access an encrypted remote:</p>++<p>  git annex initremote mys3 encryption=friend@example.com</p></li>+<li><p>trust [repository ...]</p>++<p>Records that a repository is trusted to not unexpectedly lose+content. Use with care.</p>++<p>To trust the current repository, use "here".</p></li>+<li><p>untrust [repository ...]</p>++<p>Records that a repository is not trusted and could lose content+at any time.</p></li>+<li><p>semitrust [repository ...]</p>++<p>Returns a repository to the default semi trusted state.</p></li>+<li><p>dead [repository ...]</p>++<p>Indicates that the repository has been irretrevably lost.+(To undo, use semitrust.)</p></li>+<li><p>group repository groupname</p>++<p>Adds a repository to a group, such as "archival", "enduser", or "transfer".+The groupname must be a single word.</p></li>+<li><p>ungroup repository groupname</p>++<p>Removes a repository from a group.</p></li>+<li><p>vicfg</p>++<p>Opens EDITOR on a temp file containing most of the above configuration+settings, and when it exits, stores any changes made back to the git-annex+branch.</p></li>+<li><p>direct</p>++<p>Switches a repository to use direct mode, where rather than symlinks to+files, the files are directly present in the repository.</p>++<p>As part of the switch to direct mode, any changed files will be committed.</p>++<p>Note that git commands that operate on the work tree are often unsafe to+use in direct mode repositories, and can result in data loss or other+bad behavior.</p></li>+<li><p>indirect</p>++<p>Switches a repository back from direct mode to the default, indirect mode.</p>++<p>As part of the switch from direct mode, any changed files will be committed.</p></li>+</ul>+++<h1>REPOSITORY MAINTENANCE COMMANDS</h1>++<ul>+<li><p>fsck [path ...]</p>++<p>With no parameters, this command checks the whole annex for consistency,+and warns about or fixes any problems found.</p>++<p>With parameters, only the specified files are checked.</p>++<p>To check a remote to fsck, specify --from.</p>++<p>To avoid expensive checksum calculations (and expensive transfers when+fscking a remote), specify --fast.</p>++<p>To start a new incremental fsck, specify --incremental. Then+the next time you fsck, you can specify --more to skip over+files that have already been checked, and continue where it left off.</p>++<p>The --incremental-schedule option makes a new incremental fsck be+started a configurable time after the last incremental fsck was started.+Once the current incremental fsck has completely finished, it causes+a new one to start.</p>++<p>Maybe you'd like to run a fsck for 5 hours at night, picking up each+night where it left off. You'd like this to continue until all files+have been fscked. And once it's done, you'd like a new fsck pass to start,+but no more often than once a month. Then put this in a nightly cron job:</p>++<p>  git annex fsck --incremental-schedule 30d --time-limit 5h</p></li>+<li><p>unused</p>++<p>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.</p>++<p>To only show unused temp and bad files, specify --fast.</p>++<p>To check for annexed data on a remote, specify --from.</p></li>+<li><p>dropunused [number|range ...]</p>++<p>Drops the data corresponding to the numbers, as listed by the last+<code>git annex unused</code></p>++<p>You can also specify ranges of numbers, such as "1-1000".</p>++<p>To drop the data from a remote, specify --from.</p></li>+<li><p>addunused [number|range ...]</p>++<p>Adds back files for the content corresponding to the numbers or ranges,+as listed by the last <code>git annex unused</code>. The files will have names+starting with "unused."</p></li>+<li><p>merge</p>++<p>Automatically merges remote tracking branches */git-annex into+the git-annex branch. While git-annex mostly handles keeping the+git-annex branch merged automatically, if you find you are unable+to push the git-annex branch due non-fast-forward, this will fix it.</p></li>+<li><p>fix [path ...]</p>++<p>Fixes up symlinks that have become broken to again point to annexed content.+This is useful to run if you have been moving the symlinks around,+but is done automatically when committing a change with git too.</p></li>+<li><p>upgrade</p>++<p>Upgrades the repository to current layout.</p></li>+</ul>+++<h1>QUERY COMMANDS</h1>++<ul>+<li><p>version</p>++<p>Shows the version of git-annex, as well as repository version information.</p></li>+<li><p>find [path ...]</p>++<p>Outputs a list of annexed files in the specified path. With no path,+finds files in the current directory and its subdirectories.</p>++<p>By default, only lists annexed files whose content is currently present.+This can be changed by specifying file matching options. To list all+annexed files, present or not, specify --include "*". To list all+annexed files whose content is not present, specify --not --in=here</p>++<p>To output filenames terminated with nulls, for use with xargs -0,+specify --print0. Or, a custom output formatting can be specified using+--format. The default output format is the same as --format='${file}\n'</p>++<p>These variables are available for use in formats: file, key, backend,+bytesize, humansize</p></li>+<li><p>whereis [path ...]</p>++<p>Displays a list of repositories known to contain the content of the+specified file or files.</p></li>+<li><p>log [path ...]</p>++<p>Displays the location log for the specified file or files,+showing each repository they were added to ("+") and removed from ("-").</p>++<p>To limit how far back to seach for location log changes, the options+--since, --after, --until, --before, and --max-count can be specified.+They are passed through to git log. For example, --since "1 month ago"</p>++<p>To generate output suitable for the gource visualisation program,+specify --gource.</p></li>+<li><p>status [directory ...]</p>++<p>Displays some statistics and other information, including how much data+is in the annex and a list of all known repositories.</p>++<p>To only show the data that can be gathered quickly, use --fast.</p>++<p>When a directory is specified, shows only an abbreviated status+display for that directory. In this mode, all of the file matching+options can be used to filter the files that will be included in+the status.</p>++<p>For example, suppose you want to run "git annex get .", but+would first like to see how much disk space that will use.+Then run:</p>++<p>  git annex status . --not --in here</p></li>+<li><p>map</p>++<p>Helps you keep track of your repositories, and the connections between them,+by going out and looking at all the ones it can get to, and generating a+Graphviz file displaying it all. If the <code>dot</code> command is available, it is+used to display the file to your screen (using x11 backend). (To disable+this display, specify --fast)</p>++<p>This command only connects to hosts that the host it's run on can+directly connect to. It does not try to tunnel through intermediate hosts.+So it might not show all connections between the repositories in the network.</p>++<p>Also, if connecting to a host requires a password, you might have to enter+it several times as the map is being built.</p>++<p>Note that this subcommand can be used to graph any git repository; it+is not limited to git-annex repositories.</p></li>+</ul>+++<h1>UTILITY COMMANDS</h1>++<ul>+<li><p>migrate [path ...]</p>++<p>Changes the specified annexed files to use the default key-value backend+(or the one specified with --backend). Only files whose content+is currently available are migrated.</p>++<p>Note that the content is also still available using the old key after+migration. Use <code>git annex unused</code> to find and remove the old key.</p>++<p>Normally, nothing will be done to files already using the new backend.+However, if a backend changes the information it uses to construct a key,+this can also be used to migrate files to use the new key format.</p></li>+<li><p>reinject src dest</p>++<p>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.</p>++<p>Automatically runs fsck on dest to check that the expected content was+provided.</p>++<p>Example:</p>++<p>  git annex reinject /tmp/foo.iso foo.iso</p></li>+<li><p>unannex [path ...]</p>++<p>Use this to undo an accidental <code>git annex add</code> command. You can use+<code>git annex unannex</code> to move content out of the annex at any point,+even if you've already committed it.</p>++<p>This is not the command you should use if you intentionally annexed a+file and don't want its contents any more. In that case you should use+<code>git annex drop</code> instead, and you can also <code>git rm</code> the file.</p>++<p>In --fast mode, this command leaves content in the annex, simply making+a hard link to it.</p></li>+<li><p>uninit</p>++<p>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+git repository plus the previously annexed files.</p></li>+</ul>+++<h1>PLUMBING COMMANDS</h1>++<ul>+<li><p>pre-commit [path ...]</p>++<p>Fixes up symlinks that are staged as part of a commit, to ensure they+point to annexed content. Also handles injecting changes to unlocked+files into the annex.</p>++<p>This is meant to be called from git's pre-commit hook. <code>git annex init</code>+automatically creates a pre-commit hook using this.</p></li>+<li><p>fromkey key file</p>++<p>This plumbing-level command can be used to manually set up a file+in the git repository to link to a specified key.</p></li>+<li><p>dropkey [key ...]</p>++<p>This plumbing-level command drops the annexed data for the specified+keys from this repository.</p>++<p>This can be used to drop content for arbitrary keys, which do not need+to have a file in the git repository pointing at them.</p>++<p>Example:</p>++<p>  git annex dropkey SHA1-s10-7da006579dd64330eb2456001fd01948430572f2</p></li>+<li><p>transferkeys</p>++<p>This plumbing-level command is used by the assistant to transfer data.</p></li>+<li><p>rekey [file key ...]</p>++<p>This plumbing-level command is similar to migrate, but you specify+both the file, and the new key to use for it.</p>++<p>With --force, even files whose content is not currently available will+be rekeyed. Use with caution.</p></li>+<li><p>test</p>++<p>This runs git-annex's built-in test suite.</p></li>+<li><p>xmppgit</p>++<p>This command is used internally to perform git pulls over XMPP.</p></li>+</ul>+++<h1>OPTIONS</h1>++<ul>+<li><p>--force</p>++<p>Force unsafe actions, such as dropping a file's content when no other+source of it can be verified to still exist, or adding ignored files.+Use with care.</p></li>+<li><p>--fast</p>++<p>Enables less expensive, but also less thorough versions of some commands.+What is avoided depends on the command.</p></li>+<li><p>--auto</p>++<p>Enables automatic mode. Commands that get, drop, or move file contents+will only do so when needed to help satisfy the setting of annex.numcopies,+and preferred content configuration.</p></li>+<li><p>--quiet</p>++<p>Avoid the default verbose display of what is done; only show errors+and progress displays.</p></li>+<li><p>--verbose</p>++<p>Enable verbose display.</p></li>+<li><p>--json</p>++<p>Rather than the normal output, generate JSON. This is intended to be+parsed by programs that use git-annex. Each line of output is a JSON+object. Note that json output is only usable with some git-annex commands,+like status and find.</p></li>+<li><p>--debug</p>++<p>Show debug messages.</p></li>+<li><p>--from=repository</p>++<p>Specifies a repository that content will be retrieved from, or that+should otherwise be acted on.</p>++<p>It should be specified using the name of a configured remote.</p></li>+<li><p>--to=repository</p>++<p>Specifies a repository that content will be sent to.</p>++<p>It should be specified using the name of a configured remote.</p></li>+<li><p>--numcopies=n</p>++<p>Overrides the <code>annex.numcopies</code> setting, forcing git-annex to ensure the+specified number of copies exist.</p>++<p>Note that setting numcopies to 0 is very unsafe.</p></li>+<li><p>--time-limit=time</p>++<p>Limits how long a git-annex command runs. The time can be something+like "5h", or "30m" or even "45s" or "10d".</p>++<p>Note that git-annex may continue running a little past the specified+time limit, in order to finish processing a file.</p>++<p>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.</p></li>+<li><p>--trust=repository</p></li>+<li>--semitrust=repository</li>+<li><p>--untrust=repository</p>++<p>Overrides trust settings for a repository. May be specified more than once.</p>++<p>The repository should be specified using the name of a configured remote,+or the UUID or description of a repository.</p></li>+<li><p>--trust-glacier-inventory</p>++<p>Amazon Glacier inventories take hours to retrieve, and may not represent+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.</p>++<p>Be careful using this, especially if you or someone else might have recently+removed a file from Glacier. If you try to drop the only other copy of the+file, and this switch is enabled, you could lose data!</p></li>+<li><p>--backend=name</p>++<p>Specifies which key-value backend to use. This can be used when+adding a file to the annex, or migrating a file. Once files+are in the annex, their backend is known and this option is not+necessary.</p></li>+<li><p>--format=value</p>++<p>Specifies a custom output format. The value is a format string,+in which '${var}' is expanded to the value of a variable. To right-justify+a variable with whitespace, use '${var;width}' ; to left-justify+a variable, use '${var;-width}'; to escape unusual characters in a variable,+use '${escaped_var}'</p>++<p>Also, '\n' is a newline, '\000' is a NULL, etc.</p></li>+<li><p>-c name=value</p>++<p>Used to override git configuration settings. May be specified multiple times.</p></li>+</ul>+++<h1>FILE MATCHING OPTIONS</h1>++<p>These options can all be specified multiple times, and can be combined to+limit which files git-annex acts on.</p>++<p>Arbitrarily complicated expressions can be built using these options.+For example:</p>++<pre><code>--exclude '*.mp3' --and --not -( --in=usbdrive --or --in=archive -)+</code></pre>++<p>The above example prevents git-annex from working on mp3 files whose+file contents are present at either of two repositories.</p>++<ul>+<li><p>--exclude=glob</p>++<p>Skips files matching the glob pattern. The glob is matched relative to+the current directory. For example:</p>++<p>  --exclude='<em>.mp3' --exclude='subdir/</em>'</p></li>+<li><p>--include=glob</p>++<p>Skips files not matching the glob pattern.  (Same as --not --exclude.)+For example, to include only mp3 and ogg files:</p>++<p>  --include='<em>.mp3' --or --include='</em>.ogg'</p></li>+<li><p>--in=repository</p>++<p>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.</p>++<p>The repository should be specified using the name of a configured remote,+or the UUID or description of a repository. For the current repository,+use --in=here</p></li>+<li><p>--copies=number</p>++<p>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.</p></li>+<li><p>--copies=trustlevel:number</p>++<p>Matches only files that git-annex believes have the specified number of+copies, on remotes with the specified trust level. For example,+"--copies=trusted:2"</p>++<p>To match any trust level at or higher than a given level, use+'trustlevel+'. For example, "--copies=semitrusted+:2"</p></li>+<li><p>--copies=groupname:number</p>++<p>Matches only files that git-annex believes have the specified number of+copies, on remotes in the specified group. For example,+"--copies=archive:2"</p></li>+<li><p>--inbackend=name</p>++<p>Matches only files whose content is stored using the specified key-value+backend.</p></li>+<li><p>--inallgroup=groupname</p>++<p>Matches only files that git-annex believes are present in all repositories+in the specified group.</p></li>+<li><p>--smallerthan=size</p></li>+<li><p>--largerthan=size</p>++<p>Matches only files whose content is smaller than, or larger than the+specified size.</p>++<p>The size can be specified with any commonly used units, for example,+"0.5 gb" or "100 KiloBytes"</p></li>+<li><p>--not</p>++<p>Inverts the next file matching option. For example, to only act on+files with less than 3 copies, use --not --copies=3</p></li>+<li><p>--and</p>++<p>Requires that both the previous and the next file matching option matches.+The default.</p></li>+<li><p>--or</p>++<p>Requires that either the previous, or the next file matching option matches.</p></li>+<li><p>-(</p>++<p>Opens a group of file matching options.</p></li>+<li><p>-)</p>++<p>Closes a group of file matching options.</p></li>+</ul>+++<h1>PREFERRED CONTENT</h1>++<p>Each repository has a preferred content setting, which specifies content+that the repository wants to have present. These settings can be configured+using <code>git annex vicfg</code>. They are used by the <code>--auto</code> option, and+by the git-annex assistant.</p>++<p>The preferred content settings are similar, but not identical to+the file matching options specified above, just without the dashes.+For example:</p>++<pre><code>exclude=archive/* and (include=*.mp3 or smallerthan=1mb)+</code></pre>++<p>The main differences are that <code>exclude=</code> and <code>include=</code> always+match relative to the top of the git repository, and that there is+no equivilant to --in.</p>++<h1>CONFIGURATION</h1>++<p>Like other git commands, git-annex is configured via <code>.git/config</code>.+Here are all the supported configuration settings.</p>++<ul>+<li><p><code>annex.uuid</code></p>++<p>A unique UUID for this repository (automatically set).</p></li>+<li><p><code>annex.numcopies</code></p>++<p>Number of copies of files to keep across all repositories. (default: 1)</p>++<p>Note that setting numcopies to 0 is very unsafe.</p></li>+<li><p><code>annex.backends</code></p>++<p>Space-separated list of names of the key-value backends to use.+The first listed is used to store new files by default.</p></li>+<li><p><code>annex.diskreserve</code></p>++<p>Amount of disk space to reserve. Disk space is checked when transferring+content to avoid running out, and additional free space can be reserved+via this option, to make space for more important content (such as git+commit logs). Can be specified with any commonly used units, for example,+"0.5 gb" or "100 KiloBytes"</p>++<p>The default reserve is 1 megabyte.</p></li>+<li><p><code>annex.largefiles</code></p>++<p>Allows configuring which files <code>git annex add</code> and the assistant consider+to be large enough to need to be added to the annex. By default,+all files are added to the annex.</p>++<p>The value is a preferred content expression. See PREFERRED CONTENT+for details.</p>++<p>Example:</p>++<p>  annex.largefiles = largerthan=100kb and not (include=<em>.c or include=</em>.h)</p></li>+<li><p><code>annex.queuesize</code></p>++<p>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+the queue size can speed it up.</p></li>+<li><p><code>annex.bloomcapacity</code></p>++<p>The <code>git annex unused</code> 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 <code>git annex unused</code> not noticing some unused+data files. Increasing this will make <code>git-annex unused</code> consume more memory;+run <code>git annex status</code> for memory usage numbers.</p></li>+<li><p><code>annex.bloomaccuracy</code></p>++<p>Adjusts the accuracy of the bloom filter used by+<code>git annex unused</code>. The default accuracy is 1000 --+1 unused file out of 1000 will be missed by <code>git annex unused</code>. Increasing+the accuracy will make <code>git annex unused</code> consume more memory;+run <code>git annex status</code> for memory usage numbers.</p></li>+<li><p><code>annex.sshcaching</code></p>++<p>By default, git-annex caches ssh connections+(if built using a new enough ssh). To disable this, set to <code>false</code>.</p></li>+<li><p><code>annex.alwayscommit</code></p>++<p>By default, git-annex automatically commits data to the git-annex branch+after each command is run. To disable these commits,+set to <code>false</code>. Then data will only be committed when+running <code>git annex merge</code> (or by automatic merges) or <code>git annex sync</code>.</p></li>+<li><p><code>annex.delayadd</code></p>++<p>Makes the watch and assistant commands delay for the specified number of+seconds before adding a newly created file to the annex. Normally this+is not needed, because they already wait for all writers of the file+to close it. On Mac OSX, when not using direct mode this defaults to+1 second, to work around a bad interaction with software there.</p></li>+<li><p><code>annex.autocommit</code></p>++<p>Set to false to prevent the git-annex assistant from automatically+committing changes to files in the repository.</p></li>+<li><p><code>annex.version</code></p>++<p>Automatically maintained, and used to automate upgrades between versions.</p></li>+<li><p><code>annex.direct</code></p>++<p>Set to true when the repository is in direct mode. Should not be set+manually; use the "git annex direct" and "git annex indirect" commands+instead.</p></li>+<li><p><code>annex.crippledfilesystem</code></p>++<p>Set to true if the repository is on a crippled filesystem, such as FAT,+which does not support symbolic links, or hard links, or unix permissions.+This is automatically probed by "git annex init".</p></li>+<li><p><code>remote.&lt;name&gt;.annex-cost</code></p>++<p>When determining which repository to+transfer annexed files from or to, ones with lower costs are preferred.+The default cost is 100 for local repositories, and 200 for remote+repositories.</p></li>+<li><p><code>remote.&lt;name&gt;.annex-cost-command</code></p>++<p>If set, the command is run, and the number it outputs is used as the cost.+This allows varying the cost based on eg, the current network. The+cost-command can be any shell command line.</p></li>+<li><p><code>remote.&lt;name&gt;.annex-start-command</code></p>++<p>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.</p>++<p>The command may be run repeatedly when multiple git-annex processes+are running concurrently.</p></li>+<li><p><code>remote.&lt;name&gt;.annex-stop-command</code></p>++<p>A command to run when git-annex is done using the remote.</p>++<p>The command will only be run once <em>all</em> running git-annex processes+are finished using the remote.</p></li>+<li><p><code>remote.&lt;name&gt;.annex-ignore</code></p>++<p>If set to <code>true</code>, prevents git-annex+from storing file contents on this remote by default.+(You can still request it be used by the --from and --to options.)</p>++<p>This is, for example, useful if the remote is located somewhere+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.</p>++<p>This does not prevent git-annex sync (or the git-annex assistant) from+syncing the git repository to the remote.</p></li>+<li><p><code>remote.&lt;name&gt;.annex-sync</code></p>++<p>If set to <code>false</code>, prevents git-annex sync (and the git-annex assistant)+from syncing with this remote.</p></li>+<li><p><code>remote.&lt;name&gt;.annexUrl</code></p>++<p>Can be used to specify a different url than the regular <code>remote.&lt;name&gt;.url</code>+for git-annex to use when talking with the remote. Similar to the <code>pushUrl</code>+used by git-push.</p></li>+<li><p><code>remote.&lt;name&gt;.annex-uuid</code></p>++<p>git-annex caches UUIDs of remote repositories here.</p></li>+<li><p><code>remote.&lt;name&gt;.annex-trustlevel</code></p>++<p>Configures a local trust level for the remote. This overrides the value+configured by the trust and untrust commands. The value can be any of+"trusted", "semitrusted" or "untrusted".</p></li>+<li><p><code>remote.&lt;name&gt;.annex-ssh-options</code></p>++<p>Options to use when using ssh to talk to this remote.</p></li>+<li><p><code>remote.&lt;name&gt;.annex-rsync-options</code></p>++<p>Options to use when using rsync+to or from this remote. For example, to force ipv6, and limit+the bandwidth to 100Kbyte/s, set it to "-6 --bwlimit 100"</p></li>+<li><p><code>remote.&lt;name&gt;.annex-rsync-transport</code></p>++<p>The remote shell to use to connect to the rsync remote. Possible+values are <code>ssh</code> (the default) and <code>rsh</code>, together with their+arguments, for instance <code>ssh -p 2222 -c blowfish</code>; Note that the+remote hostname should not appear there, see rsync(1) for details.+When the transport used is <code>ssh</code>, connections are automatically cached+unless <code>annex.sshcaching</code> is unset.</p></li>+<li><p><code>remote.&lt;name&gt;.annex-bup-split-options</code></p>++<p>Options to pass to bup split when storing content in this remote.+For example, to limit the bandwidth to 100Kbyte/s, set it to "--bwlimit 100k"+(There is no corresponding option for bup join.)</p></li>+<li><p><code>remote.&lt;name&gt;.annex-gnupg-options</code></p>++<p>Options to pass to GnuPG for symmetric encryption. For instance, to+use the AES cipher with a 256 bits key and disable compression, set it+to "--cipher-algo AES256 --compress-algo none". (These options take+precedence over the default GnuPG configuration, which is otherwise+used.)</p></li>+<li><p><code>annex.ssh-options</code>, <code>annex.rsync-options</code>, <code>annex.bup-split-options</code>,+<code>annex.gnupg-options</code></p>++<p>Default ssh, rsync, wget/curl, bup, and GnuPG options to use if a+remote does not have specific options.</p></li>+<li><p><code>annex.web-options</code></p>++<p>Options to use when using wget or curl to download a file from the web.+(wget is always used in preference to curl if available.)+For example, to force ipv4 only, set it to "-4"</p></li>+<li><p><code>annex.http-headers</code></p>++<p>HTTP headers to send when downloading from the web. Multiple lines of+this option can be set, one per header.</p></li>+<li><p><code>annex.http-headers-command</code></p>++<p>If set, the command is run and each line of its output is used as a HTTP+header. This overrides annex.http-headers.</p></li>+<li><p><code>annex.web-download-command</code></p>++<p>Use to specify a command to run to download a file from the web.+(The default is to use wget or curl.)</p>++<p>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.+Note that both these values will automatically be quoted, since+the command is run in a shell.</p></li>+<li><p><code>remote.&lt;name&gt;.rsyncurl</code></p>++<p>Used by rsync special remotes, this configures+the location of the rsync repository to use. Normally this is automatically+set up by <code>git annex initremote</code>, but you can change it if needed.</p></li>+<li><p><code>remote.&lt;name&gt;.buprepo</code></p>++<p>Used by bup special remotes, this configures+the location of the bup repository to use. Normally this is automatically+set up by <code>git annex initremote</code>, but you can change it if needed.</p></li>+<li><p><code>remote.&lt;name&gt;.directory</code></p>++<p>Used by directory special remotes, this configures+the location of the directory where annexed files are stored for this+remote. Normally this is automatically set up by <code>git annex initremote</code>,+but you can change it if needed.</p></li>+<li><p><code>remote.&lt;name&gt;.s3</code></p>++<p>Used to identify Amazon S3 special remotes.+Normally this is automatically set up by <code>git annex initremote</code>.</p></li>+<li><p><code>remote.&lt;name&gt;.glacier</code></p>++<p>Used to identify Amazon Glacier special remotes.+Normally this is automatically set up by <code>git annex initremote</code>.</p></li>+<li><p><code>remote.&lt;name&gt;.webdav</code></p>++<p>Used to identify webdav special remotes.+Normally this is automatically set up by <code>git annex initremote</code>.</p></li>+<li><p><code>remote.&lt;name&gt;.annex-xmppaddress</code></p>++<p>Used to identify the XMPP address of a Jabber buddy.+Normally this is set up by the git-annex assistant when pairing over XMPP.</p></li>+</ul>+++<h1>CONFIGURATION VIA .gitattributes</h1>++<p>The key-value backend used when adding a new file to the annex can be+configured on a per-file-type basis via <code>.gitattributes</code> files. In the file,+the <code>annex.backend</code> attribute can be set to the name of the backend to+use. For example, this here's how to use the WORM backend by default,+but the SHA256E backend for ogg files:</p>++<pre><code>* annex.backend=WORM+*.ogg annex.backend=SHA256E+</code></pre>++<p>The numcopies setting can also be configured on a per-file-type basis via+the <code>annex.numcopies</code> attribute in <code>.gitattributes</code> files. This overrides+any value set using <code>annex.numcopies</code> in <code>.git/config</code>.+For example, this makes two copies be needed for wav files:</p>++<pre><code>*.wav annex.numcopies=2+</code></pre>++<p>Note that setting numcopies to 0 is very unsafe.</p>++<h1>FILES</h1>++<p>These files are used by git-annex:</p>++<p><code>.git/annex/objects/</code> in your git repository contains the annexed file+contents that are currently available. Annexed files in your git+repository symlink to that content.</p>++<p><code>.git/annex/</code> in your git repository contains other run-time information+used by git-annex.</p>++<p><code>~/.config/git-annex/autostart</code> is a list of git repositories+to start the git-annex assistant in.</p>++<h1>SEE ALSO</h1>++<p>Most of git-annex's documentation is available on its web site,+<a href="http://git-annex.branchable.com/">http://git-annex.branchable.com/</a></p>++<p>If git-annex is installed from a package, a copy of its documentation+should be included, in, for example, <code>/usr/share/doc/git-annex/</code></p>++<h1>AUTHOR</h1>++<p>Joey Hess <a href="mailto:joey@kitenet.net">&#106;&#111;&#x65;&#121;&#x40;&#107;&#105;&#x74;&#101;&#x6e;&#101;&#116;&#x2e;&#x6e;&#101;&#116;</a></p>++<p><a href="http://git-annex.branchable.com/">http://git-annex.branchable.com/</a></p>++<p>Warning: Automatically converted into a man page by mdwn2man. Edit with care</p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./git-annex-shell.html">git-annex-shell</a>++<a href="./how_it_works.html">how it works</a>++<a href="./links/key_concepts.html">links/key concepts</a>++<a href="./preferred_content.html">preferred content</a>++<a href="./tips/Using_Git-annex_as_a_web_browsing_assistant.html">tips/Using Git-annex as a web browsing assistant</a>++<a href="./walkthrough/using_ssh_remotes.html">walkthrough/using ssh remotes</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:45 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:45 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/git-union-merge.html view
@@ -0,0 +1,165 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>git-union-merge</title>++<link rel="stylesheet" href="style.css" type="text/css" />++<link rel="stylesheet" href="local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="./index.html">git-annex</a>/ ++</span>+<span class="title">+git-union-merge++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="./install.html">install</a></li>+<li><a href="./assistant.html">assistant</a></li>+<li><a href="./walkthrough.html">walkthrough</a></li>+<li><a href="./tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="./comments.html">comments</a></li>+<li><a href="./contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<h1>NAME</h1>++<p>git-union-merge - Join branches together using a union merge</p>++<h1>SYNOPSIS</h1>++<p>git union-merge ref ref newref</p>++<h1>DESCRIPTION</h1>++<p>Does a union merge between two refs, storing the result in the+specified newref.</p>++<p>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.+So, this is useful only for branches containing log-type data.</p>++<p>Note that this does not touch the checked out working copy. It operates+entirely on git refs and branches.</p>++<h1>EXAMPLE</h1>++<pre><code>git union-merge git-annex origin/git-annex refs/heads/git-annex +</code></pre>++<p>Merges the current git-annex branch, and a version from origin,+storing the result in the git-annex branch.</p>++<h1>BUGS</h1>++<p>File modes are not currently merged.</p>++<h1>AUTHOR</h1>++<p>Joey Hess <a href="mailto:joey@kitenet.net">&#x6a;&#x6f;&#x65;&#121;&#64;&#x6b;&#105;&#x74;&#101;&#110;&#x65;&#116;&#46;&#x6e;&#101;&#116;</a></p>++<p><a href="http://git-annex.branchable.com/">http://git-annex.branchable.com/</a></p>++<p>Warning: Automatically converted into a man page by mdwn2man. Edit with care</p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./internals.html">internals</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Fri Sep 28 01:45:57 2012</span>+<!-- Created <span class="date">Fri Sep 28 01:45:57 2012</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/how_it_works.html view
@@ -0,0 +1,167 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>how it works</title>++<link rel="stylesheet" href="style.css" type="text/css" />++<link rel="stylesheet" href="local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="./index.html">git-annex</a>/ ++</span>+<span class="title">+how it works++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="./install.html">install</a></li>+<li><a href="./assistant.html">assistant</a></li>+<li><a href="./walkthrough.html">walkthrough</a></li>+<li><a href="./tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="./comments.html">comments</a></li>+<li><a href="./contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>This page gives a high-level view of git-annex. For a detailed+low-level view, see <a href="./git-annex.html">the man page</a> and <a href="./internals.html">internals</a>.</p>++<p>You do not need to read this page to get started with using git-annex. The+<a href="./walkthrough.html">walkthrough</a> provides step-by-step instructions.</p>++<p>Still reading? Ok. Git's man page calls it "a stupid content+tracker". With git-annex, git is instead "a stupid filename and metadata"+tracker. The contents of large files are not stored in git, only the+names of the files and some other metadata remain there.</p>++<p>The contents of the files are kept by git-annex in a distributed key/value+store consisting of every clone of a given git repository. That's a fancy+way to say that git-annex stores the actual file content somewhere under+<code>.git/annex/</code>. (See <a href="./internals.html">internals</a> for details.)</p>++<p>That was the values; what about the keys? Well, a key is calculated for a+given file when it's first added into git-annex. Normally this uses a hash+of its contents, but various <a href="./backends.html">backends</a> can produce different sorts of+keys. The file that gets checked into git is just a symlink to the key+under <code>.git/annex/</code>. If the content of a file is modified, that produces+a different key (and the symlink is changed).</p>++<p>A file's content can be <a href="./transferring_data.html">transferred</a> from one+repository to another by git-annex. Which repositories contain a given+value is tracked by git-annex (see <a href="./location_tracking.html">location tracking</a>). It stores this+tracking information in a separate branch, named "git-annex". All you ever+do with the "git-annex" branch is push/pull it around between repositories,+to <a href="./sync.html">sync</a> up git-annex's view of the world.</p>++<p>That's really all there is to it. Oh, there are <a href="./special_remotes.html">special remotes</a> that+let values be stored other places than git repositories (anything from+Amazon S3 to a USB key), and there's a pile of commands listed in+<a href="./git-annex.html">the man page</a> to handle moving the values around and managing+them. But if you grok the description above, you can see through all that.+It's really just symlinks, keys, values, and a git-annex branch to store+additional metadata.</p>++<hr />++<p>Next: <a href="./install.html">install</a> or <a href="./walkthrough.html">walkthrough</a></p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./links/key_concepts.html">links/key concepts</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Fri Sep 28 01:45:57 2012</span>+<!-- Created <span class="date">Fri Sep 28 01:45:57 2012</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/ikiwiki/ikiwiki.js view
@@ -0,0 +1,54 @@+// ikiwiki's javascript utility function library++var hooks;++// Run onload as soon as the DOM is ready, if possible.+// gecko, opera 9+if (document.addEventListener) {+	document.addEventListener("DOMContentLoaded", run_hooks_onload, false);+}+// other browsers+window.onload = run_hooks_onload;++var onload_done = 0;++function run_hooks_onload() {+	// avoid firing twice+	if (onload_done)+		return;+	onload_done = true;++	run_hooks("onload");+}++function run_hooks(name) {+	if (typeof(hooks) != "undefined") {+		for (var i = 0; i < hooks.length; i++) {+			if (hooks[i].name == name) {+				hooks[i].call();+			}+		}+	}+}++function hook(name, call) {+	if (typeof(hooks) == "undefined")+		hooks = new Array;+	hooks.push({name: name, call: call});+}++function getElementsByClass(cls, node, tag) {+        if (document.getElementsByClass)+                return document.getElementsByClass(cls, node, tag);+        if (! node) node = document;+        if (! tag) tag = '*';+        var ret = new Array();+        var pattern = new RegExp("(^|\\s)"+cls+"(\\s|$)");+        var els = node.getElementsByTagName(tag);+        for (i = 0; i < els.length; i++) {+                if ( pattern.test(els[i].className) ) {+                        ret.push(els[i]);+                }+        }+        return ret;+}
+ debian/git-annex/usr/share/doc/git-annex/html/ikiwiki/relativedate.js view
@@ -0,0 +1,75 @@+// Causes html elements in the 'relativedate' class to be displayed+// as relative dates. The date is parsed from the title attribute, or from+// the element content.++var dateElements;++hook("onload", getDates);++function getDates() {+	dateElements = getElementsByClass('relativedate');+	for (var i = 0; i < dateElements.length; i++) {+		var elt = dateElements[i];+		var title = elt.attributes.title;+		var d = new Date(title ? title.value : elt.innerHTML);+		if (! isNaN(d)) {+			dateElements[i].date=d;+			elt.title=elt.innerHTML;+		}+	}++	showDates();+}++function showDates() {+	for (var i = 0; i < dateElements.length; i++) {+		var elt = dateElements[i];+		var d = elt.date;+		if (! isNaN(d)) {+			elt.innerHTML=relativeDate(d);+		}+	}+	setTimeout(showDates,30000); // keep updating every 30s+}++var timeUnits = [+	{ unit: 'year',		seconds: 60 * 60 * 24 * 364 },+	{ unit: 'month',	seconds: 60 * 60 * 24 * 30 },+	{ unit: 'day',		seconds: 60 * 60 * 24 },+	{ unit: 'hour',		seconds: 60 * 60 },+	{ unit: 'minute',	seconds: 60 },+];++function relativeDate(date) {+	var now = new Date();+	var offset = date.getTime() - now.getTime();+	var seconds = Math.round(Math.abs(offset) / 1000);++	// hack to avoid reading just in the future if there is a minor+	// amount of clock slip+	if (offset >= 0 && seconds < 30 * 60 * 60) {+		return "just now";+	}++	var ret = "";+	var shown = 0;+	for (i = 0; i < timeUnits.length; i++) {+		if (seconds >= timeUnits[i].seconds) {+			var num = Math.floor(seconds / timeUnits[i].seconds);+			seconds -= num * timeUnits[i].seconds;+			if (ret)+				ret += "and ";+			ret += num + " " + timeUnits[i].unit + (num > 1 ? "s" : "") + " ";++			if (++shown == 2)+				break;+		}+		else if (shown)+			break;+	}++	if (! ret)+		ret = "less than a minute "++	return ret + (offset < 0 ? "ago" : "from now");+}
+ debian/git-annex/usr/share/doc/git-annex/html/ikiwiki/toggle.js view
@@ -0,0 +1,29 @@+// Uses CSS to hide toggleables, to avoid any flashing on page load. The+// CSS is only emitted after it tests that it's going to be able+// to show the toggleables.+if (document.getElementById && document.getElementsByTagName && document.createTextNode) {+	document.write('<style type="text/css">div.toggleable { display: none; }</style>');+	hook("onload", inittoggle);+}++function inittoggle() {+	var as = getElementsByClass('toggle');+	for (var i = 0; i < as.length; i++) {+		var id = as[i].href.match(/#(\w.+)/)[1];+		if (document.getElementById(id).className == "toggleable")+			document.getElementById(id).style.display="none";+		as[i].onclick = function() {+			toggle(this);+			return false;+		}+	}+}++function toggle(s) {+	var id = s.href.match(/#(\w.+)/)[1];+	style = document.getElementById(id).style;+	if (style.display == "none")+		style.display = "block";+	else+		style.display = "none";+}
+ debian/git-annex/usr/share/doc/git-annex/html/index.html view
@@ -0,0 +1,306 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>git-annex</title>++<link rel="stylesheet" href="style.css" type="text/css" />++<link rel="stylesheet" href="local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++</span>+<span class="title">+git-annex++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="./install.html">install</a></li>+<li><a href="./assistant.html">assistant</a></li>+<li><a href="./walkthrough.html">walkthrough</a></li>+<li><a href="./tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="./comments.html">comments</a></li>+<li><a href="./contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>++++++<p><a href="./feeds.html">Feeds</a>:</p>++<p><small></p>+++++<p></small></p>++</div>+++<div id="pagebody">++<div id="content">+<p>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, time, or disk space.</p>++<p><a href="./assistant.html"><img src="./assistant/thumbnail.png" width="216" height="28" class="img" align="right" /></a>+git-annex is designed for git users who love the command line.+For everyone else, the <a href="./assistant.html">git-annex assistant</a> turns+git-annex into an easy to use folder synchroniser.</p>++<p>To get a feel for git-annex, see the <a href="./walkthrough.html">walkthrough</a>.</p>++<table>+<tr>+<td width="33%" valign="top"><h3>key concepts</h3>++<ul>+<li><a href="./git-annex.html">git-annex man page</a></li>+<li><a href="./how_it_works.html">how it works</a></li>+<li><a href="./special_remotes.html">special remotes</a></li>+<li><a href="./sync.html">sync</a></li>+<li><a href="./direct_mode.html">direct mode</a></li>+</ul>+++++</td>+<td width="33%" valign="top"><h3>the details</h3>++<ul>+<li><a href="./encryption.html">encryption</a></li>+<li><a href="./backends.html">key-value backends</a></li>+<li><a href="./bare_repositories.html">bare repositories</a></li>+<li><a href="./internals.html">internals</a></li>+<li><a href="./scalability.html">scalability</a></li>+<li><a href="./design.html">design</a></li>+</ul>+++++</td>+<td width="33%" valign="top"><h3>other stuff</h3>++<ul>+<li><a href="./testimonials.html">testimonials</a></li>+<li><a href="./not.html">what git annex is not</a></li>+<li><a href="./related_software.html">related software</a></li>+<li><a href="./sitemap.html">sitemap</a></li>+</ul>+++++</td>+</tr>+</table>+++++<table>+<tr>+<td width="50%" valign="top"><h3>use case: The Archivist</h3>++<p>Bob has many drives to archive his data, most of them kept offline, in a+safe place.</p>++<p>With git-annex, Bob has a single directory tree that includes all+his files, even if their content is being stored offline. He can+reorganize his files using that tree, committing new versions to git,+without worry about accidentally deleting anything.</p>++<p>When Bob needs access to some files, git-annex can tell him which drive(s)+they're on, and easily make them available. Indeed, every drive knows what+is on every other drive.<br/>+<small><a href="./location_tracking.html">more about location tracking</a></small></p>++<p>Bob thinks long-term, and so he appreciates that git-annex uses a simple+repository format. He knows his files will be accessible in the future+even if the world has forgotten about git-annex and git.<br/>+<small><a href="./future_proofing.html">more about future-proofing</a></small></p>++<p>Run in a cron job, git-annex adds new files to archival drives at night. It+also helps Bob keep track of intentional, and unintentional copies of+files, and logs information he can use to decide when it's time to duplicate+the content of old drives.<br/>+<small><a href="./copies.html">more about backup copies</a></small></p>++++</td>+<td width="50%" valign="top"><h3>use case: The Nomad</h3>++<p>Alice is always on the move, often with her trusty netbook and a small+handheld terabyte USB drive, or a smaller USB keydrive. She has a server+out there on the net. She stores data, encrypted in the Cloud.</p>++<p>All these things can have different files on them, but Alice no longer+has to deal with the tedious process of keeping them manually in sync,+or remembering where she put a file. git-annex manages all these data+sources as if they were git remotes.<br/>+<small><a href="./special_remotes.html">more about special remotes</a></small></p>++<p>When she has 1 bar on her cell, Alice queues up interesting files on her+server for later. At a coffee shop, she has git-annex download them to her+USB drive. High in the sky or in a remote cabin, she catches up on+podcasts, videos, and games, first letting git-annex copy them from+her USB drive to the netbook (this saves battery power).<br/>+<small><a href="./transferring_data.html">more about transferring data</a></small></p>++<p>When she's done, she tells git-annex which to keep and which to remove.+They're all removed from her netbook to save space, and Alice knows+that next time she syncs up to the net, her changes will be synced back+to her server.<br/>+<small><a href="./distributed_version_control.html">more about distributed version control</a></small></p>++++</td>+</tr>+</table>+++<p>If that describes you, or if you're some from column A and some from column+B, then git-annex may be the tool you've been looking for to expand from+keeping all your small important files in git, to managing your large+files with git.</p>++<table>+<tr>+<td width="50%" valign="top"><h3>Recent <a href="./news.html">news</a></h3>++<h3><span class="createlink">Dev blog</span></h3>++++</td>+<td valign="top"><h3>Recent <a href="./videos.html">videos</a></h3>++<p>++<a href="./videos/git-annex_assistant_archiving.html">git-annex assistant archiving</a><br />++<i>+Posted <span class="date">Sat May  4 11:06:46 2013</span>++</i>+</p>+++<p>++<a href="./videos/git-annex_assistant_remote_sharing.html">git-annex assistant remote sharing</a><br />++<i>+Posted <span class="date">Sat May  4 11:06:46 2013</span>++</i>+</p>+++<h3>Recent <span class="createlink">forum posts</span></h3>++++</td>+</tr>+</table>+++<hr />++<p>git-annex is <a href="./license.html">Free Software</a></p>++<p>git-annex's wiki is powered by <a href="http://ikiwiki.info/">Ikiwiki</a> and+hosted by <a href="http://branchable.com/">Branchable</a>.</p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">++++++++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:45 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:45 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/install.html view
@@ -0,0 +1,219 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>install</title>++<link rel="stylesheet" href="style.css" type="text/css" />++<link rel="stylesheet" href="local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="./index.html">git-annex</a>/ ++</span>+<span class="title">+install++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><span class="selflink">install</span></li>+<li><a href="./assistant.html">assistant</a></li>+<li><a href="./walkthrough.html">walkthrough</a></li>+<li><a href="./tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="./comments.html">comments</a></li>+<li><a href="./contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<h2>Pick your OS</h2>++<table>+    <thead>+        <tr>+            <th>detailed instructions</th>+            <th> quick install</th>+        </tr>+    </thead>+    <tbody>+        <tr>+            <td><a href="./install/OSX.html">OSX</a></td>+            <td> <a href="http://downloads.kitenet.net/git-annex/OSX/current/">download git-annex.app</a></td>+        </tr>+        <tr>+            <td><a href="./install/Android.html">Android</a></td>+            <td> <a href="http://downloads.kitenet.net/git-annex/android/current/">download git-annex.apk</a> <strong>beta</strong></td>+        </tr>+        <tr>+            <td><a href="./install/Linux_standalone.html">Linux</a></td>+            <td> <a href="http://downloads.kitenet.net/git-annex/linux/current/">download prebuilt linux tarball</a></td>+        </tr>+        <tr>+            <td><a href="./install/Debian.html">Debian</a></td>+            <td> <code>apt-get install git-annex</code></td>+        </tr>+        <tr>+            <td><a href="./install/Ubuntu.html">Ubuntu</a></td>+            <td> <code>apt-get install git-annex</code></td>+        </tr>+        <tr>+            <td><a href="./install/Fedora.html">Fedora</a></td>+            <td> <code>yum install git-annex</code></td>+        </tr>+        <tr>+            <td><a href="./install/FreeBSD.html">FreeBSD</a></td>+            <td> <code>pkg_add -r hs-git-annex</code></td>+        </tr>+        <tr>+            <td><a href="./install/ArchLinux.html">ArchLinux</a></td>+            <td> <code>yaourt -Sy git-annex</code></td>+        </tr>+        <tr>+            <td><a href="./install/NixOS.html">NixOS</a></td>+            <td> <code>nix-env -i git-annex</code></td>+        </tr>+        <tr>+            <td><a href="./install/Gentoo.html">Gentoo</a></td>+            <td> <code>emerge git-annex</code></td>+        </tr>+        <tr>+            <td><a href="./install/ScientificLinux5.html">ScientificLinux5</a></td>+            <td> (and other RHEL5 clones like CentOS5)</td>+        </tr>+        <tr>+            <td><a href="./install/openSUSE.html">openSUSE</a></td>+            <td></td>+        </tr>+        <tr>+            <td>Windows</td>+            <td> <span class="createlink">sorry, Windows not supported yet</span></td>+        </tr>+    </tbody>+</table>+++<h2>Using cabal</h2>++<p>As a haskell package, git-annex can be installed using cabal.+Start by installing the <a href="http://hackage.haskell.org/platform/">Haskell Platform</a>,+and then:</p>++<pre><code>cabal install git-annex --bindir=$HOME/bin+</code></pre>++<p>That installs the latest release. Alternatively, you can <a href="./download.html">download</a>+git-annex yourself and <a href="./install/cabal.html">manually build with cabal</a>.</p>++<h2>Installation from scratch</h2>++<p>This is not recommended, but if you really want to, see <a href="./install/fromscratch.html">fromscratch</a>.</p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./assistant.html">assistant</a>++<a href="./download.html">download</a>++<a href="./how_it_works.html">how it works</a>++<a href="./install/Linux_standalone.html">install/Linux standalone</a>++<a href="./install/openSUSE.html">install/openSUSE</a>++<a href="./sidebar.html">sidebar</a>++<a href="./tips/centralized_git_repository_tutorial.html">tips/centralized git repository tutorial</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:45 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:45 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/install/Android.html view
@@ -0,0 +1,172 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>Android</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../install.html">install</a>/ ++</span>+<span class="title">+Android++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>git-annex can be used on Android, however you need to know your way around+the command line to install and use it. (Hope to get the webapp working+eventually.)</p>++<h2>Android app</h2>++<p>First, ensure your Android device is configured to allow installation of+non-Market apps. Go to Setup -&gt; Security, and enable "Unknown Sources".</p>++<p>Download the <a href="http://downloads.kitenet.net/git-annex/android/current/">git-annex.apk</a>+onto your Android device, and open it to install.</p>++<p>When you start the Git Annex app, it will dump you into terminal. From+here, you can run git-annex, as well as many standard git and unix commands+provided with the app. You can do everything in the <a href="../walkthrough.html">walkthrough</a> and+more.</p>++<h2>autobuilds</h2>++<p>A daily build is also available.</p>++<ul>+<li><a href="http://downloads.kitenet.net/git-annex/autobuild/android/git-annex.apk">download apk</a> (<a href="http://downloads.kitenet.net/git-annex/autobuild/android/">build logs</a>)</li>+</ul>+++<h2>building it yourself</h2>++<p>git-annex can be built for Android, with <code>make android</code>. It's not an easy+process:</p>++<ul>+<li>First, install <a href="https://github.com/neurocyte/ghc-android">https://github.com/neurocyte/ghc-android</a>.</li>+<li>You also need to install git and all the utilities listed on <a href="./fromscratch.html">fromscratch</a>,+on the system doing the building.</li>+<li>Use ghc-android's cabal to install all necessary dependencies.+Some packages will fail to install on Android; patches to fix them+are in <code>standalone/android/haskell-patches/</code></li>+<li>You will need to have the Android SDK and NDK installed; see+<code>standalone/android/Makefile</code> to configure the paths to them. You'll also+need ant, and the JDK.</li>+<li>Then to build the full Android app bundle, use <code>make androidapp</code></li>+</ul>+++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="../install.html">install</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:45 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:45 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/install/ArchLinux.html view
@@ -0,0 +1,184 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>ArchLinux</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../install.html">install</a>/ ++</span>+<span class="title">+ArchLinux++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>There is a non-official source package for git-annex in+<a href="https://aur.archlinux.org/packages.php?ID=44272">AUR</a>.</p>++<p>You can then build it yourself or use a wrapper for AUR+such as yaourt:</p>++<pre>+$ yaourt -Sy git-annex+</pre>+++<hr />++<p>I'm told the AUR has some dependency problems currently.+If it doesn't work, you can just use cabal:</p>++<pre>+pacman -S git rsync curl wget gpg openssh cabal-install+cabal install git-annex --bindir=$HOME/bin+</pre>+++</div>++++<div id="comments">+<div  class="feedlink">+++</div>+<div class="comment" id="comment-9fd360edd0a46658ae4d51e47586fd64">++++<div class="comment-subject">++<a href="/install/ArchLinux.html#comment-9fd360edd0a46658ae4d51e47586fd64">Arch Linux</a>++</div>++<div class="inlinecontent">+For Arch Linux there should be the AUR package <a href="https://aur.archlinux.org/packages.php?ID=63503">git-annex-bin</a> mentioned, because it's easier to install (no haskell dependencies to be installed) and is based on the prebuild linux binary tarball.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawlwYMdU0H7P7MMlD0v_BcczO-ZkYHY4zuY">Morris</a>+</span>+++&mdash; <span class="date">Wed Oct 17 09:21:24 2012</span>+</div>++++<div style="clear: both"></div>+</div>+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="../install.html">install</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Fri Sep 28 01:45:57 2012</span>+<!-- Created <span class="date">Fri Sep 28 01:45:57 2012</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/install/Debian.html view
@@ -0,0 +1,354 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>Debian</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../install.html">install</a>/ ++</span>+<span class="title">+Debian++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<h2>Debian testing or unstable</h2>++<pre><code>sudo apt-get install git-annex+</code></pre>++<h2>Debian 7.0 "wheezy":</h2>++<pre><code>sudo apt-get install git-annex+</code></pre>++<p>Note: This version does not include support for the <a href="../assistant.html">assistant</a>.+The version of git-annex in unstable can be easily installed in wheezy.</p>++<h2>Debian 6.0 "squeeze"</h2>++<p>Follow the instructions to <a href="http://backports.debian.org/Instructions/">enable backports</a>.</p>++<pre><code>sudo apt-get -t squeeze-backports install git-annex+</code></pre>++</div>++++<div id="comments">+<div  class="feedlink">+++</div>+<div class="comment" id="comment-5c71f1d9ac9246b3376325d574d9eefc">++++<div class="comment-subject">++<a href="/install/Debian.html#comment-5c71f1d9ac9246b3376325d574d9eefc">squeeze-backports update?</a>++</div>++<div class="inlinecontent">+<p>Is there going to be an update of git-annex in debian squeeze-backports to a version that supports repository version 3?+Thx</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawla7u6eLKNYZ09Z7xwBffqLaXquMQC07fU">Matthias</a>+</span>+++&mdash; <span class="date">Wed Aug 17 08:34:46 2011</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-a7f0a516edda1f6e61c13aaa72ff5bae">++++<div class="comment-subject">++<a href="/install/Debian.html#comment-a7f0a516edda1f6e61c13aaa72ff5bae">Re: squeeze-backports update?</a>++</div>++<div class="inlinecontent">+Yes, I uploaded it last night.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joey.kitenet.net/">joey</a>+</span>+++&mdash; <span class="date">Wed Aug 17 11:34:29 2011</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-63e478d409ce03723b81754f2a28fae9">++++<div class="comment-subject">++<a href="/install/Debian.html#comment-63e478d409ce03723b81754f2a28fae9">ARM</a>++</div>++<div class="inlinecontent">+is there any package for Debian armhf? I'd love to install git-annex on my raspberry pi++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawkstq9oH1vHXY_VP0nYO9Gg3eKnKerDGRI">Hadi</a>+</span>+++&mdash; <span class="date">Tue Jul 31 11:13:06 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-92b79e57e84627f9a7e016eaab2549ce">++++<div class="comment-subject">++<a href="/install/Debian.html#comment-92b79e57e84627f9a7e016eaab2549ce">comment 4</a>++</div>++<div class="inlinecontent">+<p>Yes, git-annex is available for every Debian architecture which supports Haskell, including all arm ports:</p>++<pre>git-annex | 3.20120629         | wheezy            | source, amd64, armel, armhf, i386, kfreebsd-amd64, kfreebsd-i386, mips, mipsel, powerpc, s390, s390x, sparc</pre>++++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Tue Jul 31 11:41:43 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-eeaed986d5abc6fdedc9824557466c7d">++++<div class="comment-subject">++<a href="/install/Debian.html#comment-eeaed986d5abc6fdedc9824557466c7d">wheezy support</a>++</div>++<div class="inlinecontent">+<p>Hey Joey,</p>++<p>As a backer, I'd like to see a backport of git annex assistant to wheezy.</p>++<p>It is currently impossible to get this assistant in wheezy without compiling it with cabal.</p>++<p>It would be nice to see it in backports or something :)</p>++<p>Best,</p>++<p>Allard</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawk3eiQwrpDGJ3MJb9NWB84m4tzQ6XjVZnY">Allard</a>+</span>+++&mdash; <span class="date">Fri Nov 23 16:47:58 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-7ed3a900cbf8a9a57afc4d871f354ee4">++++<div class="comment-subject">++<a href="/install/Debian.html#comment-7ed3a900cbf8a9a57afc4d871f354ee4">comment 6</a>++</div>++<div class="inlinecontent">+The git-annex packages in unstable install on testing (wheezy).++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://svend.ciffer.net/">svend [ciffer.net]</a>+</span>+++&mdash; <span class="date">Fri Nov 23 17:38:29 2012</span>+</div>++++<div style="clear: both"></div>+</div>+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="../install.html">install</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:45 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:45 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/install/Fedora.html view
@@ -0,0 +1,169 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>Fedora</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../install.html">install</a>/ ++</span>+<span class="title">+Fedora++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>git-annex is available in recent versions of Fedora. Although it is+not currently a very recent version, it should work ok.+<a href="http://koji.fedoraproject.org/koji/packageinfo?packageID=14145">status</a></p>++<p>Should be as simple as: <code>yum install git-annex</code></p>++<hr />++<p>To install the latest version of git-annex on Fedora 18 and later, you can use <code>cabal</code>:</p>++<pre>+# Install dependencies+sudo yum install libxml2-devel gnutls-devel libgsasl-devel ghc cabal-install happy alex libidn-devel+# Update the cabal list+cabal update+# Install c2hs, required by dependencies of git-annex, but not automatically installed+cabal install --bindir=$HOME/bin c2hs+# Install git-annex+cabal install --bindir=$HOME/bin git-annex+</pre>+++<hr />++<p>Older version? Here's an installation recipe for Fedora 14 through 15.</p>++<pre>+sudo yum install ghc cabal-install+git clone git://git-annex.branchable.com/ git-annex+cd git-annex+git checkout ghc7.0+cabal update+cabal install --only-dependencies+cabal configure+cabal build+cabal install --bindir=$HOME/bin+</pre>+++<p>Note: You can't just use <code>cabal install git-annex</code>, because Fedora does+not yet ship ghc 7.4.</p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="../install.html">install</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:45 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:45 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/install/FreeBSD.html view
@@ -0,0 +1,130 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>FreeBSD</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../install.html">install</a>/ ++</span>+<span class="title">+FreeBSD++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>git-annex is in FreeBSD ports in+<a href="http://www.freshports.org/devel/hs-git-annex/">devel/git-annex</a></p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="../install.html">install</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Fri Sep 28 01:45:57 2012</span>+<!-- Created <span class="date">Fri Sep 28 01:45:57 2012</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/install/Gentoo.html view
@@ -0,0 +1,131 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>Gentoo</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../install.html">install</a>/ ++</span>+<span class="title">+Gentoo++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>Gentoo users can: <code>emerge git-annex</code></p>++<p>A possibly more up-to-date version is in the haskell portage overlay.</p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="../install.html">install</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Fri Sep 28 01:45:57 2012</span>+<!-- Created <span class="date">Fri Sep 28 01:45:57 2012</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/install/Linux_standalone.html view
@@ -0,0 +1,164 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>Linux standalone</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../install.html">install</a>/ ++</span>+<span class="title">+Linux standalone++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>If your Linux distribution does not have git-annex packaged up for you,+you can either build it <a href="./fromscratch.html">fromscratch</a>, or you can use a handy+prebuilt tarball of the most recent release.</p>++<p>This tarball should work on most Linux systems. It does not depend+on anything except for glibc.</p>++<p><a href="http://downloads.kitenet.net/git-annex/linux/current/">download tarball</a></p>++<p>To use, just unpack the tarball, <code>cd git-annex.linux</code> and run <code>./runshell</code>+-- this sets up an environment where you can use <code>git annex</code>, as well+as everything else included in the bundle.</p>++<p>Alternatively, you can unpack the tarball, and add the directory to your+<code>PATH</code>. This lets you use <code>git annex</code>, without overriding your system's+own versions of git, etc.</p>++<p>Warning: This is a last resort. Most Linux users should instead+<a href="../install.html">install</a> git-annex from their distribution of choice.</p>++<h2>autobuilds</h2>++<p>A daily build is also available.</p>++<ul>+<li>i386: <a href="http://downloads.kitenet.net/git-annex/autobuild/i386/git-annex-standalone-i386.tar.gz">download tarball</a> (<a href="http://downloads.kitenet.net/git-annex/autobuild/i386/">build logs</a>)</li>+<li>amd64: <a href="http://downloads.kitenet.net/git-annex/autobuild/amd64/git-annex-standalone-amd64.tar.gz">download tarball</a> (<a href="http://downloads.kitenet.net/git-annex/autobuild/amd64/">build logs</a>)</li>+</ul>+++<h2>gitannex-install</h2>++<p>Eskild Hustvedt has contributed a+<a href="https://github.com/zerodogg/scriptbucket/blob/master/gitannex-install">gitannex-install</a>+script to manage keeping up to date with new releases using the standalone+built.</p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="../install.html">install</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:45 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:45 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/install/NixOS.html view
@@ -0,0 +1,135 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>NixOS</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../install.html">install</a>/ ++</span>+<span class="title">+NixOS++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>Users of the <a href="http://nixos.org/">Nix package manager</a> can install it by running:</p>++<pre><code>nix-env -i git-annex+</code></pre>++<p>The build status of the package within Nix can be seen on the <a href="http://hydra.nixos.org/job/nixpkgs/trunk/gitAndTools.gitAnnex">Hydra Build+Farm</a>.</p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="../install.html">install</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Fri Sep 28 01:45:57 2012</span>+<!-- Created <span class="date">Fri Sep 28 01:45:57 2012</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/install/OSX.html view
@@ -0,0 +1,913 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>OSX</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../install.html">install</a>/ ++</span>+<span class="title">+OSX++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<h2>git-annex.app</h2>++<p><a href="../assistant.html"><img src="../assistant/osx-app.png" width="87" height="98" class="img" align="right" /></a>+For easy installation, use the+<a href="http://downloads.kitenet.net/git-annex/OSX/current/">beta release of git-annex.app</a>.</p>++<p>Be sure to select the build matching your version of OSX.</p>++<p>If you want to run the <a href="../assistant.html">git-annex assistant</a>, just+install the app, look for the icon, and start it up.</p>++<p>To use git-annex at the command line, you can add+<code>git-annex.app/Contents/MacOS</code> to your <code>PATH</code></p>++<p>Alternatively, from the command line you can run+<code>git-annex.app/Contents/MacOS/runshell</code>, which makes your shell use all the+programs bundled inside the app, including not just git-annex, but git, and+several more. Handy if you don't otherwise have git installed.</p>++<p>This is still a work in progress. See <span class="createlink">OSX app issues</span> for problem+reports.</p>++<h2>autobuilds</h2>++<p><a href="http://www.sgenomics.org/~jtang/">Jimmy Tang</a> autobuilds+the app for OSX Lion.</p>++<ul>+<li><a href="http://www.sgenomics.org/~jtang/gitbuilder-git-annex-x00-x86_64-apple-darwin10.8.0-binary/ref/master/git-annex.dmg.bz2">autobuild of git-annex.app</a> (<a href="http://www.sgenomics.org/~jtang/gitbuilder-git-annex-x00-x86_64-apple-darwin10.8.0-binary/">build logs</a>)++<ul>+<li><a href="http://www.sgenomics.org/~jtang/gitbuilder-git-annex-x00-x86_64-apple-darwin10.8.0-binary/sha1/">past builds</a> -- directories are named from the commitid's</li>+</ul>+</li>+</ul>+++<p><span class="createlink">Joey</span> autobuilds the app for Mountain Lion.</p>++<ul>+<li><a href="http://downloads.kitenet.net/git-annex/autobuild/x86_64-apple-mountain-lion/git-annex.dmg.bz2">autobuild of git-annex.app</a> (<a href="http://downloads.kitenet.net/git-annex/autobuild/x86_64-apple-mountain-lion/">build logs</a>)</li>+</ul>+++<h2>using Brew</h2>++<pre>+brew update+brew install haskell-platform git ossp-uuid md5sha1sum coreutils libgsasl gnutls libidn libgsasl pkg-config libxml2+brew link libxml2+cabal update+PATH=$HOME/bin:$PATH+cabal install c2hs git-annex --bindir=$HOME/bin+</pre>+++<h2>using MacPorts</h2>++<p>Install the Haskell Platform from <a href="http://hackage.haskell.org/platform/mac.html">http://hackage.haskell.org/platform/mac.html</a>.+The version provided by Macports is too old to work with current versions of git-annex.+Then execute</p>++<pre>+sudo port install git-core ossp-uuid md5sha1sum coreutils gnutls libxml2 libgsasl pkgconfig+sudo cabal update+PATH=$HOME/bin:$PATH+cabal install c2hs git-annex --bindir=$HOME/bin+</pre>+++<h2>PATH setup</h2>++<p>Do not forget to add to your PATH variable your ~/bin folder. In your .bashrc, for example:</p>++<pre>+PATH=$HOME/bin:$PATH+</pre>+++<p>See also:</p>++<ul>+<li><span class="createlink">OSX&#39;s haskell-platform statically links things</span></li>+<li><span class="createlink">OSX&#39;s default sshd behaviour has limited paths set</span></li>+</ul>+++</div>++++<div id="comments">+<div  class="feedlink">+++</div>+<div class="comment" id="comment-22b74f9607c3d417cbe4424802a6d9a3">++++<div class="comment-subject">++<a href="/install/OSX.html#comment-22b74f9607c3d417cbe4424802a6d9a3">comment 2</a>++</div>++<div class="inlinecontent">+<p>I've moved some outdated comments about installing on OSX to <a href="./OSX/old_comments.html">old comments</a>.+And also moved away some comments that helped build the instructions above.</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Tue Jul 24 11:09:29 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-c1481fba3e4b2bd17c35fd1782102c34">++++<div class="comment-subject">++<a href="/install/OSX.html#comment-c1481fba3e4b2bd17c35fd1782102c34">comment 4</a>++</div>++<div class="inlinecontent">+For those that care, I've updated my autobuilder to the latest version of haskell-platform 2012.4.0.0 and it appears to be building correctly.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus">Jimmy</a>+</span>+++&mdash; <span class="date">Mon Dec 10 13:00:43 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-15ba2e00a11b4ca978ad4f0c880be80a">++++<div class="comment-subject">++<a href="/install/OSX.html#comment-15ba2e00a11b4ca978ad4f0c880be80a">comment 3</a>++</div>++<div class="inlinecontent">+<p>Installing via the MacPorts method. I ran into this error.</p>++<pre><code>"_locale_charset", referenced from: _localeEncoding in libHSbase-4.5.1.0.a(PrelIOUtils.o) +ld: symbol(s) not found for architecture x86_64+</code></pre>++<p>I was able to solve and get git-annex to build buy providing the --extra-lib-dirs parameter</p>++<pre><code>cabal install c2hs git-annex --bindir=$HOME/bin --extra-lib-dirs=/usr/lib+</code></pre>++<p>Cheers, <a href="http://woz.io">Daniel Wozniak</a></p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawlDDW-g2WLLsLpcnCm4LykAquFY_nwbIrU">Daniel</a>+</span>+++&mdash; <span class="date">Tue Jan 15 11:22:43 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-aff6acab68610899c9ec3c4cfebe2061">++++<div class="comment-subject">++<a href="/install/OSX.html#comment-aff6acab68610899c9ec3c4cfebe2061">Snow Leopard</a>++</div>++<div class="inlinecontent">+<p>Hi,</p>++<p>Are there plans to provide a git-annex.app that works on Snow Leopard?</p>++<p>Currently there are only installers for the Lions.</p>++<p>http://downloads.kitenet.net/git-annex/OSX/current/</p>++<p>Thanks :-)</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawnaYy6kTuKAHmsa4BtGls2oqa42Jo2w2v0">Pere</a>+</span>+++&mdash; <span class="date">Fri Jan 18 11:51:48 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-e2ab0dd1f11fd464b24aac36ab59637c">++++<div class="comment-subject">++<a href="/install/OSX.html#comment-e2ab0dd1f11fd464b24aac36ab59637c">comment 5</a>++</div>++<div class="inlinecontent">+What we need to provide a Snow Leopard or other version build, is access to a box running that version of OSX, or someone with a box that doesn't mind compiling stuff and setting up the autobuilder (not very hard).++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Fri Jan 18 13:25:36 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-f385a3c668e76ddd01fbf2382bd97cad">++++<div class="comment-subject">++<a href="/install/OSX.html#comment-f385a3c668e76ddd01fbf2382bd97cad">Snow Leopard</a>++</div>++<div class="inlinecontent">+If the process is very automatic I might contribute. I mean, if you tell me, install this and that package and run this script once a week, I might be able to help. I have a MacBook from 2007 with Snow Leopard. I also have macports installed, but I'm not a programmer.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawnaYy6kTuKAHmsa4BtGls2oqa42Jo2w2v0">Pere</a>+</span>+++&mdash; <span class="date">Fri Jan 18 13:57:40 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-5e980d5268356ef30a234e9063576d53">++++<div class="comment-subject">++<a href="/install/OSX.html#comment-5e980d5268356ef30a234e9063576d53">comment 7</a>++</div>++<div class="inlinecontent">+If you can get it to build using the instructions for Brew (or MacPorts) on this page, it's easy to get from there to a distributable app.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Fri Jan 18 16:16:52 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-0c2872d1503ee0e726737393e477a3ed">++++<div class="comment-subject">++<a href="/install/OSX.html#comment-0c2872d1503ee0e726737393e477a3ed">I couldn&#x27;t install it on Snow Leopard</a>++</div>++<div class="inlinecontent">+<p>Bad news, it looks like I'm not able to install git-annex to my machine: When I run</p>++<pre><code>sudo cabal install c2hs git-annex --bindir=$HOME/bin+</code></pre>++<p>I get the following error:</p>++<pre><code>cabal: Error: some packages failed to install:+DAV-0.3 failed during the building phase. The exception was:+ExitFailure 11+git-annex-3.20130114 depends on yesod-core-1.1.7.1 which failed to install.+yesod-1.1.7.2 depends on yesod-core-1.1.7.1 which failed to install.+yesod-auth-1.1.3 depends on yesod-core-1.1.7.1 which failed to install.+yesod-core-1.1.7.1 failed during the building phase. The exception was:+ExitFailure 11+yesod-default-1.1.3 depends on yesod-core-1.1.7.1 which failed to install.+yesod-form-1.2.0.2 depends on yesod-core-1.1.7.1 which failed to install.+yesod-json-1.1.2 depends on yesod-core-1.1.7.1 which failed to install.+yesod-persistent-1.1.0.1 depends on yesod-core-1.1.7.1 which failed to+install.+yesod-static-1.1.1.2 depends on yesod-core-1.1.7.1 which failed to install.+</code></pre>++<p>What does <em>ExitFailure 11</em> mean?</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawnaYy6kTuKAHmsa4BtGls2oqa42Jo2w2v0">Pere</a>+</span>+++&mdash; <span class="date">Sat Jan 19 11:04:27 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-090c9f721facfe6f46f7bb5c601553b3">++++<div class="comment-subject">++<a href="/install/OSX.html#comment-090c9f721facfe6f46f7bb5c601553b3">comment 9</a>++</div>++<div class="inlinecontent">+sig11 is a Segmentation Fault, probably from a C library used by DAV for HTTP in this case.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Sat Jan 19 12:02:35 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-ec90aa06a5a6eb622440f361b8c95cdc">++++<div class="comment-subject">++<a href="/install/OSX.html#comment-ec90aa06a5a6eb622440f361b8c95cdc">Segmentation Fault</a>++</div>++<div class="inlinecontent">+I guess my adventure ends here. :'(++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawnaYy6kTuKAHmsa4BtGls2oqa42Jo2w2v0">Pere</a>+</span>+++&mdash; <span class="date">Sat Jan 19 12:10:08 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-50a7ff1fe462964bc375f4b09f401511">++++<div class="comment-subject">++<a href="/install/OSX.html#comment-50a7ff1fe462964bc375f4b09f401511">Updating to latest build</a>++</div>++<div class="inlinecontent">+What is the appropriate way to update to the latest build of git-annex using cabal?++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawmyFvkaewo432ELwtCoecUGou4v3jCP0Pc">Eric</a>+</span>+++&mdash; <span class="date">Fri Jan 25 02:05:35 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-27ad4e1dfa06c1514a3295ca7ec05b63">++++<div class="comment-subject">++<a href="/install/OSX.html#comment-27ad4e1dfa06c1514a3295ca7ec05b63">git annex on Snow Leopard</a>++</div>++<div class="inlinecontent">+Is there any way I can try to solve or by-pass the Segmentation Fault I commeted before?++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawnaYy6kTuKAHmsa4BtGls2oqa42Jo2w2v0">Pere</a>+</span>+++&mdash; <span class="date">Fri Jan 25 10:36:52 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-cc56a89269e31510a10a74cf477944ce">++++<div class="comment-subject">++<a href="/install/OSX.html#comment-cc56a89269e31510a10a74cf477944ce">comment 13</a>++</div>++<div class="inlinecontent">+@eric <code>cabal update &amp;&amp; cabal upgrade git-annex</code>++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Tue Feb  5 15:46:29 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-c22a0f6e35ed02be187e692435df9945">++++<div class="comment-subject">++<a href="/install/OSX.html#comment-c22a0f6e35ed02be187e692435df9945">more homebrew</a>++</div>++<div class="inlinecontent">+<p>i had macports installed. then i installed brew, instaled haskell via brew. i needed to set+    PATH=$HOME/bin:/usr/local/bin:$PATH</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawmCmNS-oUgYfNg85-LPuxzTZJUp0sIgprM">Jonas</a>+</span>+++&mdash; <span class="date">Sat Feb 16 15:46:47 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-caac3130b31d5e88de2d51e57d40eb66">++++<div class="comment-subject">++<a href="/install/OSX.html#comment-caac3130b31d5e88de2d51e57d40eb66">git annex on Snow Leopard</a>++</div>++<div class="inlinecontent">+<p>I'm having the same issue as @Pere, with a newer version of DAV :(</p>++<p>cabal: Error: some packages failed to install:+DAV-0.3.1 failed during the building phase. The exception was:+ExitFailure 11+git-annex-4.20130323 depends on shakespeare-css-1.0.3 which failed to install.+persistent-1.1.5.1 failed during the building phase. The exception was:+ExitFailure 11+persistent-template-1.1.3.1 depends on persistent-1.1.5.1 which failed to+install.+shakespeare-css-1.0.3 failed during the building phase. The exception was:+ExitFailure 11+yesod-1.1.9.2 depends on shakespeare-css-1.0.3 which failed to install.+yesod-auth-1.1.5.3 depends on shakespeare-css-1.0.3 which failed to install.+yesod-core-1.1.8.2 depends on shakespeare-css-1.0.3 which failed to install.+yesod-default-1.1.3.2 depends on shakespeare-css-1.0.3 which failed to+install.+yesod-form-1.2.1.3 depends on shakespeare-css-1.0.3 which failed to install.+yesod-json-1.1.2.2 depends on shakespeare-css-1.0.3 which failed to install.+yesod-persistent-1.1.0.1 depends on shakespeare-css-1.0.3 which failed to+install.+yesod-static-1.1.2.2 depends on shakespeare-css-1.0.3 which failed to install.</p>++<p><em>Any ideas?</em></p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://launchpad.net/~wincus">Juan Moyano</a>+</span>+++&mdash; <span class="date">Tue Mar 26 12:02:54 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-1cf81a381a3b69c1e0b371b38f562e1c">++++<div class="comment-subject">++<a href="/install/OSX.html#comment-1cf81a381a3b69c1e0b371b38f562e1c">Snow Leopard Issues</a>++</div>++<div class="inlinecontent">+<p>I was able to build snow leopard completely for the first time over last night (it took a very long time to build all the tools and dependancies).  Woohoo!</p>++<p>The way I was able to fully build on a 32-bit 10.6 machine was this</p>++<ol>+<li>Delete ~/.ghc and ~/.cabal.  They were full of random things and were causing problems.</li>+<li><code>brew uninstall ghc and haskell-platform</code></li>+<li><code>brew update</code></li>+<li><code>brew install git ossp-uuid md5sha1sum coreutils libgsasl gnutls libidn libgsasl pkg-config libxml2</code></li>+<li><code>brew upgrade git ossp-uuid md5sha1sum coreutils libgsasl gnutls libidn libgsasl pkg-config libxml2</code> (Some of these were already installed/up to date.</li>+<li><code>brew link libxml2</code></li>+<li><code>brew install haskell-platform</code>  (This takes a long, long time).</li>+<li><code>cabal update</code> (assuming you have added <code>~/.cabal/bin</code> to your path</li>+<li><code>cabal install cablal-install</code></li>+<li><code>cabal install c2hs</code></li>+<li><code>cabal install git-annex</code></li>+</ol>+++<p>It also appears to be running fairly smoothly than it had in the past on a 32-bit SL system.  Thats also neat.</p>++<p>The problem is that it seems to not really work as git annex though, probably due to the error relating you get when you start up the webapp:+Running+<code>git annex webapp</code>+The browser starts up, and I get 3 of these errors:+<code>Watcher crashed: Need at least OSX 10.7.0 for file-level FSEvents</code></p>++<p>Pairing with a local computer appears to work to systems running 10.7, but when you complete the process, they never show up in the repository list.</p>++<p>Also on a side note, when running <code>git annex webapp</code> it triggers the opening of an html file in whatever the default html file handler is.  I edit a lot of html, so for me that is usually a text editor.  I had to change the file handler to open html files with my web browser for the <code>git annex webapp</code> to actually work.  Is there a way to change that so that <code>git annex webapp</code> uses the default web browser for the system rather than the default html file handler?</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawkurjhi0CRJvgm7QNaZDWS9hitBtavqIpc">Bret</a>+</span>+++&mdash; <span class="date">Sun Apr 14 16:17:17 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-b45fd847f89e1ef6d0eefc86d0007f12">++++<div class="comment-subject">++<a href="/install/OSX.html#comment-b45fd847f89e1ef6d0eefc86d0007f12">comment 17</a>++</div>++<div class="inlinecontent">+<p>@Bret, the assistant relies on FSEvents pretty heavily. It seems to me your best bet is to upgrade OSX to a version that supports FSEvents.</p>++<p>You can certainly use the rest of git-annex on Snow Leopard without FSEvents.</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joey</a>+</span>+++&mdash; <span class="date">Tue Apr 16 16:31:10 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-c37647fa381af6c84ec64688533c242b">++++<div class="comment-subject">++<a href="/install/OSX.html#comment-c37647fa381af6c84ec64688533c242b">Can&#x27;t update</a>++</div>++<div class="inlinecontent">+The laptop is one of the first macbook pro's with a 32 bit chip, which apple dropped support for in 10.7, so the furthest it can update to is 10.6.x. :(++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawkurjhi0CRJvgm7QNaZDWS9hitBtavqIpc">Bret</a>+</span>+++&mdash; <span class="date">Wed Apr 17 20:58:19 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-d020a3312a07e4edee8b03081922a8b8">++++<div class="comment-subject">++<a href="/install/OSX.html#comment-d020a3312a07e4edee8b03081922a8b8">comment 19</a>++</div>++<div class="inlinecontent">+sounds like a prime candidate for a nice lightweight linux distro ;)++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://edheil.wordpress.com/">edheil [wordpress.com]</a>+</span>+++&mdash; <span class="date">Wed Apr 17 22:05:34 2013</span>+</div>++++<div style="clear: both"></div>+</div>+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="../install.html">install</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:45 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:45 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/install/OSX/old_comments.html view
@@ -0,0 +1,1148 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>old comments</title>++<link rel="stylesheet" href="../../style.css" type="text/css" />++<link rel="stylesheet" href="../../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../../index.html">git-annex</a>/ ++<a href="../../install.html">install</a>/ ++<a href="../OSX.html">OSX</a>/ ++</span>+<span class="title">+old comments++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../../install.html">install</a></li>+<li><a href="../../assistant.html">assistant</a></li>+<li><a href="../../walkthrough.html">walkthrough</a></li>+<li><a href="../../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../../comments.html">comments</a></li>+<li><a href="../../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>Moved a bunch of outdated comments here, AFAIK all these issues are fixed.</p>++</div>++++<div id="comments">+<div  class="feedlink">+++</div>+<div class="comment" id="comment-1f6680cb782b3f5d2fe8f577b54dc4b4">++++<div class="comment-subject">++<a href="/install/OSX/old_comments.html#comment-1f6680cb782b3f5d2fe8f577b54dc4b4">comment 1</a>++</div>++<div class="inlinecontent">+<p>You can also use Homebrew instead of MacPorts.  Homebrew's <code>haskell-platform</code> is up-to-date, too:</p>++<pre><code>brew install haskell-platform git ossp-uuid md5sha1sum coreutils pcre+ln -s /usr/local/include/pcre.h /usr/include/pcre.h+</code></pre>++<p>As of this writing, however, Homebrew's <code>md5sha1sum</code> has a broken mirror.  I wound up getting that from MacPorts anyway.</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://www.schleptet.net/~cfm/">cfm [schleptet.net]</a>+</span>+++&mdash; <span class="date">Tue Aug 30 10:31:36 2011</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-c84388ba7e59c4e6ec5d4601b2be9ae7">++++<div class="comment-subject">++<a href="/install/OSX/old_comments.html#comment-c84388ba7e59c4e6ec5d4601b2be9ae7">GHC 7</a>++</div>++<div class="inlinecontent">+<p>The Haskell Platform installer for OSX uses GHC 7.0.4, which doesn't seem able to support the current version of git-annex.</p>++<p>Cabal throws a very cryptic error about not being able to use the proper base package.</p>++<p>I was able to install it by</p>++<ol>+<li>cloning the repo</li>+<li>merging the ghc7.0 branch</li>+<li>resolving merge conflicts in git-annex.cabal</li>+<li>cabal install git-annex.cabal</li>+</ol>+++<p>(Note I also tried this with homebrew and had similar results)</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawkEUhIcw37X2Kh-dznSMIb9Vgcq0frfdWs">Ethan</a>+</span>+++&mdash; <span class="date">Wed Mar 28 15:06:51 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-c8af0dc4338c4bee0c42620e58ac90b8">++++<div class="comment-subject">++<a href="/install/OSX/old_comments.html#comment-c8af0dc4338c4bee0c42620e58ac90b8">ghc 7.0</a>++</div>++<div class="inlinecontent">+You did the right thing, although just checking out the ghc-7.0 branch will avoid merge conflicts. I am trying to keep it fairly close to up-to-date.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joey.kitenet.net/">joey</a>+</span>+++&mdash; <span class="date">Wed Mar 28 15:18:58 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-ff93b5cef76ce6fc206368942487f506">++++<div class="comment-subject">++<a href="/install/OSX/old_comments.html#comment-ff93b5cef76ce6fc206368942487f506">Problems with Base &#x26; Crypto</a>++</div>++<div class="inlinecontent">+<p>I got the following error message trying to install git-annex:</p>++<pre><code>cabal: cannot configure git-annex-3.20120418. It requires base &gt;=4.5 &amp;&amp; &lt;5+For the dependency on base &gt;=4.5 &amp;&amp; &lt;5 there are these packages: base-4.5.0.0.+However none of them are available.+base-4.5.0.0 was excluded because of the top level dependency base -any+</code></pre>++<p>These are the steps I performed to make it work</p>++<ol>+<li>Download <a href="http://www.haskell.org/ghc/download">Ghc 7.4</a>.</li>+<li>Run <code>sudo cabal install git-annex --bindir=$HOME/bin</code>.</li>+<li>Compilation of the Crypto-4.2.4 dependency failed since it's not updated to work with Ghc 7.4. You need to patch SHA2.hs (steps below).</li>+<li>Run <code>sudo cabal install git-annex --bindir=$HOME/bin</code> a second time.</li>+</ol>+++<p>The steps I did to patch the SHA2.hs file in Crypto-4.2.4:</p>++<ol>+<li><code>cabal unpack crypto-4.2.4</code></li>+<li><code>cd Crypto-4.2.4</code></li>+<li><code>patch -p1 &lt; crypto-4.2.4-ghc-7.4.patch</code></li>+<li><code>sudo cabal install</code>.</li>+</ol>+++<p>PS: I used <a href="http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/dev-haskell/crypto/files/crypto-4.2.4-ghc-7.4.patch?revision=1.1">this patchfile</a>.+Then I did the last step a third time.</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawkO9tsPZkAxEulq2pGCdwz4md-LqB0RcMw">Reimund</a>+</span>+++&mdash; <span class="date">Wed Apr 25 18:56:18 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-7ff5cf8df516ed45642396a234e6a9a4">++++<div class="comment-subject">++<a href="/install/OSX/old_comments.html#comment-7ff5cf8df516ed45642396a234e6a9a4">sha256</a>++</div>++<div class="inlinecontent">+<p>If you're missing the <code>sha256sum</code> command with Homebrew, it's provided by <code>coreutils</code>. You have to change your <code>$PATH</code> before running <code>cabal install git-annex.cabal</code>:</p>++<pre><code>PATH="$(brew --prefix coreutils)/libexec/gnubin:$PATH"+</code></pre>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawnHrjHxJAm39x8DR4bnbazQO6H0nMNuY9c">Damien</a>+</span>+++&mdash; <span class="date">Fri Jun  1 12:13:05 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-8446e371185ff711c05ef6047aec954b">++++<div class="comment-subject">++<a href="/install/OSX/old_comments.html#comment-8446e371185ff711c05ef6047aec954b">comment 6</a>++</div>++<div class="inlinecontent">+Last night I made it look in /opt/local/libexec/gnubin .. if there's another directory it could look in, let me know. I am reluctant to make it run the brew command directly.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Fri Jun  1 13:24:29 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-591772856abc1ca691095e3a7d6dfdcf">++++<div class="comment-subject">++<a href="/install/OSX/old_comments.html#comment-591772856abc1ca691095e3a7d6dfdcf">comment 7</a>++</div>++<div class="inlinecontent">+<p>$(brew --prefix) should, in most cases, be /usr/local.  That's the recommended install location for homebrew.</p>++<p>I already had git installed and homebrew as my package manager - my install steps were as follows:</p>++<ol>+<li>brew install haskell-platform ossp-uuid md5sha1sum coreutils pcre</li>+<li>PATH="$(brew --prefix coreutils)/libexec/gnubin:$PATH" cabal install git-annex</li>+</ol>++++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://www.davidhaslem.com/">David</a>+</span>+++&mdash; <span class="date">Tue Jun 19 00:41:27 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-0df38bf685f581faa89d53db56b7c822">++++<div class="comment-subject">++<a href="/install/OSX/old_comments.html#comment-0df38bf685f581faa89d53db56b7c822">Installation not working on OS X 10.6.8</a>++</div>++<div class="inlinecontent">+<p>I try installing with brew because I already had brew setup in my machine, but all run ok but when I try to run cabal install git-annex I got an error with the hinotify-0.3.2 library complaining about a header file.</p>++<p>Full trace:</p>++<pre><code>sudo cabal install git-annex+Resolving dependencies...+Configuring hinotify-0.3.2...+Building hinotify-0.3.2...+Preprocessing library hinotify-0.3.2...+INotify.hsc:35:25: error: sys/inotify.h: No such file or directory+INotify.hsc: In function ‘main’:+INotify.hsc:259: error: invalid use of undefined type ‘struct inotify_event’+INotify.hsc:260: error: invalid use of undefined type ‘struct inotify_event’+INotify.hsc:261: error: invalid use of undefined type ‘struct inotify_event’+INotify.hsc:262: error: invalid use of undefined type ‘struct inotify_event’+INotify.hsc:265: error: invalid use of undefined type ‘struct inotify_event’+INotify.hsc:266: error: invalid application of ‘sizeof’ to incomplete type ‘struct inotify_event’ +compiling dist/build/System/INotify_hsc_make.c failed (exit code 1)+command was: /usr/bin/gcc -c dist/build/System/INotify_hsc_make.c -o dist/build/System/INotify_hsc_make.o -m64 -fno-stack-protector -m64 -D__GLASGOW_HASKELL__=704 -Ddarwin_BUILD_OS -Ddarwin_HOST_OS -Dx86_64_BUILD_ARCH -Dx86_64_HOST_ARCH -I/usr/local/Cellar/ghc/7.4.1/lib/ghc-7.4.1/directory-1.1.0.2/include -Idist/build/autogen -include dist/build/autogen/cabal_macros.h -I/usr/local/Cellar/ghc/7.4.1/lib/ghc-7.4.1/unix-2.5.1.0/include -Idist/build/autogen -include dist/build/autogen/cabal_macros.h -I/usr/local/Cellar/ghc/7.4.1/lib/ghc-7.4.1/old-time-1.1.0.0/include -Idist/build/autogen -include dist/build/autogen/cabal_macros.h -Idist/build/autogen -include dist/build/autogen/cabal_macros.h -Idist/build/autogen -include dist/build/autogen/cabal_macros.h -Idist/build/autogen -include dist/build/autogen/cabal_macros.h -Idist/build/autogen -include dist/build/autogen/cabal_macros.h -I/usr/local/Cellar/ghc/7.4.1/lib/ghc-7.4.1/bytestring-0.9.2.1/include -Idist/build/autogen -include dist/build/autogen/cabal_macros.h -Idist/build/autogen -include dist/build/autogen/cabal_macros.h -I/usr/local/Cellar/ghc/7.4.1/lib/ghc-7.4.1/base-4.5.0.0/include -Idist/build/autogen -include dist/build/autogen/cabal_macros.h -Idist/build/autogen -include dist/build/autogen/cabal_macros.h -Idist/build/autogen -include dist/build/autogen/cabal_macros.h -I/usr/local/Cellar/ghc/7.4.1/lib/ghc-7.4.1/include -Idist/build/autogen -include dist/build/autogen/cabal_macros.h -I/usr/local/Cellar/ghc/7.4.1/lib/ghc-7.4.1/include/+cabal: Error: some packages failed to install:+git-annex-3.20120624 depends on hinotify-0.3.2 which failed to install.+hinotify-0.3.2 failed during the building phase. The exception was:+ExitFailure 1+</code></pre>++<p>Anyone has an idea how can I solve this.</p>++<p>Thanks for the time!</p>++<p>Agustin</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawkwR9uOA38yi5kEUvcEWNtRiZwpxXskayE">Agustin</a>+</span>+++&mdash; <span class="date">Sun Jun 24 22:21:40 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-b0bf9f1a297825c604e834089163914f">++++<div class="comment-subject">++<a href="/install/OSX/old_comments.html#comment-b0bf9f1a297825c604e834089163914f">For the moment</a>++</div>++<div class="inlinecontent">+<p>Hi Joey! I just comment that I could not install it but the issue is with the last version (the one you just release today, so no problem!! man on sunday??  you're awesome!!!) so I installed the previous one and no problem at all</p>++<p>Thanks for all the efford and if you need me to try os whatever, feel free to ask!</p>++<p>Thanks again</p>++<p>Agustin</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawkwR9uOA38yi5kEUvcEWNtRiZwpxXskayE">Agustin</a>+</span>+++&mdash; <span class="date">Sun Jun 24 22:51:10 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-0b52e9f25b4ca44a866811ab34a04f4f">++++<div class="comment-subject">++<a href="/install/OSX/old_comments.html#comment-0b52e9f25b4ca44a866811ab34a04f4f">comment 10</a>++</div>++<div class="inlinecontent">+<p>@Agustin you should be able to work around that with: cabal install git-annex --flags=-Inotify</p>++<p>I've fixed it properly for the next release, it should only be using that library on Linux.</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Mon Jun 25 11:38:44 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-c2bce799be5d46f0c8d11d29bb0701bb">++++<div class="comment-subject">++<a href="/install/OSX/old_comments.html#comment-c2bce799be5d46f0c8d11d29bb0701bb">comment 11</a>++</div>++<div class="inlinecontent">+<p>Hi @joey! Perfect!... I'll do that then!</p>++<p>Thanks for your time man!</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawkwR9uOA38yi5kEUvcEWNtRiZwpxXskayE">Agustin</a>+</span>+++&mdash; <span class="date">Wed Jun 27 04:54:52 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-a55d19fc545fb19ed20d50356f6408be">++++<div class="comment-subject">++<a href="/install/OSX/old_comments.html#comment-a55d19fc545fb19ed20d50356f6408be">sha256 alternative</a>++</div>++<div class="inlinecontent">+in reply to comment 6: On my Mac (10.7.4) there's <code>/usr/bin/shasum -a 256 &lt;file&gt;</code> command that will produce the same output as <code>sha256sum &lt;file&gt;</code>.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawnHrjHxJAm39x8DR4bnbazQO6H0nMNuY9c">Damien</a>+</span>+++&mdash; <span class="date">Sat Jun 30 10:34:11 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-b6b3ce0c754e8804580de797f701b790">++++<div class="comment-subject">++<a href="/install/OSX/old_comments.html#comment-b6b3ce0c754e8804580de797f701b790">gnu commands</a>++</div>++<div class="inlinecontent">+…and another approach to the same problem: apparently git-annex also relies on the GNU coreutils (for instance, when doing <code>git annex get .</code>, <code>cp</code> complains about <code>illegal option -- -</code>). I do have the GNU coreutils installed with Homebrew, but they are all prefixed with <code>g</code>. So maybe you should try <code>gsha256sum</code> and <code>gcp</code> before <code>sha256sum</code> and <code>cp</code>, that seems like a more general solution.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawnHrjHxJAm39x8DR4bnbazQO6H0nMNuY9c">Damien</a>+</span>+++&mdash; <span class="date">Sun Jul  1 13:03:57 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-26c49c4895b59009a9268394f693c547">++++<div class="comment-subject">++<a href="/install/OSX/old_comments.html#comment-26c49c4895b59009a9268394f693c547">comment 14</a>++</div>++<div class="inlinecontent">+@Damien, hmm, it should not be using any cp options, unless when it was built there was a cp in the path that supported some option like -p. Can you check with --debug what cp parameters it's trying to use?++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Wed Jul  4 08:43:54 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-94b0f0ba446ca2f1ebd6af44c7afd3be">++++<div class="comment-subject">++<a href="/install/OSX/old_comments.html#comment-94b0f0ba446ca2f1ebd6af44c7afd3be">comment 15</a>++</div>++<div class="inlinecontent">+<p>git-annex will now fall back to slower pure Haskell hashing code if <code>sha256sum</code>, etc programs are not in PATH. I'd still recommend installing the coreutils, as they're probably faster.</p>++<p>(The <code>shasum</code> command seems to come from a perl library, so I have not tried to make git-annex use that one.)</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Wed Jul  4 09:14:00 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-0c3f7ab2e57d317f5978c7d11e4ed5db">++++<div class="comment-subject">++<a href="/install/OSX/old_comments.html#comment-0c3f7ab2e57d317f5978c7d11e4ed5db">Compiling git-annex on OSX (with 32 bit Haskell)</a>++</div>++<div class="inlinecontent">+<p>I came across an issue when following the instructions here:+     <a href="http://git-annex.branchable.com/install/OSX/">http://git-annex.branchable.com/install/OSX/</a></p>++<p>I'm compiling the 'assistant' branch (522f568450a005ae81b24f63bb37e75320b51219).</p>++<p>The pre-compiled version of Haskell for OSX recommends the 32 bit installer, however git-annex compiles</p>++<blockquote><p> Utility/libdiskfree.o Utility/libkqueue.o Utility/libmounts.o</p></blockquote>++<p>as 64 bit. The 'make' command fails on linking 32- and 64-bit code.</p>++<p>So... I made a small change to the Makefile</p>++<blockquote><p> CFLAGS=-Wall</p></blockquote>++<p>becomes</p>++<blockquote><p> CFLAGS=-Wall -m32</p></blockquote>++<p>I don't know if there is an easy way to programmatically check for this, or even if you'd want to spend time doing it, but it might help someone else out.</p>++<p><a href="https://gist.github.com/3167798">https://gist.github.com/3167798</a></p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://a-or-b.myopenid.com/">a-or-b [myopenid.com]</a>+</span>+++&mdash; <span class="date">Mon Jul 23 23:26:45 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-c78ed188b791f816f43d99c31a9f732a">++++<div class="comment-subject">++<a href="/install/OSX/old_comments.html#comment-c78ed188b791f816f43d99c31a9f732a">comment 17</a>++</div>++<div class="inlinecontent">+@a-or-b that issue is logged here <span class="createlink">subtle build issue on OSX 10.7 and Haskell Platform &#40;if you have the 32bit version installed&#41;</span>, you can use cabal to build and install git-annex and it will detect if its 32 or 64bit automatically.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus">Jimmy</a>+</span>+++&mdash; <span class="date">Tue Jul 24 02:33:13 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-b5d0bb56471bdbc4fa0198cf0ade7a6e">++++<div class="comment-subject">++<a href="/install/OSX/old_comments.html#comment-b5d0bb56471bdbc4fa0198cf0ade7a6e">comment 17</a>++</div>++<div class="inlinecontent">+The instructions say to use cabal for a reason -- it's more likely to work. But I have made the Makefile detect the mismatched GHC and C compiler and force the C compiler to 32 bit.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Tue Jul 24 11:03:49 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-525d8f096d28c4319a574f67429fbb83">++++<div class="comment-subject">++<a href="/install/OSX/old_comments.html#comment-525d8f096d28c4319a574f67429fbb83">Updated install instructions with homebrew</a>++</div>++<div class="inlinecontent">+<p>To install git annex with homebrew simply do:</p>++<pre><code>brew update+brew install haskell-platform git ossp-uuid md5sha1sum coreutils pcre+cabal install git-annex+</code></pre>++<p>Then link the binary to your <code>PATH</code> e.g. with</p>++<pre><code>ln -s ~/.cabal/bin/git-annex* /usr/local/bin/+</code></pre>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawnnIQkoUQo4RYzjUNyiB3v6yJ5aR41WG8k">Markus</a>+</span>+++&mdash; <span class="date">Tue Aug  7 02:46:47 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-9d50985b2f44a90a8a908e941cd158e3">++++<div class="comment-subject">++<a href="/install/OSX/old_comments.html#comment-9d50985b2f44a90a8a908e941cd158e3">installing via homebrew</a>++</div>++<div class="inlinecontent">+<p>I had to:</p>++<pre><code>cabal update+</code></pre>++<p>before:</p>++<pre><code>cabal install git-annex+</code></pre>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawm_-2XlXNyd6cCLI4n_jaBNqVUOWwJquko">David</a>+</span>+++&mdash; <span class="date">Wed Sep  5 07:11:55 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-b503b0ed9bd233d1345619157e8a8044">++++<div class="comment-subject">++<a href="/install/OSX/old_comments.html#comment-b503b0ed9bd233d1345619157e8a8044">setup: standalone/macos/git-annex.app/Contents/Info.plist: does not exist</a>++</div>++<div class="inlinecontent">+<p>I tried installing with cabal and homebrew on Mountain Lion. After cabal install git-annex I get:</p>++<pre><code>Linking dist/build/git-annex/git-annex ...+Installing executable(s) in /Users/dfc/.cabal/bin+setup: standalone/macos/git-annex.app/Contents/Info.plist: does not exist+cabal: Error: some packages failed to install:+git-annex-3.20121001 failed during the final install step. The exception was:+ExitFailure 1+</code></pre>++<p>There is no directory named macos inside of standalone:</p>++<pre><code>jumbo:git-annex-3.20121001 dfc$ ls -l standalone/+total 112+-rw-r--r--+ 1 dfc  staff  55614 Oct  6 10:40 licences.gz+drwxr-xr-x+ 6 dfc  staff    204 Oct  6 10:40 linux+drwxr-xr-x+ 3 dfc  staff    102 Oct  6 10:40 osx+</code></pre>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawmYiJgOvC4IDYkr2KIjMlfVD9r_1Sij_jY">Douglas</a>+</span>+++&mdash; <span class="date">Sat Oct  6 10:46:55 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-c55fdde601948626c4e865ff8904ee91">++++<div class="comment-subject">++<a href="/install/OSX/old_comments.html#comment-c55fdde601948626c4e865ff8904ee91">comment 3</a>++</div>++<div class="inlinecontent">+@Douglas, I've fixed that in git. FWIW, the program is installed before that point. Actually, I am leaning toward not having cabal install that plist file at all.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Sat Oct  6 17:05:45 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-06067182f20c86b8047abe61e04427de">++++<div class="comment-subject">++<a href="/install/OSX/old_comments.html#comment-06067182f20c86b8047abe61e04427de">Have error</a>++</div>++<div class="inlinecontent">+<p>[ 98 of 248] Compiling Utility.DiskFree ( Utility/DiskFree.hs, dist/build/git-annex/git-annex-tmp/Utility/DiskFree.o )+[ 99 of 248] Compiling Utility.Url      ( Utility/Url.hs, dist/build/git-annex/git-annex-tmp/Utility/Url.o )</p>++<p>Utility/Url.hs:111:88:+    Couldn't match expected type <code>Maybe URI' with actual type</code>URI'+    In the second argument of <code>fromMaybe', namely+     </code>(newURI <code>relativeTo</code> u)'+    In the expression: fromMaybe newURI (newURI <code>relativeTo</code> u)+    In an equation for <code>newURI_abs':+        newURI_abs = fromMaybe newURI (newURI</code>relativeTo` u)+cabal: Error: some packages failed to install:+git-annex-3.20121009 failed during the building phase. The exception was:+ExitFailure 1</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawmY_4MvT5yEeztrS7UIJseStUe4mtgp6YE">Сергей</a>+</span>+++&mdash; <span class="date">Wed Oct 10 07:47:09 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-9d6f429133a48216d6221a142be6ac00">++++<div class="comment-subject">++<a href="/install/OSX/old_comments.html#comment-9d6f429133a48216d6221a142be6ac00">comment 5</a>++</div>++<div class="inlinecontent">+@Сергей, I've fixeed that in git.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Wed Oct 10 11:34:23 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-16d90d6909cb4c68581d22e1c3eb06e2">++++<div class="comment-subject">++<a href="/install/OSX/old_comments.html#comment-16d90d6909cb4c68581d22e1c3eb06e2">Recent install for OS X</a>++</div>++<div class="inlinecontent">+<p>if you are having trouble installing with <code>cabal install git-annex</code> at the moment, trouble of the XML kind, you'll need to do a couple things:</p>++<p><code>brew update</code>+<code>brew install libxml2</code>+<code>cabal update</code>+<code>cabal install libxml --extra-include-dirs=/usr/local/Cellar/libxml2/2.8.0/include/libxml2 --extra-lib-dirs=/usr/local/Cellar/libxml2/2.8.0/lib</code></p>++<p>well, then i hit a brick wall.</p>++<p>well.</p>++<p>I got it to work by manually symlinking from <code>../Cellar/libxml2/2.8.0/lib/</code>* into <code>/usr/local</code> and from <code>../../Cellar/libxml2/2.8.0/lib/</code> to <code>/usr/local/pkgconfig</code>, but i can't recommend it or claim to be too proud about it all.</p>++<p>OS X already has an old libxml knocking around so this might ruin everything for me.</p>++<p>let's find out !</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawnBEsNDl_6O4rHb2en3I0-fg-6fUxglaRQ">chee</a>+</span>+++&mdash; <span class="date">Tue Nov 13 00:40:05 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-b7ce66fb2716c8b5b210137372be2857">++++<div class="comment-subject">++<a href="/install/OSX/old_comments.html#comment-b7ce66fb2716c8b5b210137372be2857">comment 10</a>++</div>++<div class="inlinecontent">+<p>Installing it with brew, I had to do the following steps before the final <code>cabal</code> command:</p>++<ul>+<li><code>cabal install c2hs</code></li>+<li>add <code>$HOME/.cabal/bin</code> to my <code>$PATH</code> (so that c2hs program can be found)</li>+</ul>++++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawkp-1EQboBDqZ05MxOHNkwNQDM4luWYioA">Charles</a>+</span>+++&mdash; <span class="date">Thu Nov 15 09:26:57 2012</span>+</div>++++<div style="clear: both"></div>+</div>+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./comment_2_25552ff2942048fafe97d653757f1ad6.html">comment 2 25552ff2942048fafe97d653757f1ad6</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:45 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:45 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/install/ScientificLinux5.html view
@@ -0,0 +1,195 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>ScientificLinux5</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../install.html">install</a>/ ++</span>+<span class="title">+ScientificLinux5++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>I was waiting for my backups to be done hence this article, as I was using+<em>git-annex</em> to manage my files and I decided I needed to have+git-annex on a SL5 based machine. SL5 is just an opensource+clone/recompile of RHEL5.</p>++<p>I haven't tried to install the newer versions of Haskell Platform and+GHC in a while on SL5 to install git-annex. But the last time I checked+when GHC7 was out, it was a pain to install GHC on SL5.</p>++<p>However I have discovered that someone has gone through the trouble of+packaging up GHC and Haskell Platform for RHEL based distros.</p>++<ul>+<li><a href="http://justhub.org/download">http://justhub.org/download</a> - Packaged GHC and Haskell Platform+RPM's for RHEL based systems.</li>+</ul>+++<p>I'm primarily interested in installing <em>git-annex</em> on SL5 based+systems. The installation process goes as such...</p>++<p>First install GHC and Haskell Platform (you need root for these+following steps)</p>++<pre><code>$ wget http://sherkin.justhub.org/el5/RPMS/x86_64/justhub-release-2.0-4.0.el5.x86_64.rpm+$ rpm -ivh justhub-release-2.0-4.0.el5.x86_64.rpm+$ yum install haskell+</code></pre>++<p>The RPM's don't place the files in /usr/bin, so you must add the+following to your .bashrc (from here on you don't need root if you+don't want things to be system wide)</p>++<pre><code>$ export PATH=/usr/hs/bin:$PATH+</code></pre>++<p>Once the packages are installed and are in your execution path, using+cabal to configure and build git-annex just makes life easier, it+should install all the needed dependancies.</p>++<pre><code>$ cabal update+$ git clone git://git.kitenet.net/git-annex+$ cd git-annex+$ make git-annex.1+$ cabal configure+$ cabal build+$ cabal install+</code></pre>++<p>Or if you want to install it globallly for everyone (otherwise it will+get installed into $HOME/.cabal/bin)</p>++<pre><code>$ cabal install --global+</code></pre>++<p>The above will take a while to compile and install the needed+dependancies. I would suggest any user who does should run the tests+that comes with git-annex to make sure everything is functioning as+expected.</p>++<p>I haven't had a chance or need to install git-annex on a SL6 based+system yet, but I would assume something similar to the above steps+would be required to do so.</p>++<p>The above is almost a cut and paste of <a href="http://jcftang.github.com/2012/06/15/installing-git-annex-on-sl5/">http://jcftang.github.com/2012/06/15/installing-git-annex-on-sl5/</a>, the above could probably be refined, it was what worked for me on SL5. Please feel free to re-edit and chop out or add useless bits of text in the above!</p>++<p>Note: from the minor testing, it appears the compiled binaries from SL5 will work on SL6.</p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="../install.html">install</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:45 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:45 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/install/Ubuntu.html view
@@ -0,0 +1,161 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>Ubuntu</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../install.html">install</a>/ ++</span>+<span class="title">+Ubuntu++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<h2>Raring</h2>++<pre><code>sudo apt-get install git-annex+</code></pre>++<h2>Precise</h2>++<pre><code>sudo apt-get install git-annex+</code></pre>++<p>Note: This version is too old to include the <a href="../assistant.html">assistant</a>, but is otherwise+usable.</p>++<h2>Precise PPA</h2>++<p><a href="https://launchpad.net/~fmarier/+archive/ppa">https://launchpad.net/~fmarier/+archive/ppa</a></p>++<p>A newer version of git-annex, including the <a href="../assistant.html">assistant</a>.+(Maintained by François Marier)</p>++<pre><code>sudo add-apt-repository ppa:fmarier/ppa+sudo apt-get update+sudo apt-get install git-annex+</code></pre>++<h2>Oneiric</h2>++<pre><code>sudo apt-get install git-annex+</code></pre>++<p>Warning: The version of git-annex shipped in Ubuntu Oneiric+had <a href="https://bugs.launchpad.net/ubuntu/+source/git-annex/+bug/875958">a bug that prevents upgrades from v1 git-annex repositories</a>.+If you need to upgrade such a repository, get a newer version of git-annex.</p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="../install.html">install</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:45 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:45 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/install/cabal.html view
@@ -0,0 +1,149 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>cabal</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../install.html">install</a>/ ++</span>+<span class="title">+cabal++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>As a haskell package, git-annex can be installed using cabal. For example:</p>++<pre><code>cabal update+PATH=$HOME/bin:$PATH+cabal install c2hs git-annex --bindir=$HOME/bin+</code></pre>++<p>The above downloads the latest release and installs it into a ~/bin/+directory, which you can put in your PATH.</p>++<p>But maybe you want something newer (or older). Then <a href="../download.html">download</a> the version+you want, and use cabal as follows inside its source tree:</p>++<pre><code>cabal update+PATH=$HOME/bin:$PATH+cabal install c2hs --bindir=$HOME/bin+cabal install --only-dependencies+cabal configure+cabal build+cabal install --bindir=$HOME/bin+</code></pre>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="../install.html">install</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:45 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:45 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/install/fromscratch.html view
@@ -0,0 +1,213 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>fromscratch</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../install.html">install</a>/ ++</span>+<span class="title">+fromscratch++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>To install git-annex from scratch, you need a lot of stuff. Really+quite a lot.</p>++<ul>+<li>Haskell stuff++<ul>+<li><a href="http://haskell.org/platform/">The Haskell Platform</a> (GHC 7.4 or newer)</li>+<li><a href="http://hackage.haskell.org.package/mtl">mtl</a> (2.1.1 or newer)</li>+<li><a href="http://github.com/jgoerzen/missingh/wiki">MissingH</a></li>+<li><a href="http://hackage.haskell.org/package/utf8-string">utf8-string</a></li>+<li><a href="http://hackage.haskell.org/package/SHA">SHA</a></li>+<li><a href="http://hackage.haskell.org/package/dataenc">dataenc</a></li>+<li><a href="http://hackage.haskell.org/package/monad-control">monad-control</a></li>+<li><a href="http://hackage.haskell.org/package/lifted-base">lifted-base</a></li>+<li><a href="http://hackage.haskell.org/package/QuickCheck">QuickCheck 2</a></li>+<li><a href="http://hackage.haskell.org/package/json">json</a></li>+<li><a href="http://hackage.haskell.org/package/IfElse">IfElse</a></li>+<li><a href="http://hackage.haskell.org/package/dlist">dlist</a></li>+<li><a href="http://hackage.haskell.org/package/bloomfilter">bloomfilter</a></li>+<li><a href="http://hackage.haskell.org/package/edit-distance">edit-distance</a></li>+<li><a href="http://hackage.haskell.org/package/hS3">hS3</a> (optional)</li>+<li><a href="http://hackage.haskell.org/package/DAV">DAV</a> (optional)</li>+<li><a href="http://hackage.haskell.org/package/SafeSemaphore">SafeSemaphore</a></li>+<li><a href="http://hackage.haskell.org/package/uuid">UUID</a></li>+<li><a href="http://hackage.haskell.org/package/regex-tdfa">regex-tdfa</a></li>+</ul>+</li>+<li>Optional haskell stuff, used by the <a href="../assistant.html">assistant</a> and its webapp (edit Makefile to disable)++<ul>+<li><a href="http://hackage.haskell.org/package/stm">stm</a>+(version 2.3 or newer)</li>+<li><a href="http://hackage.haskell.org/package/hinotify">hinotify</a>+(Linux only)</li>+<li><a href="http://hackage.haskell.org/package/dbus">dbus</a></li>+<li><a href="http://hackage.haskell.org/package/yesod">yesod</a></li>+<li><a href="http://hackage.haskell.org/package/yesod-static">yesod-static</a></li>+<li><a href="http://hackage.haskell.org/package/yesod-default">yesod-default</a></li>+<li><a href="http://hackage.haskell.org/package/data-default">data-default</a></li>+<li><a href="http://hackage.haskell.org/package/case-insensitive">case-insensitive</a></li>+<li><a href="http://hackage.haskell.org/package/http-types">http-types</a></li>+<li><a href="http://hackage.haskell.org/package/transformers">transformers</a></li>+<li><a href="http://hackage.haskell.org/package/wai">wai</a></li>+<li><a href="http://hackage.haskell.org/package/wai-logger">wai-logger</a></li>+<li><a href="http://hackage.haskell.org/package/warp">warp</a></li>+<li><a href="http://hackage.haskell.org/package/blaze-builder">blaze-builder</a></li>+<li><a href="http://hackage.haskell.org/package/crypto-api">crypto-api</a></li>+<li><a href="http://hackage.haskell.org/package/hamlet">hamlet</a></li>+<li><a href="http://hackage.haskell.org/package/clientsession">clientsession</a></li>+<li><a href="http://hackage.haskell.org/package/network-multicast">network-multicast</a></li>+<li><a href="http://hackage.haskell.org/package/network-info">network-info</a></li>+<li><a href="http://hackage.haskell.org/package/network-protocol-xmpp">network-protocol-xmpp</a></li>+<li><a href="http://hackage.haskell.org/package/dns">dns</a></li>+<li><a href="http://hackage.haskell.org/package/xml-types">xml-types</a></li>+<li><a href="http://hackage.haskell.org/package/async">async</a></li>+<li><a href="http://hackage.haskell.org/package/HTTP">HTTP</a></li>+</ul>+</li>+<li>Shell commands++<ul>+<li><a href="http://git-scm.com/">git</a></li>+<li><a href="http://savannah.gnu.org/projects/findutils/">xargs</a></li>+<li><a href="http://rsync.samba.org/">rsync</a></li>+<li><a href="http://http://curl.haxx.se/">curl</a> (optional, but recommended)</li>+<li><a href="http://www.gnu.org/software/wget/">wget</a> (optional)</li>+<li><a href="ftp://ftp.gnu.org/gnu/coreutils/">sha1sum</a> (optional, but recommended;+a sha1 command will also do)</li>+<li><a href="http://gnupg.org/">gpg</a> (optional; needed for encryption)</li>+<li><a href="ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/">lsof</a>+(optional; recommended for watch mode)</li>+<li>multicast DNS support, provided on linux by <a href="http://www.0pointer.de/lennart/projects/nss-mdns/">nss-mdns</a>+(optional; recommended for the assistant to support pairing well)</li>+<li><a href="http://ikiwiki.info">ikiwiki</a> (optional; used to build the docs)</li>+</ul>+</li>+</ul>+++<p>Then just <a href="../download.html">download</a> git-annex and run: <code>make; make install</code></p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./Android.html">Android</a>++<a href="./Linux_standalone.html">Linux standalone</a>++<a href="../install.html">install</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:45 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:45 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/install/openSUSE.html view
@@ -0,0 +1,131 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>openSUSE</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../install.html">install</a>/ ++</span>+<span class="title">+openSUSE++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>Haskell Platform 2012.4 is now <a href="http://software.opensuse.org/package/haskell-platform">officially available for openSUSE</a> via 1-Click Install.</p>++<p>At the time of writing, there are <a href="http://software.opensuse.org/package/git-annex">unofficial packages of git-annex</a> available for openSUSE 12.2.  It should also be possible to build it via cabal or from source as described on the <a href="../install.html">install</a> page.</p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="../install.html">install</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:45 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:45 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/internals.html view
@@ -0,0 +1,264 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>internals</title>++<link rel="stylesheet" href="style.css" type="text/css" />++<link rel="stylesheet" href="local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="./index.html">git-annex</a>/ ++</span>+<span class="title">+internals++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="./install.html">install</a></li>+<li><a href="./assistant.html">assistant</a></li>+<li><a href="./walkthrough.html">walkthrough</a></li>+<li><a href="./tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="./comments.html">comments</a></li>+<li><a href="./contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>In the world of git, we're not scared about internal implementation+details, and sometimes we like to dive in and tweak things by hand. Here's+some documentation to that end.</p>++<h2><code>.git/annex/objects/aa/bb/*/*</code></h2>++<p>This is where locally available file contents are actually stored.+Files added to the annex get a symlink checked into git that points+to the file content.</p>++<p>First there are two levels of directories used for hashing, to prevent+too many things ending up in any one directory.+See <a href="./internals/hashing.html">hashing</a> for details.</p>++<p>Each subdirectory has the <a href="./internals/key_format.html">name of a key</a> in one of the+<a href="./backends.html">key-value backends</a>. The file inside also has the name of the key.+This two-level structure is used because it allows the write bit to be removed+from the subdirectories as well as from the files. That prevents accidentially+deleting or changing the file contents.</p>++<p>In <a href="./direct_mode.html">direct mode</a>, file contents are not stored in here, and instead+are stored directly in the file. However, the same symlinks are still+committed to git, internally.</p>++<p>Also in <a href="./direct_mode.html">direct mode</a>, some additional data is stored in these directories.+<code>.cache</code> files contain cached file stats used in detecting when a file has+changed, and <code>.map</code> files contain a list of file(s) in the work directory+that contain the key.</p>++<h2>The git-annex branch</h2>++<p>This branch is managed by git-annex, with the contents listed below.</p>++<p>The file <code>.git/annex/index</code> is a separate git index file it uses+to accumulate changes for the git-annex branch.+Also, <code>.git/annex/journal/</code> is used to record changes before they+are added to git.</p>++<h3><code>uuid.log</code></h3>++<p>Records the UUIDs of known repositories, and associates them with a+description of the repository. This allows git-annex to display something+more useful than a UUID when it refers to a repository that does not have+a configured git remote pointing at it.</p>++<p>The file format is simply one line per repository, with the uuid followed by a+space and then the description, followed by a timestamp. Example:</p>++<pre><code>e605dca6-446a-11e0-8b2a-002170d25c55 laptop timestamp=1317929189.157237s+26339d22-446b-11e0-9101-002170d25c55 usb disk timestamp=1317929330.769997s+</code></pre>++<p>If there are multiple lines for the same uuid, the one with the most recent+timestamp wins. git-annex union merges this and other files.</p>++<h2><code>remote.log</code></h2>++<p>Holds persistent configuration settings for <a href="./special_remotes.html">special remotes</a> such as+Amazon S3.</p>++<p>The file format is one line per remote, starting with the uuid of the+remote, followed by a space, and then a series of var=value pairs,+each separated by whitespace, and finally a timestamp.</p>++<p>Encrypted special remotes store their encryption key here,+in the "cipher" value. It is base64 encoded, and unless shared <a href="./encryption.html">encryption</a>+is used, is encrypted to one or more gpg keys. The first 256 bytes of+the cipher is used as the HMAC SHA1 encryption key, to encrypt filenames+stored on the special remote. The remainder of the cipher is used as a gpg+symmetric encryption key, to encrypt the content of files stored on the special+remote.</p>++<h2><code>trust.log</code></h2>++<p>Records the <a href="./trust.html">trust</a> information for repositories. Does not exist unless+<a href="./trust.html">trust</a> values are configured.</p>++<p>The file format is one line per repository, with the uuid followed by a+space, and then either <code>1</code> (trusted), <code>0</code> (untrusted), <code>?</code> (semi-trusted),+<code>X</code> (dead) and finally a timestamp.</p>++<p>Example:</p>++<pre><code>e605dca6-446a-11e0-8b2a-002170d25c55 1 timestamp=1317929189.157237s+26339d22-446b-11e0-9101-002170d25c55 ? timestamp=1317929330.769997s+</code></pre>++<p>Repositories not listed are semi-trusted.</p>++<h2><code>group.log</code></h2>++<p>Used to group repositories together.</p>++<p>The file format is one line per repository, with the uuid followed by a space,+and then a space-separated list of groups this repository is part of,+and finally a timestamp.</p>++<h2><code>preferred-content.log</code></h2>++<p>Used to indicate which repositories prefer to contain which file contents.</p>++<p>The file format is one line per repository, with the uuid followed by a space,+then a boolean expression, and finally a timestamp.</p>++<p>Files matching the expression are preferred to be retained in the+repository, while files not matching it are preferred to be stored+somewhere else.</p>++<h2><code>aaa/bbb/*.log</code></h2>++<p>These log files record <a href="./location_tracking.html">location tracking</a> information+for file contents. Again these are placed in two levels of subdirectories+for hashing. See <a href="./internals/hashing.html">hashing</a> for details.</p>++<p>The name of the key is the filename, and the content+consists of a timestamp, either 1 (present) or 0 (not present), and+the UUID of the repository that has or lacks the file content.</p>++<p>Example:</p>++<pre><code>1287290776.765152s 1 e605dca6-446a-11e0-8b2a-002170d25c55+1287290767.478634s 0 26339d22-446b-11e0-9101-002170d25c55+</code></pre>++<p>These files are designed to be auto-merged using git's <a href="./git-union-merge.html">union merge driver</a>.+The timestamps allow the most recent information to be identified.</p>++<h2><code>aaa/bbb/*.log.web</code></h2>++<p>These log files record urls used by the+<a href="./special_remotes/web.html">web special remote</a>. Their format is similar+to the location tracking files, but with urls rather than UUIDs.</p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./design.html">design</a>++<a href="./design/encryption.html">design/encryption</a>++<a href="./how_it_works.html">how it works</a>++<a href="./links/the_details.html">links/the details</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:45 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:45 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/internals/hashing.html view
@@ -0,0 +1,159 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>hashing</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../internals.html">internals</a>/ ++</span>+<span class="title">+hashing++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>In both the .git/annex directory and the git-annex branch, two levels of+hash directories are used, to avoid issues with too many files in one+directory.</p>++<p>Two separate hash methods are used. One, the old hash format, is only used+for non-bare git repositories. The other, the new hash format, is used for+bare git repositories, the git-annex branch, and on special remotes as+well.</p>++<h2>new hash format</h2>++<p>This uses two directories, each with a three-letter name, such as "f87/4d5"</p>++<p>The directory names come from the md5sum of the <a href="./key_format.html">key</a>.</p>++<p>For example:</p>++<pre><code>echo -n "SHA256E-s0--e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" | md5sum+</code></pre>++<h2>old hash format</h2>++<p>This uses two directories, each with a two-letter name, such as "pX/1J"</p>++<p>It takes the md5sum of the key, but rather than a string, represents it as 4+32bit words. Only the first word is used. It is converted into a string by the+same mechanism that would be used to encode a normal md5sum value into a+string, but where that would normally encode the bits using the 16 characters+0-9a-f, this instead uses the 32 characters "0123456789zqjxkmvwgpfZQJXKMVWGPF".+The first 2 letters of the resulting string are the first directory, and the+second 2 are the second directory.</p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="../internals.html">internals</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:45 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:45 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/internals/key_format.html view
@@ -0,0 +1,155 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>key format</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../internals.html">internals</a>/ ++</span>+<span class="title">+key format++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>A git-annex key has this format:</p>++<pre><code>BACKEND-sNNNN-mNNNN--NAME+</code></pre>++<p>For example:</p>++<pre><code>SHA256E-s31390--f50d7ac4c6b9031379986bc362fcefb65f1e52621ce1708d537e740fefc59cc0.mp3+</code></pre>++<ul>+<li>The backend is one of the <a href="../backends.html">key-value backends</a>, which+are always upper-cased.</li>+<li>The name field at the end has a format dependent on the backend. It is+always the last field, and is prefixed with "--". Unlike other fields,+it may contain "-" in its content. It should not contain newline characters;+otherwise nearly anything goes.</li>+<li>The "-s" field is optional, and is the size of the content in bytes.</li>+<li>The "-m" field is optional, and is the mtime of the file when it was+added to git-annex, expressed as seconds from the epoch.+This is currently only used by the WORM backend.</li>+<li>Other fields could be added in the future, if needed.</li>+<li>Fields may appear, in any order (though always before the name field).</li>+</ul>+++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./hashing.html">hashing</a>++<a href="../internals.html">internals</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:45 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:45 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/license.html view
@@ -0,0 +1,140 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>license</title>++<link rel="stylesheet" href="style.css" type="text/css" />++<link rel="stylesheet" href="local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="./index.html">git-annex</a>/ ++</span>+<span class="title">+license++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="./install.html">install</a></li>+<li><a href="./assistant.html">assistant</a></li>+<li><a href="./walkthrough.html">walkthrough</a></li>+<li><a href="./tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="./comments.html">comments</a></li>+<li><a href="./contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>git-annex is Free Software.</p>++<p>The majority of git-annex is licensed under the <a href="./license/GPL">GPL</a>, version 3 or+higher.</p>++<p>The git-annex webapp is licensed under the <a href="./license/AGPL">AGPL</a>, version 3 or higher.+Note that builds of git-annex that include the webapp may be licensed+under the AGPL as a whole. git-annex built without the webapp does+not include this code, so remains GPLed.</p>++<p>git-annex contains a variety of other code, artwork, etc copyright by+others, under a variety of licences, including the <a href="./license/LGPL">LGPL</a>, BSD,+MIT, and Apache 2.0 licenses. For details, see+<a href="http://source.git-annex.branchable.com/?p=source.git;a=blob_plain;f=debian/copyright;hb=HEAD">this file</a>.</p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./index.html">index</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:45 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:45 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/license/AGPL.gz view

binary file changed (absent → 11769 bytes)

+ debian/git-annex/usr/share/doc/git-annex/html/license/GPL.gz view

binary file changed (absent → 12130 bytes)

+ debian/git-annex/usr/share/doc/git-annex/html/license/LGPL.gz view

binary file changed (absent → 9357 bytes)

+ debian/git-annex/usr/share/doc/git-annex/html/links/key_concepts.html view
@@ -0,0 +1,130 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>key concepts</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../index.html">links</a>/ ++</span>+<span class="title">+key concepts++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<h3>key concepts</h3>++<ul>+<li><a href="../git-annex.html">git-annex man page</a></li>+<li><a href="../how_it_works.html">how it works</a></li>+<li><a href="../special_remotes.html">special remotes</a></li>+<li><a href="../sync.html">sync</a></li>+<li><a href="../direct_mode.html">direct mode</a></li>+</ul>+++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">++++++++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:45 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:45 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/links/other_stuff.html view
@@ -0,0 +1,129 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>other stuff</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../index.html">links</a>/ ++</span>+<span class="title">+other stuff++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<h3>other stuff</h3>++<ul>+<li><a href="../testimonials.html">testimonials</a></li>+<li><a href="../not.html">what git annex is not</a></li>+<li><a href="../related_software.html">related software</a></li>+<li><a href="../sitemap.html">sitemap</a></li>+</ul>+++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">++++++++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:45 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:45 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/links/the_details.html view
@@ -0,0 +1,131 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>the details</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../index.html">links</a>/ ++</span>+<span class="title">+the details++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<h3>the details</h3>++<ul>+<li><a href="../encryption.html">encryption</a></li>+<li><a href="../backends.html">key-value backends</a></li>+<li><a href="../bare_repositories.html">bare repositories</a></li>+<li><a href="../internals.html">internals</a></li>+<li><a href="../scalability.html">scalability</a></li>+<li><a href="../design.html">design</a></li>+</ul>+++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">++++++++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:45 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:45 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/location_tracking.html view
@@ -0,0 +1,174 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>location tracking</title>++<link rel="stylesheet" href="style.css" type="text/css" />++<link rel="stylesheet" href="local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="./index.html">git-annex</a>/ ++</span>+<span class="title">+location tracking++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="./install.html">install</a></li>+<li><a href="./assistant.html">assistant</a></li>+<li><a href="./walkthrough.html">walkthrough</a></li>+<li><a href="./tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="./comments.html">comments</a></li>+<li><a href="./contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>git-annex keeps track of in which repositories it last saw a file's content.+This location tracking information is stored in the git-annex branch.+Repositories record their UUID and the date when they get or drop+a file's content.</p>++<p>This location tracking information is useful if you have multiple+repositories, and not all are always accessible. For example, perhaps one+is on a home file server, and you are away from home. Then git-annex can+tell you what git remote it needs access to in order to get a file:</p>++<pre><code># git annex get myfile +get myfile (not available)+  I was unable to access these remotes: home+</code></pre>++<p>Another way the location tracking comes in handy is if you put repositories+on removable USB drives, that might be archived away offline in a safe+place. In this sort of case, you probably don't have a git remotes+configured for every USB drive. So git-annex may have to resort to talking+about repository UUIDs. If you have previously used "git annex init"+to attach descriptions to those repositories, it will include their+descriptions to help you with finding them:</p>++<pre><code># git annex get myfile+get myfile (not available)+  Try making some of these repositories available:+    c0a28e06-d7ef-11df-885c-775af44f8882  -- USB archive drive 1+    e1938fee-d95b-11df-96cc-002170d25c55+</code></pre>++<p>In certain cases you may want to configure git-annex to <a href="./trust.html">trust</a>+that location tracking information is always correct for a repository.</p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./distributed_version_control.html">distributed version control</a>++<a href="./how_it_works.html">how it works</a>++<a href="./internals.html">internals</a>++<a href="./not.html">not</a>++<a href="./tips/powerful_file_matching.html">tips/powerful file matching</a>++<a href="./tips/what_to_do_when_you_lose_a_repository.html">tips/what to do when you lose a repository</a>++<a href="./trust.html">trust</a>++<a href="./use_case/Bob.html">use case/Bob</a>++<a href="./walkthrough/transferring_files:_When_things_go_wrong.html">walkthrough/transferring files: When things go wrong</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Fri Sep 28 01:45:57 2012</span>+<!-- Created <span class="date">Fri Sep 28 01:45:57 2012</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/logo-bw.svg view
@@ -0,0 +1,60 @@+<?xml version="1.0" encoding="UTF-8" standalone="no"?>+<!-- Created with Inkscape (http://www.inkscape.org/) -->++<svg+   xmlns:dc="http://purl.org/dc/elements/1.1/"+   xmlns:cc="http://creativecommons.org/ns#"+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"+   xmlns:svg="http://www.w3.org/2000/svg"+   xmlns="http://www.w3.org/2000/svg"+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"+   width="640px"+   height="480px"+   id="svg3134"+   version="1.1"+   inkscape:version="0.48.3.1 r9886"+   sodipodi:docname="New document 11">+  <defs+     id="defs3136" />+  <sodipodi:namedview+     id="base"+     pagecolor="#ffffff"+     bordercolor="#666666"+     borderopacity="1.0"+     inkscape:pageopacity="0.0"+     inkscape:pageshadow="2"+     inkscape:zoom="0.77472527"+     inkscape:cx="317.41844"+     inkscape:cy="245.16312"+     inkscape:current-layer="layer1"+     inkscape:document-units="px"+     showgrid="false"+     inkscape:window-width="800"+     inkscape:window-height="564"+     inkscape:window-x="0"+     inkscape:window-y="12"+     inkscape:window-maximized="0" />+  <metadata+     id="metadata3139">+    <rdf:RDF>+      <cc:Work+         rdf:about="">+        <dc:format>image/svg+xml</dc:format>+        <dc:type+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />+        <dc:title></dc:title>+      </cc:Work>+    </rdf:RDF>+  </metadata>+  <g+     id="layer1"+     inkscape:label="Layer 1"+     inkscape:groupmode="layer">+    <path+       style="fill:#000000"+       d="m 302.43431,440.4468 c -14.88228,-4.33874 -18.89443,-6.47398 -28.38217,-15.10481 -13.08558,-11.90371 -17.72561,-23.29726 -17.72561,-43.52501 0,-18.30772 4.14768,-29.96528 14.34194,-40.30981 7.27131,-7.37848 18.36439,-13.25052 25.03206,-13.25052 4.73347,0 4.8315,0.27458 4.8315,13.5325 l 0,13.5325 -6.57204,3.04787 c -9.16684,4.25125 -13.05127,12.36242 -12.09267,25.25093 1.53891,20.69072 13.75689,28.81207 43.34566,28.81207 14.25099,0 19.3577,-0.72886 23.91428,-3.41316 12.51899,-7.37499 18.80704,-23.65294 14.28477,-36.97908 -2.56222,-7.55028 -13.65238,-17.88336 -19.19364,-17.88336 -3.36269,0 -3.73837,1.31029 -3.73837,13.03841 l 0,13.0384 -11.88928,-0.55077 -11.88929,-0.55079 0,-25.90026 0,-25.90027 35.19228,0 35.19228,0 0.57499,9.7126 c 0.49269,8.32267 0.0845,9.71665 -2.85343,9.74093 -8.20311,0.0677 -8.706,2.84359 -2.15276,11.88256 6.12053,8.44215 6.33349,9.33743 6.33349,26.62529 0,15.38301 -0.65924,19.1446 -4.70538,26.84845 -9.93611,18.91837 -28.93477,29.1492 -56.00199,30.15722 -10.88743,0.40545 -20.4551,-0.28006 -25.84662,-1.85189 z m -45.65485,-139.01542 0,-13.87514 65.62885,0 65.62884,0 0,13.87514 0,13.87514 -65.62884,0 -65.62885,0 0,-13.87514 z m 49.45942,-38.8504 0,-15.72516 -24.72971,0 -24.72971,0 0,-12.95013 0,-12.95014 24.72971,0 24.72971,0 0,-16.65017 0,-16.65017 15.21829,0 15.21828,0 0,16.65017 0,16.65017 25.68085,0 25.68085,0 0,12.89643 0,12.89645 -25.20528,0.51619 -25.20528,0.51621 -0.5525,15.26265 -0.5525,15.26266 -15.14135,0 -15.14136,0 0,-15.72516 z m 90.58314,-28.97078 c -1.413,-6.87082 -1.79669,-6.34506 5.78198,-7.92291 5.58749,-1.16331 6.09939,-0.83956 7.33692,4.64003 1.45579,6.44604 -0.79787,9.0505 -7.87441,9.1001 -3.02463,0.0211 -4.34501,-1.44337 -5.24449,-5.81722 z m -160.69546,0.49827 c -1.79783,-1.10787 -2.17745,-3.37832 -1.25087,-7.48118 1.23754,-5.47959 1.74944,-5.80335 7.33693,-4.64004 7.57866,1.57785 7.19497,1.05209 5.78198,7.92291 -1.24077,6.03343 -6.10031,7.75249 -11.86804,4.19831 z m 190.42463,-6.76941 c -1.85277,-5.87101 -1.66966,-6.25919 3.83255,-8.12458 3.17805,-1.07743 5.9948,-1.95896 6.25947,-1.95896 0.91633,0 4.67209,11.70301 3.97372,12.38219 -0.38574,0.37517 -3.27056,1.39869 -6.41068,2.27453 -5.34046,1.48954 -5.83503,1.19409 -7.65506,-4.57318 z m -216.85329,0.64986 c -3.40034,-0.87401 -6.18243,-1.85733 -6.18243,-2.18515 0,-0.32782 0.94953,-3.24505 2.11007,-6.48271 1.73496,-4.84015 2.83405,-5.67166 6.18243,-4.67733 7.88037,2.34017 8.42794,3.15845 6.18018,9.23554 -1.96709,5.31825 -2.52062,5.59264 -8.29025,4.10965 z m 245.52541,-10.67191 c -2.12815,-5.48318 -2.11652,-5.49574 11.85359,-12.82409 22.7641,-11.94143 40.5838,-25.97488 57.05249,-44.93026 l 7.53031,-8.66734 5.41145,4.25151 5.41145,4.25151 -17.60152,17.90565 c -16.73035,17.01941 -37.6183,32.42395 -56.39658,41.59159 -10.27596,5.01677 -10.722,4.96367 -13.26119,-1.57857 z m -286.33038,-6.27889 c -21.55151,-11.9442 -31.63729,-19.70355 -49.98909,-38.45829 l -16.54083,-16.90401 5.39695,-4.24028 5.39696,-4.24026 7.53031,8.66734 c 16.46869,18.95538 34.28839,32.98883 57.05248,44.93026 13.97012,7.32835 13.98175,7.34091 11.8536,12.82409 -1.17162,3.01872 -3.03333,5.48856 -4.13709,5.48856 -1.10378,0 -8.55726,-3.63034 -16.56329,-8.06741 z m 375.66016,-70.84688 c -3.97648,-2.69927 -4.05764,-3.18834 -1.36824,-8.24615 2.7937,-5.254 2.98784,-5.31188 8.50732,-2.53606 6.47782,3.25777 6.35114,2.92151 3.44074,9.13364 -2.52039,5.37967 -4.60478,5.70447 -10.57982,1.64857 z M 89.683687,134.84263 c -2.910382,-6.21213 -3.037055,-5.87587 3.440759,-9.13364 5.520337,-2.77624 5.713305,-2.71854 8.512274,2.54533 2.72546,5.12566 2.63957,5.52893 -1.77689,8.3432 -6.255304,3.98601 -7.594703,3.75504 -10.176143,-1.75489 z M 558.86885,114.49806 c -4.66412,-2.46246 -4.94939,-3.21135 -3.14292,-8.25101 1.09275,-3.04849 2.20334,-5.54273 2.46799,-5.54273 1.15984,0 12.46263,4.10838 12.46263,4.52996 0,2.20567 -4.45138,12.10382 -5.41738,12.04614 -0.68234,-0.0407 -3.54898,-1.29279 -6.37032,-2.78236 z M 76.248436,107.82834 c -1.1486,-3.20438 -2.088367,-6.03672 -2.088367,-6.2941 0,-0.42158 11.30279,-4.529954 12.462632,-4.529954 0.264646,0 1.376722,2.498376 2.471297,5.551964 1.832586,5.11256 1.553673,5.77145 -3.524022,8.32508 -7.178882,3.61035 -6.90035,3.70158 -9.32154,-3.05299 z M 568.27869,86.478917 c -4.16144,-1.0576 -4.15124,-1.435966 0.47558,-17.673656 4.71707,-16.554414 4.76128,-15.866207 -0.95115,-14.804204 -3.51666,0.653779 -4.75571,0.08973 -4.75571,-2.164633 0,-1.67682 1.09334,-3.456779 2.42964,-3.95547 1.33629,-0.498709 4.53447,-4.218875 7.10707,-8.267031 3.85384,-6.064326 5.73436,-7.360301 10.68013,-7.360301 4.78765,0 6.24005,0.919681 7.17525,4.543462 0.64491,2.498894 2.13408,6.869564 3.30925,9.712599 4.714,11.40422 2.47433,18.328434 -4.06643,12.571786 -3.92535,-3.4548 -3.4906,-4.351652 -9.63904,19.885132 -2.24473,8.848659 -3.45803,9.62341 -11.76459,7.512316 z M 62.514449,66.506779 57.950276,48.599557 52.639,52.662624 c -2.921206,2.234675 -5.630041,3.75306 -6.019648,3.374157 -0.389608,-0.378884 0.859281,-4.428205 2.775301,-8.998492 1.916001,-4.570287 3.965028,-9.76649 4.553405,-11.547134 0.734891,-2.224093 3.046111,-3.237533 7.383397,-3.237533 5.021102,0 8.14882,1.812001 15.277977,8.851138 4.930401,4.868122 8.964349,10.279427 8.964349,12.025124 0,4.517598 -2.081195,3.939726 -6.8916,-1.913568 -2.299596,-2.798153 -4.818203,-4.473179 -5.596904,-3.722293 -0.778719,0.750904 0.522064,8.499468 2.890599,17.219014 2.368555,8.719565 3.936551,16.213492 3.484473,16.653149 -0.452097,0.439676 -3.422934,1.3053 -6.601862,1.923613 l -5.779866,1.12422 -4.564172,-17.90724 z"+       id="path3050"+       inkscape:connector-curvature="0" />+  </g>+</svg>
+ debian/git-annex/usr/share/doc/git-annex/html/logo.png view

binary file changed (absent → 9092 bytes)

+ debian/git-annex/usr/share/doc/git-annex/html/logo.svg view
@@ -0,0 +1,77 @@+<?xml version="1.0" encoding="UTF-8" standalone="no"?>+<!-- Created with Inkscape (http://www.inkscape.org/) -->++<svg+   xmlns:dc="http://purl.org/dc/elements/1.1/"+   xmlns:cc="http://creativecommons.org/ns#"+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"+   xmlns:svg="http://www.w3.org/2000/svg"+   xmlns="http://www.w3.org/2000/svg"+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"+   width="640px"+   height="480px"+   id="svg3134"+   version="1.1"+   inkscape:version="0.48.3.1 r9886"+   sodipodi:docname="git-annex.svg">+  <defs+     id="defs3136" />+  <sodipodi:namedview+     id="base"+     pagecolor="#ffffff"+     bordercolor="#666666"+     borderopacity="1.0"+     inkscape:pageopacity="0.0"+     inkscape:pageshadow="2"+     inkscape:zoom="0.77472527"+     inkscape:cx="398.6665"+     inkscape:cy="232.05718"+     inkscape:current-layer="layer1"+     inkscape:document-units="px"+     showgrid="false"+     inkscape:window-width="1024"+     inkscape:window-height="566"+     inkscape:window-x="0"+     inkscape:window-y="12"+     inkscape:window-maximized="0" />+  <metadata+     id="metadata3139">+    <rdf:RDF>+      <cc:Work+         rdf:about="">+        <dc:format>image/svg+xml</dc:format>+        <dc:type+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />+        <dc:title></dc:title>+      </cc:Work>+    </rdf:RDF>+  </metadata>+  <g+     id="layer1"+     inkscape:label="Layer 1"+     inkscape:groupmode="layer">+    <g+       id="g4187"+       transform="matrix(2.0184211,0,0,1.9796558,-320.30102,-235.1316)">+      <path+         sodipodi:nodetypes="cccccccccccccccccccccccccssscssssssssscssssssssssscccssssscccssssssssssssssssssscssssssssssscsssssssccscsssssssssscc"+         inkscape:connector-curvature="0"+         id="path3050"+         d="m 306.53525,253.83733 0,-8.5 -13,0 -13,0 0,-7 0,-7 13,0 13,0 0,-9 0,-9 8,0 8,0 0,9 0,9 13.5,0 13.5,0 0,6.97097 0,6.97098 -13.25,0.27902 -13.25,0.27903 -0.29044,8.25 -0.29044,8.25 -7.95956,0 -7.95956,0 z m 47.61806,-15.65972 c -0.74279,-3.71392 -0.94449,-3.42973 3.03949,-4.28261 2.93725,-0.62881 3.20635,-0.45381 3.8569,2.5081 0.76528,3.48431 -0.41943,4.89211 -4.13945,4.91892 -1.59,0.0114 -2.2841,-0.78019 -2.75694,-3.14441 z m -84.47495,0.26933 c -0.94509,-0.59884 -1.14465,-1.8261 -0.65756,-4.04384 0.65055,-2.96191 0.91965,-3.13691 3.8569,-2.5081 3.98398,0.85288 3.78228,0.56869 3.03949,4.28261 -0.65225,3.26128 -3.20683,4.19049 -6.23883,2.26933 z m 100.10308,-3.6591 c -0.97397,-3.17349 -0.87771,-3.38331 2.01471,-4.39162 1.67065,-0.58239 3.15137,-1.05889 3.2905,-1.05889 0.4817,0 2.45604,6.32589 2.08892,6.69301 -0.20278,0.20279 -1.71928,0.75604 -3.36999,1.22946 -2.80739,0.80515 -3.06738,0.64545 -4.02414,-2.47196 z m -113.99619,0.35127 c -1.7875,-0.47243 -3.25,-1.00395 -3.25,-1.18115 0,-0.1772 0.49915,-1.75406 1.10923,-3.50413 0.91204,-2.61627 1.48981,-3.06573 3.25,-2.52826 4.14258,1.26494 4.43043,1.70725 3.24882,4.99213 -1.03407,2.8747 -1.32505,3.02302 -4.35805,2.22141 z m 129.06865,-5.76854 c -1.11873,-2.96385 -1.11262,-2.97064 6.23124,-6.93187 11.96671,-6.45476 21.33423,-14.04033 29.99155,-24.28638 l 3.95856,-4.685 2.84471,2.29809 2.84471,2.29809 -9.25283,9.67863 c -8.79487,9.19959 -19.77532,17.52628 -29.64675,22.48171 -5.4019,2.71174 -5.63638,2.68304 -6.97119,-0.85327 z m -150.51915,-3.39396 c -11.32927,-6.45626 -16.6312,-10.65046 -26.27844,-20.78805 l -8.69524,-9.13721 2.83709,-2.29202 2.83709,-2.29201 3.95856,4.685 c 8.65732,10.24605 18.02484,17.83162 29.99155,24.28638 7.34386,3.96123 7.34997,3.96802 6.23124,6.93187 -0.6159,1.63172 -1.59457,2.96676 -2.1748,2.96676 -0.58024,0 -4.49841,-1.96233 -8.70705,-4.36072 z m 197.47834,-38.29522 c -2.09037,-1.45905 -2.13303,-1.72341 -0.71926,-4.45733 1.4686,-2.83997 1.57066,-2.87126 4.47216,-1.37083 3.40528,1.76094 3.33869,1.57918 1.80874,4.93705 -1.32493,2.9079 -2.42066,3.08347 -5.56164,0.89111 z m -239.11733,-2.89111 c -1.52994,-3.35787 -1.59653,-3.17611 1.80875,-4.93705 2.90195,-1.50066 3.00339,-1.46947 4.47476,1.37584 1.43273,2.7706 1.38758,2.98858 -0.93408,4.50979 -3.28831,2.15458 -3.99241,2.02973 -5.34943,-0.94858 z m 246.64289,-10.99695 c -2.45185,-1.33105 -2.60181,-1.73585 -1.65218,-4.45996 0.57444,-1.64782 1.15826,-2.99604 1.29738,-2.99604 0.60971,0 6.5514,2.22072 6.5514,2.4486 0,1.19224 -2.34002,6.54254 -2.84783,6.51136 -0.35869,-0.022 -1.86564,-0.6988 -3.34877,-1.50396 z m -253.70558,-3.60522 c -0.6038,-1.73208 -1.09782,-3.26306 -1.09782,-3.40218 0,-0.22788 5.94169,-2.4486 6.5514,-2.4486 0.13912,0 0.72372,1.35046 1.29912,3.00103 0.96336,2.76352 0.81674,3.11967 -1.85252,4.5 -3.77382,1.95152 -3.6274,2.00083 -4.90018,-1.65025 z M 444.28525,158.648 c -2.1876,-0.57167 -2.18224,-0.77619 0.25,-9.55323 2.47969,-8.94824 2.50293,-8.57624 -0.5,-8.00219 -1.84865,0.35339 -2.5,0.0485 -2.5,-1.17006 0,-0.90638 0.57475,-1.86851 1.27722,-2.13807 0.70247,-0.26957 2.3837,-2.28045 3.73607,-4.46862 2.0259,-3.27798 3.01446,-3.9785 5.61437,-3.9785 2.51679,0 3.28029,0.49712 3.77191,2.4559 0.33902,1.35074 1.12185,3.71324 1.73962,5.25 2.47807,6.16438 1.30071,9.90716 -2.13766,6.79549 -2.06349,-1.86744 -1.83495,-2.35222 -5.06708,10.74861 -1.18002,4.78301 -1.81783,5.20179 -6.18445,4.06067 z m -265.87191,-10.79564 -2.39931,-9.67948 -2.79205,2.19623 c -1.53563,1.20792 -2.95962,2.02866 -3.16443,1.82385 -0.20481,-0.2048 0.45171,-2.3936 1.45893,-4.864 1.00721,-2.4704 2.08435,-5.27913 2.39365,-6.24163 0.38632,-1.2022 1.60129,-1.75 3.88133,-1.75 2.63951,0 4.2837,0.97945 8.03138,4.78435 2.59183,2.63139 4.71241,5.55639 4.71241,6.5 0,2.44192 -1.09405,2.12956 -3.6228,-1.03435 -1.20886,-1.5125 -2.53285,-2.41791 -2.9422,-2.01203 -0.40936,0.40589 0.27444,4.59426 1.51954,9.30748 1.24511,4.71323 2.06938,8.76396 1.83173,9.00161 -0.23766,0.23766 -1.79938,0.70556 -3.47049,1.03978 l -3.03838,0.60768 z"+         style="fill:#40bf4c;fill-opacity:1" />+      <path+         sodipodi:nodetypes="ccccccccc"+         style="fill:#d8372c;fill-opacity:1"+         d="m 280.84173,275.15053 0,-7.5 34.5,0 34.5,0 0,7.5 0,7.5 -34.5,0 -34.5,0 z"+         id="path4113"+         inkscape:connector-curvature="0" />+      <path+         sodipodi:nodetypes="sssssscssssssscccccccsssssss"+         style="fill:#666666;fill-opacity:1;fill-rule:nonzero"+         d="m 305.37638,349.62884 c -7.82337,-2.34524 -9.93249,-3.49941 -14.92004,-8.16468 -6.87887,-6.43437 -9.31806,-12.59298 -9.31806,-23.52679 0,-9.89596 2.18037,-16.19728 7.53932,-21.78886 3.82241,-3.98833 9.65386,-7.16237 13.15894,-7.16237 2.48831,0 2.53984,0.14842 2.53984,7.31479 l 0,7.31479 -3.45481,1.64748 c -4.81886,2.29795 -6.86084,6.68232 -6.35692,13.64901 0.80898,11.18406 7.23177,15.57393 22.7861,15.57393 7.49151,0 10.17602,-0.39397 12.57134,-1.84493 6.58103,-3.98644 9.88655,-12.78524 7.50927,-19.98849 -1.34692,-4.08119 -7.17683,-9.66658 -10.08978,-9.66658 -1.76771,0 -1.9652,0.70826 -1.9652,7.04772 l 0,7.04771 -6.25,-0.29771 -6.25,-0.29772 0,-14 0,-14 18.5,0 18.5,0 0.30226,5.25 c 0.259,4.49869 0.0444,5.25219 -1.5,5.26531 -4.31224,0.0366 -4.5766,1.53706 -1.13167,6.42294 3.21746,4.56328 3.32941,5.04721 3.32941,14.3919 0,8.31506 -0.34655,10.34833 -2.47354,14.51253 -5.22325,10.22604 -15.21053,15.75616 -29.43932,16.30103 -5.72334,0.21916 -10.75291,-0.15138 -13.58714,-1.00101 z"+         id="path4115"+         inkscape:connector-curvature="0" />+    </g>+  </g>+</svg>
+ debian/git-annex/usr/share/doc/git-annex/html/logo_small.png view

binary file changed (absent → 4713 bytes)

+ debian/git-annex/usr/share/doc/git-annex/html/meta.html view
@@ -0,0 +1,151 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>meta</title>++<link rel="stylesheet" href="style.css" type="text/css" />++<link rel="stylesheet" href="local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="./index.html">git-annex</a>/ ++</span>+<span class="title">+meta++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="./install.html">install</a></li>+<li><a href="./assistant.html">assistant</a></li>+<li><a href="./walkthrough.html">walkthrough</a></li>+<li><a href="./tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="./comments.html">comments</a></li>+<li><a href="./contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>This wiki contains 519 pages.</p>++<p>Broken links:</p>++<ul>+<li><span class="createlink">Issue on OSX with some system limits</span> from <a href="./design/assistant/inotify.html">inotify</a>, <a href="./assistant/release_notes.html">release notes</a></li>+<li><span class="createlink">Joey</span> from <a href="./tips/finding_duplicate_files.html">finding duplicate files</a>, <a href="./tips/using_Google_Cloud_Storage.html">using Google Cloud Storage</a>, <a href="./testimonials.html">testimonials</a>, <a href="./assistant/thanks.html">thanks</a>, <a href="./tips/what_to_do_when_a_repository_is_corrupted.html">what to do when a repository is corrupted</a>, <a href="./tips/setup_a_public_repository_on_a_web_site.html">setup a public repository on a web site</a>, <a href="./design/assistant/polls/goals_for_April.html">goals for April</a>, <a href="./tips/assume-unstaged.html">assume-unstaged</a>, <a href="./install/OSX.html">OSX</a>, <a href="./design/assistant.html">assistant</a>, <a href="./special_remotes/hook.html">hook</a></li>+<li><span class="createlink">OSX alias permissions and versions problem</span> from <a href="./design/assistant/desymlink.html">desymlink</a></li>+<li><span class="createlink">OSX app issues</span> from <a href="./install/OSX.html">OSX</a></li>+<li><span class="createlink">OSX&#39;s default sshd behaviour has limited paths set</span> from <a href="./install/OSX.html">OSX</a></li>+<li><span class="createlink">OSX&#39;s haskell-platform statically links things</span> from <a href="./install/OSX.html">OSX</a></li>+<li><span class="createlink">Slow transfer for a lot of small files.</span> from <a href="./design/assistant/syncing.html">syncing</a></li>+<li><span class="createlink">Wishlist: options for syncing meta-data and data</span> from <a href="./design/assistant/syncing.html">syncing</a></li>+<li><span class="createlink">assistant threaded runtime</span> from <a href="./design/assistant/syncing.html">syncing</a></li>+<li><span class="createlink">blog</span> from <a href="./design/assistant.html">assistant</a></li>+<li><span class="createlink">blog</span> from <a href="./footer/column_a.html">column a</a>, <a href="./assistant.html">assistant</a></li>+<li><span class="createlink">bugs</span> from <a href="./sidebar.html">sidebar</a></li>+<li><span class="createlink">day 7  bugfixes</span> from <a href="./design/assistant/inotify.html">inotify</a></li>+<li><span class="createlink">forum</span> from <a href="./sidebar.html">sidebar</a>, <a href="./footer/column_b.html">column b</a>, <a href="./contact.html">contact</a></li>+<li><span class="createlink">gadu - git-annex disk usage</span> from <a href="./related_software.html">related software</a></li>+<li><span class="createlink">git-annex unused eats memory</span> from <a href="./scalability.html">scalability</a></li>+<li><span class="createlink">smudge</span> from <a href="./design/assistant/desymlink.html">desymlink</a></li>+<li><span class="createlink">special remote for IMAP</span> from <a href="./special_remotes.html">special remotes</a></li>+<li><span class="createlink">special remote for amazon glacier</span> from <a href="./design/assistant/more_cloud_providers.html">more cloud providers</a></li>+<li><span class="createlink">tips: special&#95;remotes&#47;hook with tahoe-lafs</span> from <a href="./special_remotes.html">special remotes</a></li>+<li><span class="createlink">todo</span> from <a href="./sidebar.html">sidebar</a>, <a href="./design/assistant.html">assistant</a></li>+<li><span class="createlink">watcher commits unlocked files</span> from <a href="./design/assistant/inotify.html">inotify</a>, <a href="./assistant/release_notes.html">release notes</a></li>+<li><span class="createlink">windows support</span> from <a href="./install.html">install</a>, <a href="./design/assistant/windows.html">windows</a></li>+<li><span class="createlink">wishlist: allow configuration of downloader for addurl</span> from <a href="./tips/Using_Git-annex_as_a_web_browsing_assistant.html">Using Git-annex as a web browsing assistant</a></li>+<li><span class="createlink">wishlist: an &#34;assistant&#34; for web-browsing -- tracking the sources of the downloads</span> from <a href="./design/assistant/webapp.html">webapp</a>, <a href="./tips/Using_Git-annex_as_a_web_browsing_assistant.html">Using Git-annex as a web browsing assistant</a></li></ul>+++++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">++++++++++++<div class="pagedate">+Last edited <span class="date">Fri Sep 28 01:45:57 2012</span>+<!-- Created <span class="date">Fri Sep 28 01:45:57 2012</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/news.html view
@@ -0,0 +1,127 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>news</title>++<link rel="stylesheet" href="style.css" type="text/css" />++<link rel="stylesheet" href="local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="./index.html">git-annex</a>/ ++</span>+<span class="title">+news++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="./install.html">install</a></li>+<li><a href="./assistant.html">assistant</a></li>+<li><a href="./walkthrough.html">walkthrough</a></li>+<li><a href="./tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="./comments.html">comments</a></li>+<li><a href="./contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>(Please see the changelog.)</p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./footer/column_a.html">footer/column a</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Fri Sep 28 01:45:57 2012</span>+<!-- Created <span class="date">Fri Sep 28 01:45:57 2012</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/not.html view
@@ -0,0 +1,507 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>what git-annex is not</title>++<link rel="stylesheet" href="style.css" type="text/css" />++<link rel="stylesheet" href="local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="./index.html">git-annex</a>/ ++</span>+<span class="title">+what git-annex is not++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="./install.html">install</a></li>+<li><a href="./assistant.html">assistant</a></li>+<li><a href="./walkthrough.html">walkthrough</a></li>+<li><a href="./tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="./comments.html">comments</a></li>+<li><a href="./contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<ul>+<li><p>git-annex is not a backup system. It may be a useful component of an+<a href="./use_case/Bob.html">archival</a> system, or a way to deliver files to a backup+system. For a backup system that uses git and that git-annex supports+storing data in, see <a href="./special_remotes/bup.html">bup</a>.</p></li>+<li><p>git-annex is not a filesystem or DropBox clone. However, the git-annex+<a href="./assistant.html">assistant</a> is addressing some of the same needs in its own unique ways.+(There is also a FUSE filesystem built on top of git-annex, called+<a href="https://github.com/chmduquesne/sharebox-fs">ShareBox</a>.)</p></li>+<li><p>git-annex is not unison, but if you're finding unison's checksumming+too slow, or its strict mirroring of everything to both places too+limiting, then git-annex could be a useful alternative.</p></li>+<li><p>git-annex is more than just a workaround for git scalability+limitations that might eventually be fixed by efforts like+<a href="http://caca.zoy.org/wiki/git-bigfiles">git-bigfiles</a>. In particular,+git-annex's <a href="./location_tracking.html">location tracking</a> allows having many repositories+with a partial set of files, that are copied around as desired.</p></li>+<li><p>git-annex is not some flaky script that was quickly thrown together.+I wrote it in Haskell because I wanted it to be solid and to compile+down to a binary. And it has a fairly extensive test suite. (Don't be+fooled by "make test" only showing a few dozen test cases; each test+involves checking dozens to hundreds of assertions.)</p></li>+<li><p>git-annex is not <a href="https://github.com/schacon/git-media">git-media</a>,+although they both approach the same problem from a similar direction.+I only learned of git-media after writing git-annex, but I probably+would have still written git-annex instead of using it. Currently,+git-media has the advantage of using git smudge filters rather than+git-annex's pile of symlinks, and it may be a tighter fit for certain+situations. It lacks git-annex's support for widely distributed storage,+using only a single backend data store. It also does not support+partial checkouts of file contents, like git-annex does.</p></li>+<li><p>git-annex is similarly not <a href="https://github.com/jedbrown/git-fat">git-fat</a>,+which also uses git smudge filters, and also lacks git-annex' widely+distributed storage and partial checkouts.</p></li>+<li><p>git-annex is also not <a href="http://code.google.com/p/boar/">boar</a>,+although it shares many of its goals and characteristics. Boar implements+its own version control system, rather than simply embracing and+extending git. And while boar supports distributed clones of a repository,+it does not support keeping different files in different clones of the+same repository, which git-annex does, and is an important feature for+large-scale archiving.</p></li>+<li><p>git-annex is not the <a href="http://mercurial.selenic.com/wiki/LargefilesExtension">Mercurial largefiles extension</a>.+Although mercurial and git have some of the same problems around large+files, and both try to solve them in similar ways (standin files using+mostly hashes of the real content).</p></li>+</ul>+++</div>++++<div id="comments">+<div  class="feedlink">+++</div>+<div class="comment" id="comment-21ca3dc4a279055e92a26ddc0740e63c">++++<div class="comment-subject">++<a href="/not.html#comment-21ca3dc4a279055e92a26ddc0740e63c">git-media</a>++</div>++<div class="inlinecontent">+I haven't used git-media, but from the README it looks as though they now support several backends.  Might want to update the (very helpful!) comparison.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://bergey.dreamwidth.org/">bergey [dreamwidth.org]</a>+</span>+++&mdash; <span class="date">Sat Jul 14 11:42:05 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-4d4bfdd220bfc44bd5683f5da6638358">++++<div class="comment-subject">++<a href="/not.html#comment-4d4bfdd220bfc44bd5683f5da6638358">Sparkleshare</a>++</div>++<div class="inlinecontent">+How does <a href="http://sparkleshare.org/">sparkleshare</a> and git-annex (and git-annex assistant) compare?++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawkurjhi0CRJvgm7QNaZDWS9hitBtavqIpc">Bret</a>+</span>+++&mdash; <span class="date">Thu Sep  6 04:09:17 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-10687d51e112a627d1272a69b92c2a9d">++++<div class="comment-subject">++<a href="/not.html#comment-10687d51e112a627d1272a69b92c2a9d">comment 3</a>++</div>++<div class="inlinecontent">+My understanding of sparkleshare (I've not used it) is that it uses a regular git repository, so has git's problems with large files and will not support partial checkouts. However, you might want to try it out and see if it works for you.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Thu Sep  6 10:50:43 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-c61d8243d45b78efc5ff90a3cc10318c">++++<div class="comment-subject">++<a href="/not.html#comment-c61d8243d45b78efc5ff90a3cc10318c">Sparkleshare</a>++</div>++<div class="inlinecontent">+<p>Hi,</p>++<p>I used sparkleshare lately in a project involving 3 computers and 2 people. and for ascii texts and even a few smaller binary things it works ok.</p>++<p>But it does "to much" for media. at least at the moment, it just uses git for saving the data. That has a possitive and a negative aspect.</p>++<p>possitive:</p>++<ol>+<li>you have a full history, if you delete a file its not gone for ever, so if you change it, the older version is still recoverable.</li>+<li>if you would as example use it from a laptop in a train without internet and you use a git server in the internet for the central server, and would change some files, then you or somebody else would write on the same txt file as example (html or something... latex...) you would be able to merge this files.</li>+<li>its not totaly bad for backup, because you can restore old files even if you delete it localy, because it will hold all history</li>+</ol>+++<p>negative:</p>++<ol>+<li>for bigger data its cracy. if you use it for movies as example, you would in git annex delete some stuff you want not to see anytime again, so you would delete it everywhere. and its really away, not beeing still there in the history</li>+<li>git as it is has issues with saving/transfairing very big files, and its slow on even mid-sized files lets say 100 5mb big files it would be slow. because at the moment sparkleshare uses git all this disatvantages are there.</li>+<li>as many clients you use lets say a projekt with 10 people, each of them have all files and all the history of this projekt/directory on their pc.</li>+<li>you need a central data-store git folder you can use a seperate pc for that or save it on a client, if you use a client for that you have to save the data double on this pc.</li>+</ol>+++<p>(so you see for big files even if git would handle them faster you would waste massivly hard disk space) but again for pdfs a few pictures text files even some office files and stuff &lt;100mb its great and easy to do.</p>++<p>I try it in a few words, sparkleshare is like dropbox but with file history ( I think dropbox dont have that???) but because git is not designed (yet) for big files it works somewhat ok for &lt; 100mb stuff if you go very much higher &gt; 1GB it will not be optimal.</p>++<p>git annex dont saves the data itself in git but only the locations and the checksums. so its more like a adress book of your data. its a abstraction layer to your data, you can see on as many devises as you want even without no netzwerk internet connection active and only a very small hd see all your 5 Terrabyte of Data you might have, and move around directories sort around them... delete stuff you dont want if you can deside that by the name... and then  when you come back to the connection you sync your actions and it does it to the files.</p>++<p>And one big feature like joey said is that you cannot partialy load files from the repos to your device if it has as example only enough space for 1/10 of it.</p>++<p>There is another thing, but because it is "only" a abstraction layer, it is theoreticaly easy to implement extentions to save your data on anything not only git repositories...</p>++<p>Sparkleshare will switch to something else than git, maybe but then it will switch to this single protocol and stick to that. because it does not abstract stuff so hard.</p>++<p>btw there is a alternative out there it forces you not to use git as vcs but you have to use a vcs (like git) and you dont have to use the client written in mono but only a smaller python script:</p>++<p>http://www.mayrhofer.eu.org/dvcs-autosync</p>++<p>but the idea behind it is the same except this 2 points ;)</p>++<p>but many free software developers dont like mono, so the change that it gets more love from more people is not totaly unlikely.</p>++<p>So way to long post but hope that helps somebody ;)</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawn4bbuawnh-nSo9pAh8irYAcV4MQCcfdHo">Stefan</a>+</span>+++&mdash; <span class="date">Fri Sep 14 21:28:05 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-e302ee7a556894832ce98b554e0942ab">++++<div class="comment-subject">++<a href="/not.html#comment-e302ee7a556894832ce98b554e0942ab">comment 5</a>++</div>++<div class="inlinecontent">+<p>or to make it more simple ;)</p>++<p>sparkleshare is for proejects and maybe backup your documents folder</p>++<p>annex is for managing big binary files that not get modified most of the time and only added/synced or deleted.</p>++<p>hope thats on the point, try to start using it also now, but am a bit blowen away what it all can do and what not... and how to get a good use case, and mixing media-management with backup of home and thinking on solving that all with annex without having it used ever ;)</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawn4bbuawnh-nSo9pAh8irYAcV4MQCcfdHo">Stefan</a>+</span>+++&mdash; <span class="date">Fri Sep 14 21:35:06 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-6f4c86ea2e3f3350df1f34a5c1caac49">++++<div class="comment-subject">++<a href="/not.html#comment-6f4c86ea2e3f3350df1f34a5c1caac49">comment 6</a>++</div>++<div class="inlinecontent">+<p>Stefan: "annex is for managing big binary files that not get modified most of the time and only added/synced or deleted."</p>++<p>While this is true,  the kickstarter title for assistant was "Like dropbox", and dropbox makes it transparent to edit files and they work with the filesystem.+So with assistant, lock/unlock should be automated and transparent to the user. Otherwise it's confusing and not simple at all to use, and at least OSX keeps giving errors because of the way it handles aliases.+So something like sharebox is essential to be included in assistant in my opinion.</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawlatTbI0K-qydpeYHl37iseqPNvERcdIMk">Tiago</a>+</span>+++&mdash; <span class="date">Thu Sep 27 06:17:18 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-041929cac200dbd17397506fe7b961de">++++<div class="comment-subject">++<a href="/not.html#comment-041929cac200dbd17397506fe7b961de">comment 7</a>++</div>++<div class="inlinecontent">+<p>hi joey,</p>++<p>i'm excited by your project here but also confused by its direction. the kickstarter page has the header: "git-annex assistant: Like DropBox, but with your own cloud." this page says "git-annex is not a ... DropBox clone." these seem to be in direct opposition.</p>++<p>i'm looking for what is described by the header on your kickstarter page. i assume your backers are looking for the the same thing (a self hosted DropBox). for my use, dropbox is perfect, except for the fact that i have to pay a monthly fee to store my data on someone else's server when i would like to buy my own storage medium and run some open source dropbox clone on my own server.</p>++<p>can you explain more clearly what dropbox features your project lacks (/will lack)? and why where is a difference between your fundraising page and this one?</p>++<p>maybe i'm just confused by the difference between git-annex and git-annex assistant. does git-annex assistant truely aim to be a dropbox clone?</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="Signed in">++<a href="?page=l3iggs&amp;do=goto">l3iggs</a>++</span>+++&mdash; <span class="date">Sat Feb  2 23:57:05 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-113deea37a98fdc1f1ad59333c9f2dd4">++++<div class="comment-subject">++<a href="/not.html#comment-113deea37a98fdc1f1ad59333c9f2dd4">comment 8</a>++</div>++<div class="inlinecontent">+<p>It's pretty much exactly what he said:</p>++<blockquote><p>git-annex is not a filesystem or DropBox clone. However, the git-annex assistant is addressing some of the same needs in its own unique ways.</p></blockquote>++<p>The git-annex assistant is not exactly like DropBox; it's not a drop-in replacement that works exactly the way dropbox works.  But as it stands, right now, it can (like Dropbox) run in the background and make sure that all of your files in a special directory are mirrored to another place (a USB drive, or a server to which you have SSH access, or another computer on your home network, or another computer somewhere else which has access to the same USB drive from time to time, or has accesss to the same SSH server or S3 repository or....</p>++<p>It works as is but is still under heavy development and features are being added rapidly.  For example, up until a month or two ago, the files in your annex were replaced with softlinks whose content resided in a hidden directory. This caused some problems esp. on OS X where native programs don't handle softlinked files very gracefully. So Joey added an entirely new way of operating called "direct mode" which uses ordinary files, much like Dropbox does.</p>++<p>So -- what you should expect from git-annex assistant is a program which solves many of the same problems Dropbox does (keeping a set of files magically in sync across computers) but does it in its own way, which won't be <em>exactly</em> like Dropbox; it will be more flexible but might require a little learning to figure out exactly how to use it the way you want.  It's possible to get a very Dropbox-like system out of the box, especially now that you don't need to use softlinks, if you've got a place on the network you can use as a central remote repository for your files, or if you only want to synchronize two or more computers on the same local network.</p>++<p>"git-annex" itself is the plumbing used by git-annex assistant, or to put it another way, the engine that the assistant has under the hood.  Git-annex itself is extremely simple and stable but should only be used by people already familiar with the command line, perhaps even people already familiar with git.</p>++<p>That's my point of view as an enthusiastic user.  Joey may have his own perspective to share. :)</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://edheil.wordpress.com/">edheil [wordpress.com]</a>+</span>+++&mdash; <span class="date">Sun Feb  3 23:17:06 2013</span>+</div>++++<div style="clear: both"></div>+</div>+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./links/other_stuff.html">links/other stuff</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:45 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:45 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/preferred_content.html view
@@ -0,0 +1,631 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>preferred content</title>++<link rel="stylesheet" href="style.css" type="text/css" />++<link rel="stylesheet" href="local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="./index.html">git-annex</a>/ ++</span>+<span class="title">+preferred content++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="./install.html">install</a></li>+<li><a href="./assistant.html">assistant</a></li>+<li><a href="./walkthrough.html">walkthrough</a></li>+<li><a href="./tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="./comments.html">comments</a></li>+<li><a href="./contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>git-annex tries to ensure that the configured number of <a href="./copies.html">copies</a> of your+data always exist, and leaves it up to you to use commands like <code>git annex+get</code> and <code>git annex drop</code> to move the content to the repositories you want+to contain it. But sometimes, it can be good to have more fine-grained+control over which repositories prefer to have which content. Configuring+this allows <code>git annex get --auto</code>, <code>git annex drop --auto</code>, etc to do+smarter things.</p>++<p>Currently, preferred content settings can only be edited using <code>git+annex vicfg</code>. Each repository can have its own settings, and other+repositories may also try to honor those settings. So there's no local+<code>.git/config</code> setting it.</p>++<p>The idea is that you write an expression that files are matched against.+If a file matches, it's preferred to have its content stored in the+repository. If it doesn't, it's preferred to drop its content from+the repository (if there are enough copies elsewhere).</p>++<p>The expressions are very similar to the file matching options documented+on the <a href="./git-annex.html">git-annex</a> man page. At the command line, you can use those+options in commands like this:</p>++<pre><code>git annex get --include='*.mp3' --and -'(' --not --largerthan=100mb -')'+</code></pre>++<p>The equivilant preferred content expression looks like this:</p>++<pre><code>include=*.mp3 and (not largerthan=100mb)+</code></pre>++<p>So, just remove the dashes, basically. However, there are some differences+from the command line options to keep in mind:</p>++<h3>difference: file matching</h3>++<p>While --include and --exclude match files relative to the current+directory, preferred content expressions always match files relative to the+top of the git repository. Perhaps you put files into <code>archive</code> directories+when you're done with them. Then you could configure your laptop to prefer+to not retain those files, like this:</p>++<pre><code>exclude=*/archive/*+</code></pre>++<h3>difference: no "in="</h3>++<p>Preferred content expressions have no direct equivilant to <code>--in</code>.</p>++<p>Often, it's best to add repositories to groups, and match against+the groups in a preferred content expression. So rather than+<code>--in=usbdrive</code>, put all the USB drives into a "transfer" group,+and use "copies=transfer:1"</p>++<h3>difference: dropping</h3>++<p>To decide if content should be dropped, git-annex evaluates the preferred+content expression under the assumption that the content has <em>already</em> been+dropped. If the content would not be preferred then, the drop can be done.+So, for example, <code>copies=2</code> in a preferred content expression lets+content be dropped only when there are currently 3 copies of it, including+the repo it's being dropped from. This is different than running <code>git annex+drop --copies=2</code>, which will drop files that currently have 2 copies.</p>++<h3>difference: "present"</h3>++<p>There's a special "present" keyword you can use in a preferred content+expression. This means that content is preferred if it's present,+and not otherwise. This leaves it up to you to use git-annex manually+to move content around. You can use this to avoid preferred content+settings from affecting a subdirectory. For example:</p>++<pre><code>auto/* or (include=ad-hoc/* and present)+</code></pre>++<p>Note that <code>not present</code> is a very bad thing to put in a preferred content+expression. It'll make it prefer to get content that's not present, and+drop content that is present! Don't go there..</p>++<h3>difference: "inpreferreddir"</h3>++<p>There's a special "inpreferreddir" keyword you can use in a+preferred content expression of a special remote. This means that the+content is preferred if it's in a directory (located anywhere in the tree)+with a special name.</p>++<p>The name of the directory can be configured using+<code>git annex initremote $remote preferreddir=$dirname</code></p>++<p>(If no directory name is configured, it uses "public" by default.)</p>++<h2>standard expressions</h2>++<p>git-annex comes with some standard preferred content expressions, that can+be used with repositories that are in some pre-defined groups. To make a+repository use one of these, just set its preferred content expression+to "standard", and put it in one of these groups.</p>++<p>(Note that most of these standard expressions also make the repository+prefer any content that is only currently available on untrusted and+dead repositories. So if an untrusted repository gets connected,+any repository that can will back it up.)</p>++<h3>client</h3>++<p>All content is preferred, unless it's for a file in a "archive" directory,+which has reached an archive repository.</p>++<p><code>((exclude=*/archive/* and exclude=archive/*) or (not (copies=archive:1 or copies=smallarchive:1))) or (not copies=semitrusted+:1)</code></p>++<h3>transfer</h3>++<p>Use for repositories that are used to transfer data between other+repositories, but do not need to retain data themselves. For+example, a repository on a server, or in the cloud, or a small+USB drive used in a sneakernet.</p>++<p>The preferred content expression for these causes them to get and retain+data until all clients have a copy.</p>++<p><code>(not (inallgroup=client and copies=client:2) and ($client)</code></p>++<p>The "copies=client:2" part of the above handles the case where+there is only one client repository. It makes a transfer repository+speculatively  prefer content in this case, even though it as of yet+has nowhere to transfer it to. Presumably, another client repository+will be added later.</p>++<h3>backup</h3>++<p>All content is preferred.</p>++<p><code>include=*</code></p>++<h3>incremental backup</h3>++<p>Only prefers content that's not already backed up to another backup+or incremental backup repository.</p>++<p><code>(include=* and (not copies=backup:1) and (not copies=incrementalbackup:1)) or (not copies=semitrusted+:1)</code></p>++<h3>small archive</h3>++<p>Only prefers content that's located in an "archive" directory, and+only if it's not already been archived somewhere else.</p>++<p><code>((include=*/archive/* or include=archive/*) and not (copies=archive:1 or copies=smallarchive:1)) or (not copies=semitrusted+:1)</code></p>++<h3>full archive</h3>++<p>All content is preferred, unless it's already been archived somewhere else.</p>++<p><code>(not (copies=archive:1 or copies=smallarchive:1)) or (not copies=semitrusted+:1)</code></p>++<p>Note that if you want to archive multiple copies (not a bad idea!),+you should instead configure all your archive repositories with a+version of the above preferred content expression with a larger+number of copies.</p>++<h3>source</h3>++<p>Use for repositories where files are often added, but that do not need to+retain files for local use. For example, a repository on a camera, where+it's desirable to remove photos as soon as they're transferred elsewhere.</p>++<p>The preferred content expression for these causes them to only retain+data until a copy has been sent to some other repository.</p>++<p><code>not (copies=1)</code></p>++<h3>manual</h3>++<p>This gives you nearly full manual control over what content is stored in the+repository. This allows using the <a href="./assistant.html">assistant</a> without it trying to keep a+local copy of every file. Instead, you can manually run <code>git annex get</code>,+<code>git annex drop</code>, etc to manage content. Only content that is present+is preferred.</p>++<p>The exception to this manual control is that content that a client+repository would not want is not preferred. So, files in archive+directories are not preferred once their content has+reached an archive repository.</p>++<p><code>present and ($client)</code></p>++<h3>public</h3>++<p>This is used for publishing information to a repository that can be+publically accessed. Only files in a directory with a particular name+will be published. (The directory can be located anywhere in the+repository.)</p>++<p>The name of the directory can be configured using+<code>git annex initremote $remote preferreddir=$dirname</code></p>++<p><code>inpreferreddir</code></p>++<h3>unwanted</h3>++<p>Use for repositories that you don't want to exist. This will result+in any content on them being moved away to other repositories. (Works+best when the unwanted repository is also marked as untrusted or dead.)</p>++<p><code>exclude=*</code></p>++</div>++++<div id="comments">+<div  class="feedlink">+++</div>+<div class="comment" id="comment-7aa7f7b86e46f2d985d49cc199f4df8c">++++<div class="comment-subject">++<a href="/preferred_content.html#comment-7aa7f7b86e46f2d985d49cc199f4df8c">Interplay with numcopies</a>++</div>++<div class="inlinecontent">+<p>How does the preferred content settings interfere with the numcopies setting?</p>++<p>I could not get behind it. E.g. a case I do not unterstand:</p>++<p>I have a preferred setting evaluating to true and still</p>++<pre><code>git annex get --auto+</code></pre>++<p>does nothing, if the number of copies produced would surpass the numcopies setting.</p>++<p>Thx</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawlgyVag95OnpvSzQofjyX0WjW__MOMKsl0">Sehr</a>+</span>+++&mdash; <span class="date">Wed Dec  5 16:41:26 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-8a48857f456119600a50324c80c2f638">++++<div class="comment-subject">++<a href="/preferred_content.html#comment-8a48857f456119600a50324c80c2f638">comment 2</a>++</div>++<div class="inlinecontent">+Yeah, that didn't make sense. I've fixed it, so it gets files if needed for either numcopies or preferred content.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Thu Dec  6 13:24:29 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-e2601538e739674cc274918ebeb2e6c4">++++<div class="comment-subject">++<a href="/preferred_content.html#comment-e2601538e739674cc274918ebeb2e6c4">comment 4</a>++</div>++<div class="inlinecontent">+<p>Built a new copy of git-annex yesterday.  I have a "client" on my macbook, and two "backup"s, one on an external HD, one on an ssh git remote.</p>++<p>git annex get --auto works beautifully!</p>++<p>It doesn't seem to work for copying content <em>to</em> a place where it's needed, though.</p>++<p>If I drop a file from my "backup" USB drive, and then go back to my macbook and do a "git annex sync" and "git annex copy --to=usbdrive --auto" it does not send the file out to the USB drive, even though by preferred content settings, the USB drive should "want" the file because it's a backup drive and it wants all content.</p>++<p>Similarly, if I add a new file on my macbook and then do a "git annex copy --to=usbdrive auto" it does not get copied to the USB drive.</p>++<p>Is this missing functionality, or should the preferred content setting for remotes only affect the assistant?</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://edheil.wordpress.com/">edheil [wordpress.com]</a>+</span>+++&mdash; <span class="date">Fri Dec  7 16:24:18 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-a669d042fd6f184e78e9798a738e9327">++++<div class="comment-subject">++<a href="/preferred_content.html#comment-a669d042fd6f184e78e9798a738e9327">comment 4</a>++</div>++<div class="inlinecontent">+It was a bug in the backup group's preferred content pagespec, introduced by the changes I made to fix the previous problem. Now fixed.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Mon Dec 10 15:46:01 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-5275886ac700e220459b5eccbfff274d">++++<div class="comment-subject">++<a href="/preferred_content.html#comment-5275886ac700e220459b5eccbfff274d">comment 5</a>++</div>++<div class="inlinecontent">+thanks!++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://edheil.wordpress.com/">edheil [wordpress.com]</a>+</span>+++&mdash; <span class="date">Tue Dec 11 12:03:04 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-b7ec0a480dc84c0cea60c9c005df30d4">++++<div class="comment-subject">++<a href="/preferred_content.html#comment-b7ec0a480dc84c0cea60c9c005df30d4">comment 6</a>++</div>++<div class="inlinecontent">+<p>Is there a way to change these definitions for a given annex?</p>++<p>ie: in this repo make "client" mean</p>++<pre><code>present and exclude=*/archive/* and exclude=archive/*+</code></pre>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawmRFKwny4rArBaz-36xTcsJYqKIgdDaw5Q">Andrew</a>+</span>+++&mdash; <span class="date">Wed Jan  9 23:00:52 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-c6afb7ede18e5b18a5135bf51962ce33">++++<div class="comment-subject">++<a href="/preferred_content.html#comment-c6afb7ede18e5b18a5135bf51962ce33">comment 7</a>++</div>++<div class="inlinecontent">+Sorry, there's not. The expressions used for "standard" are built in.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Wed Jan  9 23:51:38 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-2f220f751e429dea031764b51d5e6133">++++<div class="comment-subject">++<a href="/preferred_content.html#comment-2f220f751e429dea031764b51d5e6133">comment 8</a>++</div>++<div class="inlinecontent">+<p>By way of a feature request: Maybe the way to do this is to have an additional keyword like "config" or "repo" that allows you to use vicfg and/or git config to set alternative rules and even additional group names.</p>++<p>In git config:</p>++<pre><code>annex.groups.&lt;groupname&gt; = present and exclude=*/archive/* and exclude=archive/*+</code></pre>++<p>in vicfg:</p>++<pre><code># (for passport)+#trust A0637025-ED47-4F95-A887-346121F1B4A0 = semitrusted++# (for passport)+group A0637025-ED47-4F95-A887-346121F1B4A0 = transfer++# (for passport)+preferred-content A0637025-ED47-4F95-A887-346121F1B4A0 = repo++# (for transfer)+group-content transfer = present and exclude=*/archive/* and exclude=archive/*+</code></pre>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawmRFKwny4rArBaz-36xTcsJYqKIgdDaw5Q">Andrew</a>+</span>+++&mdash; <span class="date">Thu Jan 10 06:24:28 2013</span>+</div>++++<div style="clear: both"></div>+</div>+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./walkthrough/automatically_managing_content.html">walkthrough/automatically managing content</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:45 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:45 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/related_software.html view
@@ -0,0 +1,140 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>related software</title>++<link rel="stylesheet" href="style.css" type="text/css" />++<link rel="stylesheet" href="local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="./index.html">git-annex</a>/ ++</span>+<span class="title">+related software++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="./install.html">install</a></li>+<li><a href="./assistant.html">assistant</a></li>+<li><a href="./walkthrough.html">walkthrough</a></li>+<li><a href="./tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="./comments.html">comments</a></li>+<li><a href="./contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>Some folks have built other software on top of git-annex, or that is+designed to interoperate with it.</p>++<ul>+<li>The <a href="./assistant.html">git-annex assistant</a> is included in git-annex,+and extends its use cases into new territory.</li>+<li><a href="https://github.com/rubiojr/git-annex-watcher">git-annex-watcher</a>+is a status icon for your desktop.</li>+<li><span class="createlink">gadu - git-annex disk usage</span> is a du like utility that+is git-annex aware.</li>+<li><a href="http://hackage.haskell.org/package/sizes">sizes</a> is another du-like+utility, with a <code>-A</code> switch that enables git-annex support.</li>+</ul>+++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./links/other_stuff.html">links/other stuff</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:45 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:45 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/repomap.png view

binary file changed (absent → 67316 bytes)

+ debian/git-annex/usr/share/doc/git-annex/html/scalability.html view
@@ -0,0 +1,171 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>scalability</title>++<link rel="stylesheet" href="style.css" type="text/css" />++<link rel="stylesheet" href="local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="./index.html">git-annex</a>/ ++</span>+<span class="title">+scalability++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="./install.html">install</a></li>+<li><a href="./assistant.html">assistant</a></li>+<li><a href="./walkthrough.html">walkthrough</a></li>+<li><a href="./tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="./comments.html">comments</a></li>+<li><a href="./contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>git-annex is designed for scalability. The key points are:</p>++<ul>+<li><p>Arbitrarily large files can be managed. The only constraint+on file size are how large a file your filesystem can hold.</p>++<p>While git-annex does checksum files by default, there+is a <a href="./backends.html">WORM backend</a> available that avoids the checksumming+overhead, so you can add new, enormous files, very fast. This also+allows it to be used on systems with very slow disk IO.</p></li>+<li><p>Memory usage should be constant. This is a "should", because there+can sometimes be leaks (and this is one of haskell's weak spots),+but git-annex is designed so that it does not need to hold all+the details about your repository in memory.</p>++<p>The one exception is that <span class="createlink">git-annex unused eats memory</span>,+because it <em>does</em> need to hold the whole repo state in memory. But+that is still considered a bug, and hoped to be solved one day.+Luckily, that command is not often used.</p></li>+<li><p>Many files can be managed. The limiting factor is git's own+limitations in scaling to repositories with a lot of files, and as git+improves this will improve. Scaling to hundreds of thousands of files+is not a problem, scaling beyond that and git will start to get slow.</p>++<p>To some degree, git-annex works around inefficiencies in git; for+example it batches input sent to certain git commands that are slow+when run in an enormous repository.</p></li>+<li><p>It can use as much, or as little bandwidth as is available. In+particular, any interrupted file transfer can be resumed by git-annex.</p></li>+</ul>+++<h2>scalability tips</h2>++<ul>+<li><p>If the files are so big that checksumming becomes a bottleneck, consider+using the <a href="./backends.html">WORM backend</a>. You can always <code>git annex migrate</code>+files to a checksumming backend later on.</p></li>+<li><p>If you're adding a huge number of files at once (hundreds of thousands),+you'll soon notice that git-annex periodically stops and say+"Recording state in git" while it runs a <code>git add</code> command that+becomes increasingly expensive. Consider adjusting the <code>annex.queuesize</code>+to a higher value, at the expense of it using more memory.</p></li>+</ul>+++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./links/the_details.html">links/the details</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:45 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:45 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/sidebar.html view
@@ -0,0 +1,133 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>sidebar</title>++<link rel="stylesheet" href="style.css" type="text/css" />++<link rel="stylesheet" href="local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="./index.html">git-annex</a>/ ++</span>+<span class="title">+sidebar++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="./install.html">install</a></li>+<li><a href="./assistant.html">assistant</a></li>+<li><a href="./walkthrough.html">walkthrough</a></li>+<li><a href="./tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="./comments.html">comments</a></li>+<li><a href="./contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="./install.html">install</a></li>+<li><a href="./assistant.html">assistant</a></li>+<li><a href="./walkthrough.html">walkthrough</a></li>+<li><a href="./tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="./comments.html">comments</a></li>+<li><a href="./contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">++++++++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:45 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:45 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/sitemap.html view
@@ -0,0 +1,429 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>sitemap</title>++<link rel="stylesheet" href="style.css" type="text/css" />++<link rel="stylesheet" href="local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="./index.html">git-annex</a>/ ++</span>+<span class="title">+sitemap++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="./install.html">install</a></li>+<li><a href="./assistant.html">assistant</a></li>+<li><a href="./walkthrough.html">walkthrough</a></li>+<li><a href="./tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="./comments.html">comments</a></li>+<li><a href="./contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<div class="map">+<ul>+<li><a href="./assistant.html" class="mapitem">assistant</a>+<ul>+<li><a href="./assistant/archival_walkthrough.html" class="mapitem">archival walkthrough</a>+</li>+<li><a href="./assistant/local_pairing_walkthrough.html" class="mapitem">local pairing walkthrough</a>+</li>+<li><a href="./assistant/quickstart.html" class="mapitem">quickstart</a>+</li>+<li><a href="./assistant/release_notes.html" class="mapitem">release notes</a>+</li>+<li><a href="./assistant/remote_sharing_walkthrough.html" class="mapitem">remote sharing walkthrough</a>+</li>+<li><a href="./assistant/share_with_a_friend_walkthrough.html" class="mapitem">share with a friend walkthrough</a>+</li>+<li><a href="./assistant/thanks.html" class="mapitem">thanks</a>+</li>+</ul>+</li>+<li><a href="./backends.html" class="mapitem">backends</a>+</li>+<li><a href="./bare_repositories.html" class="mapitem">bare repositories</a>+</li>+<li><a href="./coding_style.html" class="mapitem">coding style</a>+</li>+<li><a href="./comments.html" class="mapitem">comments</a>+</li>+<li><a href="./contact.html" class="mapitem">contact</a>+</li>+<li><a href="./copies.html" class="mapitem">copies</a>+</li>+<li><a href="./design.html" class="mapitem">design</a>+<ul>+<li><a href="./design/assistant.html" class="mapitem">assistant</a>+<ul>+<li><a href="./design/assistant/OSX.html" class="mapitem">OSX</a>+</li>+<li><a href="./design/assistant/android.html" class="mapitem">android</a>+</li>+<li><a href="./design/assistant/cloud.html" class="mapitem">cloud</a>+</li>+<li><a href="./design/assistant/configurators.html" class="mapitem">configurators</a>+</li>+<li><a href="./design/assistant/deltas.html" class="mapitem">deltas</a>+</li>+<li><a href="./design/assistant/desymlink.html" class="mapitem">desymlink</a>+</li>+<li><a href="./design/assistant/encrypted_git_remotes.html" class="mapitem">encrypted git remotes</a>+</li>+<li><a href="./design/assistant/inotify.html" class="mapitem">inotify</a>+</li>+<li><a href="./design/assistant/leftovers.html" class="mapitem">leftovers</a>+</li>+<li><a href="./design/assistant/more_cloud_providers.html" class="mapitem">more cloud providers</a>+</li>+<li><a href="./design/assistant/pairing.html" class="mapitem">pairing</a>+</li>+<li><a href="./design/assistant/partial_content.html" class="mapitem">partial content</a>+</li>+<li><a href="./design/assistant/polls.html" class="mapitem">polls</a>+<ul>+<li><a href="./design/assistant/polls/Android.html" class="mapitem">Android</a>+</li>+<li><a href="./design/assistant/polls/Android_default_directory.html" class="mapitem">Android default directory</a>+</li>+<li><a href="./design/assistant/polls/goals_for_April.html" class="mapitem">goals for April</a>+</li>+<li><a href="./design/assistant/polls/prioritizing_special_remotes.html" class="mapitem">prioritizing special remotes</a>+</li>+<li><a href="./design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant.html" class="mapitem">what is preventing me from using git-annex assistant</a>+</li>+</ul>+</li>+<li><a href="./design/assistant/progressbars.html" class="mapitem">progressbars</a>+</li>+<li><a href="./design/assistant/rate_limiting.html" class="mapitem">rate limiting</a>+</li>+<li><a href="./design/assistant/syncing.html" class="mapitem">syncing</a>+</li>+<li><a href="./design/assistant/transfer_control.html" class="mapitem">transfer control</a>+</li>+<li><a href="./design/assistant/webapp.html" class="mapitem">webapp</a>+</li>+<li><a href="./design/assistant/windows.html" class="mapitem">windows</a>+</li>+<li><a href="./design/assistant/xmpp.html" class="mapitem">xmpp</a>+</li>+</ul>+</li>+<li><a href="./design/encryption.html" class="mapitem">encryption</a>+</li>+</ul>+</li>+<li><a href="./direct_mode.html" class="mapitem">direct mode</a>+</li>+<li><a href="./distributed_version_control.html" class="mapitem">distributed version control</a>+</li>+<li><a href="./download.html" class="mapitem">download</a>+</li>+<li><a href="./encryption.html" class="mapitem">encryption</a>+</li>+<li><a href="./feeds.html" class="mapitem">feeds</a>+<li><span class="createlink">footer</span>+<ul>+</li>+<li><a href="./footer/column_a.html" class="mapitem">column a</a>+</li>+<li><a href="./footer/column_b.html" class="mapitem">column b</a>+</li>+</ul>+</li>+<li><a href="./future_proofing.html" class="mapitem">future proofing</a>+</li>+<li><a href="./git-annex.html" class="mapitem">git-annex</a>+</li>+<li><a href="./git-annex-shell.html" class="mapitem">git-annex-shell</a>+</li>+<li><a href="./git-union-merge.html" class="mapitem">git-union-merge</a>+</li>+<li><a href="./how_it_works.html" class="mapitem">how it works</a>+</li>+<li><a href="./index.html" class="mapitem">index</a>+</li>+<li><a href="./install.html" class="mapitem">install</a>+<ul>+<li><a href="./install/Android.html" class="mapitem">Android</a>+</li>+<li><a href="./install/ArchLinux.html" class="mapitem">ArchLinux</a>+</li>+<li><a href="./install/Debian.html" class="mapitem">Debian</a>+</li>+<li><a href="./install/Fedora.html" class="mapitem">Fedora</a>+</li>+<li><a href="./install/FreeBSD.html" class="mapitem">FreeBSD</a>+</li>+<li><a href="./install/Gentoo.html" class="mapitem">Gentoo</a>+</li>+<li><a href="./install/Linux_standalone.html" class="mapitem">Linux standalone</a>+</li>+<li><a href="./install/NixOS.html" class="mapitem">NixOS</a>+</li>+<li><a href="./install/OSX.html" class="mapitem">OSX</a>+<ul>+<li><a href="./install/OSX/old_comments.html" class="mapitem">old comments</a>+</li>+</ul>+</li>+<li><a href="./install/ScientificLinux5.html" class="mapitem">ScientificLinux5</a>+</li>+<li><a href="./install/Ubuntu.html" class="mapitem">Ubuntu</a>+</li>+<li><a href="./install/cabal.html" class="mapitem">cabal</a>+</li>+<li><a href="./install/fromscratch.html" class="mapitem">fromscratch</a>+</li>+<li><a href="./install/openSUSE.html" class="mapitem">openSUSE</a>+</li>+</ul>+</li>+<li><a href="./internals.html" class="mapitem">internals</a>+<ul>+<li><a href="./internals/hashing.html" class="mapitem">hashing</a>+</li>+<li><a href="./internals/key_format.html" class="mapitem">key format</a>+</li>+</ul>+</li>+<li><a href="./license.html" class="mapitem">license</a>+<li><span class="createlink">links</span>+<ul>+</li>+<li><a href="./links/key_concepts.html" class="mapitem">key concepts</a>+</li>+<li><a href="./links/other_stuff.html" class="mapitem">other stuff</a>+</li>+<li><a href="./links/the_details.html" class="mapitem">the details</a>+</li>+</ul>+</li>+<li><a href="./location_tracking.html" class="mapitem">location tracking</a>+</li>+<li><a href="./meta.html" class="mapitem">meta</a>+</li>+<li><a href="./news.html" class="mapitem">news</a>+</li>+<li><a href="./not.html" class="mapitem">not</a>+</li>+<li><a href="./preferred_content.html" class="mapitem">preferred content</a>+</li>+<li><a href="./related_software.html" class="mapitem">related software</a>+</li>+<li><a href="./scalability.html" class="mapitem">scalability</a>+</li>+<li><a href="./sidebar.html" class="mapitem">sidebar</a>+</li>+<li><span class="selflink">sitemap</span>+</li>+<li><a href="./special_remotes.html" class="mapitem">special remotes</a>+<ul>+<li><a href="./special_remotes/S3.html" class="mapitem">S3</a>+</li>+<li><a href="./special_remotes/bup.html" class="mapitem">bup</a>+</li>+<li><a href="./special_remotes/directory.html" class="mapitem">directory</a>+</li>+<li><a href="./special_remotes/glacier.html" class="mapitem">glacier</a>+</li>+<li><a href="./special_remotes/hook.html" class="mapitem">hook</a>+</li>+<li><a href="./special_remotes/rsync.html" class="mapitem">rsync</a>+</li>+<li><a href="./special_remotes/web.html" class="mapitem">web</a>+</li>+<li><a href="./special_remotes/webdav.html" class="mapitem">webdav</a>+</li>+<li><a href="./special_remotes/xmpp.html" class="mapitem">xmpp</a>+</li>+</ul>+</li>+<li><a href="./summary.html" class="mapitem">summary</a>+</li>+<li><a href="./sync.html" class="mapitem">sync</a>+<li><span class="createlink">templates</span>+<ul>+</li>+<li><a href="./templates/bugtemplate.html" class="mapitem">bugtemplate</a>+</li>+</ul>+</li>+<li><a href="./testimonials.html" class="mapitem">testimonials</a>+</li>+<li><a href="./tips.html" class="mapitem">tips</a>+</li>+<li><a href="./transferring_data.html" class="mapitem">transferring data</a>+</li>+<li><a href="./trust.html" class="mapitem">trust</a>+</li>+<li><a href="./upgrades.html" class="mapitem">upgrades</a>+<ul>+<li><a href="./upgrades/SHA_size.html" class="mapitem">SHA size</a>+</li>+</ul>+<li><span class="createlink">use case</span>+<ul>+</li>+<li><a href="./use_case/Alice.html" class="mapitem">Alice</a>+</li>+<li><a href="./use_case/Bob.html" class="mapitem">Bob</a>+</li>+</ul>+</li>+<li><a href="./users.html" class="mapitem">users</a>+</li>+<li><a href="./videos.html" class="mapitem">videos</a>+</li>+<li><a href="./walkthrough.html" class="mapitem">walkthrough</a>+<ul>+<li><a href="./walkthrough/adding_a_remote.html" class="mapitem">adding a remote</a>+</li>+<li><a href="./walkthrough/adding_files.html" class="mapitem">adding files</a>+</li>+<li><a href="./walkthrough/automatically_managing_content.html" class="mapitem">automatically managing content</a>+</li>+<li><a href="./walkthrough/backups.html" class="mapitem">backups</a>+</li>+<li><a href="./walkthrough/creating_a_repository.html" class="mapitem">creating a repository</a>+</li>+<li><a href="./walkthrough/fsck:_verifying_your_data.html" class="mapitem">fsck: verifying your data</a>+</li>+<li><a href="./walkthrough/fsck:_when_things_go_wrong.html" class="mapitem">fsck: when things go wrong</a>+</li>+<li><a href="./walkthrough/getting_file_content.html" class="mapitem">getting file content</a>+</li>+<li><a href="./walkthrough/modifying_annexed_files.html" class="mapitem">modifying annexed files</a>+</li>+<li><a href="./walkthrough/more.html" class="mapitem">more</a>+</li>+<li><a href="./walkthrough/moving_file_content_between_repositories.html" class="mapitem">moving file content between repositories</a>+</li>+<li><a href="./walkthrough/removing_files.html" class="mapitem">removing files</a>+</li>+<li><a href="./walkthrough/removing_files:_When_things_go_wrong.html" class="mapitem">removing files: When things go wrong</a>+</li>+<li><a href="./walkthrough/renaming_files.html" class="mapitem">renaming files</a>+</li>+<li><a href="./walkthrough/syncing.html" class="mapitem">syncing</a>+</li>+<li><a href="./walkthrough/transferring_files:_When_things_go_wrong.html" class="mapitem">transferring files: When things go wrong</a>+</li>+<li><a href="./walkthrough/unused_data.html" class="mapitem">unused data</a>+</li>+<li><a href="./walkthrough/using_bup.html" class="mapitem">using bup</a>+</li>+<li><a href="./walkthrough/using_ssh_remotes.html" class="mapitem">using ssh remotes</a>+</li>+</ul>+</li>+</ul>+</div>+++++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./links/other_stuff.html">links/other stuff</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:45 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:45 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/special_remotes.html view
@@ -0,0 +1,573 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>special remotes</title>++<link rel="stylesheet" href="style.css" type="text/css" />++<link rel="stylesheet" href="local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="./index.html">git-annex</a>/ ++</span>+<span class="title">+special remotes++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="./install.html">install</a></li>+<li><a href="./assistant.html">assistant</a></li>+<li><a href="./walkthrough.html">walkthrough</a></li>+<li><a href="./tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="./comments.html">comments</a></li>+<li><a href="./contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>git-annex can transfer data to and from configured git remotes.+Normally those remotes are normal git repositories (bare and non-bare;+local and remote), that store the file contents in their own git-annex+directory.</p>++<p>But, git-annex also extends git's concept of remotes, with these special+types of remotes. These can be used just like any normal remote by git-annex.+They cannot be used by other git commands though.</p>++<ul>+<li><a href="./special_remotes/S3.html">S3</a> (Amazon S3, and other compatible services)</li>+<li><a href="./special_remotes/glacier.html">Amazon Glacier</a></li>+<li><a href="./special_remotes/bup.html">bup</a></li>+<li><a href="./special_remotes/directory.html">directory</a></li>+<li><a href="./special_remotes/rsync.html">rsync</a></li>+<li><a href="./special_remotes/webdav.html">webdav</a></li>+<li><a href="./special_remotes/web.html">web</a></li>+<li><a href="./special_remotes/xmpp.html">xmpp</a></li>+<li><a href="./special_remotes/hook.html">hook</a></li>+</ul>+++<p>The above special remotes can be used to tie git-annex+into many cloud services. Here are specific instructions+for various cloud things:</p>++<ul>+<li><a href="./tips/using_Amazon_S3.html">using Amazon S3</a></li>+<li><a href="./tips/using_Amazon_Glacier.html">using Amazon Glacier</a></li>+<li><a href="./tips/Internet_Archive_via_S3.html">Internet Archive via S3</a></li>+<li><span class="createlink">tahoe-lafs</span></li>+<li><a href="./tips/using_box.com_as_a_special_remote.html">using box.com as a special remote</a></li>+<li><span class="createlink">special remote for IMAP</span></li>+</ul>+++<h2>Unused content on special remotes</h2>++<p>Over time, special remotes can accumulate file content that is no longer+referred to by files in git. Normally, unused content in the current+repository is found by running <code>git annex unused</code>. To detect unused content+on special remotes, instead use <code>git annex unused --from</code>. Example:</p>++<pre><code>$ git annex unused --from mys3+unused mys3 (checking for unused data...) +  Some annexed data on mys3 is not used by any files in this repository.+    NUMBER  KEY+    1       WORM-s3-m1301674316--foo+  (To see where data was previously used, try: git log --stat -S'KEY')+  (To remove unwanted data: git-annex dropunused --from mys3 NUMBER)+$ git annex dropunused --from mys3 1+dropunused 12948 (from mys3...) ok+</code></pre>++</div>++++<div id="comments">+<div  class="feedlink">+++</div>+<div class="comment" id="comment-f1021e7fb1ba30235004bab75f81104a">++++<div class="comment-subject">++<a href="/special_remotes.html#comment-f1021e7fb1ba30235004bab75f81104a">MediaFire</a>++</div>++<div class="inlinecontent">+MediaFire offers 50GB of free storage (max size 200MB). It would be great to support it as a new special remote.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawk9nck8WX8-ADF3Fdh5vFo4Qrw1I_bJcR8">Jon Ander</a>+</span>+++&mdash; <span class="date">Thu Jan 17 08:17:54 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-f3effaa58c166dcc041a25405710e882">++++<div class="comment-subject">++<a href="/special_remotes.html#comment-f3effaa58c166dcc041a25405710e882">comment 2</a>++</div>++<div class="inlinecontent">+Mediafire does not appear to offer any kind of API for its storage.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Thu Jan 17 12:44:25 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-31e23b0e9a5c50eb6ef98c6617b29fa9">++++<div class="comment-subject">++<a href="/special_remotes.html#comment-31e23b0e9a5c50eb6ef98c6617b29fa9">MediaFire REST API</a>++</div>++<div class="inlinecontent">+Wouldn't this be enough? http://developers.mediafire.com/index.php/REST_API++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawk9nck8WX8-ADF3Fdh5vFo4Qrw1I_bJcR8">Jon Ander</a>+</span>+++&mdash; <span class="date">Thu Jan 17 12:53:41 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-b8f280b34a06a44750b66072ac845b05">++++<div class="comment-subject">++<a href="/special_remotes.html#comment-b8f280b34a06a44750b66072ac845b05">JABOF special remote</a>++</div>++<div class="inlinecontent">+<p>Similar to a JABOD, this would be Just A Bunch Of Files. I already have a NAS with a file structure conducive to serving media to my TV. However, it's not capable (currently) of running git-annex locally. It would be great to be able to tell annex the path to a file there as a remote much like a web remote from "git annex addurl". That way I can safely drop all the files I took with me on my trip, while annex still verifies and counts the file on the NAS as a location.</p>++<p>There are some interesting things to figure out for this to be efficient. For example, SHAs of the files. Maybe store that in a metadata file in the directory of the files? Or perhaps use the WORM backend by default?</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawmRFKwny4rArBaz-36xTcsJYqKIgdDaw5Q">Andrew</a>+</span>+++&mdash; <span class="date">Sat Jan 19 04:34:32 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-0b407b8fe22081799d0a62b6ff310897">++++<div class="comment-subject">++<a href="/special_remotes.html#comment-0b407b8fe22081799d0a62b6ff310897">comment 5</a>++</div>++<div class="inlinecontent">+The web special remote is recently able to use file:// URL's, so you can just point to files on some arbitrary storage if you want to.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Sat Jan 19 12:05:13 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-b7ca8f0707188bb455c1deb542b404be">++++<div class="comment-subject">++<a href="/special_remotes.html#comment-b7ca8f0707188bb455c1deb542b404be">Rackspace US/UK</a>++</div>++<div class="inlinecontent">+It'd be awesome to be able to use Rackspace as remote storage as an alternative to S3, I would submit a patch, but know 0 Haskell :D++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawlBia1J9-PoXgZYj2LASf7Bs__IqK3T8qQ">Greg</a>+</span>+++&mdash; <span class="date">Wed Jan 30 07:33:12 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-60556d1f805cf5682d0dfaeee07463d6">++++<div class="comment-subject">++<a href="/special_remotes.html#comment-60556d1f805cf5682d0dfaeee07463d6">Rapidshare</a>++</div>++<div class="inlinecontent">+<p>Would it be possible to support Rapidshare as a new special remote?+They offer unlimited storage for 6-10€ per month. It would be great for larger backups.+Their API can be found here: http://images.rapidshare.com/apidoc.txt</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawn-UoTjMBsVh6q4HNViGwJi-5FNaCVQB7E">Nico</a>+</span>+++&mdash; <span class="date">Sat Feb  2 12:49:58 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-5d059e69f65ebdf284be57fe4fcda77b">++++<div class="comment-subject">++<a href="/special_remotes.html#comment-5d059e69f65ebdf284be57fe4fcda77b">&#x27;webhook&#x27; special remote?</a>++</div>++<div class="inlinecontent">+<p>Is there any chance a special remote that functions like a hybrid of 'web' and 'hook'? At least in theory, it should be relatively simple, since it would only support 'get' and the only meaningful parameters to pass would be the URL and the output file name.</p>++<p>Maybe make it something like git config annex.myprogram-webhook 'myprogram $ANNEX_URL $ANNEX_FILE', and fetching could work by adding a --handler or --type parameter to addurl.</p>++<p>The use case here is anywhere that simple 'fetch the file over HTTP/FTP/etc' isn't workable - maybe it's on rapidshare and you need to use plowshare to download it; maybe it's a youtube video and you want to use youtube-dl, maybe it's a chapter of a manga and you want to turn it into a CBZ file when you fetch it.</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawlRThEwuPnr8_bcuuCTQ0rQd3w6AfeMiLY">Alex</a>+</span>+++&mdash; <span class="date">Sun Feb 24 11:05:27 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-59648c5eed99b8979c1c70ee90c09f0e">++++<div class="comment-subject">++<a href="/special_remotes.html#comment-59648c5eed99b8979c1c70ee90c09f0e">comment 9</a>++</div>++<div class="inlinecontent">+A <em>ridiculously</em> cool possibility would be to allow them to match against URLs and then handle those (youtube-dl for youtube video URLs, for instance), but that would be additional work on your end and isn't really necessary.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawlRThEwuPnr8_bcuuCTQ0rQd3w6AfeMiLY">Alex</a>+</span>+++&mdash; <span class="date">Sun Feb 24 11:13:16 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-6fb4c73a17f84bcf38cc9ebf164090a8">++++<div class="comment-subject">++<a href="/special_remotes.html#comment-6fb4c73a17f84bcf38cc9ebf164090a8">Rackspace Cloud Files support</a>++</div>++<div class="inlinecontent">+It'd be really cool to have Rackspace cloud files support. Like the guy above me said, I would submit a patch but not if I have to learn Haskell first :)++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawkQqKSVY98PVGDIaYZdK9CodJdbh7cFfhY">Ashwin</a>+</span>+++&mdash; <span class="date">Fri Mar 22 04:20:40 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-18ee66a322dee292bddd66916c68ddb5">++++<div class="comment-subject">++<a href="/special_remotes.html#comment-18ee66a322dee292bddd66916c68ddb5">Re: Webhook special remote</a>++</div>++<div class="inlinecontent">+@Alex: You might see if the newly-added <span class="createlink">wishlist: allow configuration of downloader for addurl</span> could be made to do what you need... I've not played around with it yet, but perhaps you could set the downloader to be something that can sort out the various URLs and send them to the correct downloading tool?++</div>++<div class="comment-header">++Comment by++<span class="author" title="Signed in">++<a href="?page=andy&amp;do=goto">andy</a>++</span>+++&mdash; <span class="date">Fri Apr 12 04:54:47 2013</span>+</div>++++<div style="clear: both"></div>+</div>+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./backends/comment_2_1f2626eca9004b31a0b7fc1a0df8027b.html">backends/comment 2 1f2626eca9004b31a0b7fc1a0df8027b</a>++<a href="./copies.html">copies</a>++<a href="./design/assistant/more_cloud_providers.html">design/assistant/more cloud providers</a>++<a href="./design/assistant/polls/prioritizing_special_remotes.html">design/assistant/polls/prioritizing special remotes</a>++<a href="./encryption.html">encryption</a>++<a href="./how_it_works.html">how it works</a>++<a href="./internals.html">internals</a>++<a href="./links/key_concepts.html">links/key concepts</a>++<a href="./special_remotes/rsync/comment_2_25545dc0b53f09ae73b29899c8884b02.html">special remotes/rsync/comment 2 25545dc0b53f09ae73b29899c8884b02</a>++<a href="./tips/using_Amazon_S3.html">tips/using Amazon S3</a>+++<span class="popup">...+<span class="balloon">++<a href="./tips/using_box.com_as_a_special_remote.html">tips/using box.com as a special remote</a>++<a href="./tips/using_the_web_as_a_special_remote.html">tips/using the web as a special remote</a>++<a href="./transferring_data.html">transferring data</a>++<a href="./use_case/Alice.html">use case/Alice</a>++<a href="./walkthrough/modifying_annexed_files/comment_1_624b4a0b521b553d68ab6049f7dbaf8c.html">walkthrough/modifying annexed files/comment 1 624b4a0b521b553d68ab6049f7dbaf8c</a>++<a href="./walkthrough/using_bup.html">walkthrough/using bup</a>++</span>+</span>++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:45 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:45 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/special_remotes/S3.html view
@@ -0,0 +1,451 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>S3</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../special_remotes.html">special remotes</a>/ ++</span>+<span class="title">+S3++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>This special remote type stores file contents in a bucket in Amazon S3+or a similar service.</p>++<p>See <a href="../tips/using_Amazon_S3.html">using Amazon S3</a> and+<a href="../tips/Internet_Archive_via_S3.html">Internet Archive via S3</a> for usage examples.</p>++<h2>configuration</h2>++<p>The standard environment variables <code>AWS_ACCESS_KEY_ID</code> and+<code>AWS_SECRET_ACCESS_KEY</code> are used to supply login credentials+for Amazon. You need to set these only when running+<code>git annex initremote</code>, as they will be cached in a file only you+can read inside the local git repository.</p>++<p>A number of parameters can be passed to <code>git annex initremote</code> to configure+the S3 remote.</p>++<ul>+<li><p><code>encryption</code> - Required. Either "none" to disable encryption (not recommended),+or a value that can be looked up (using gpg -k) to find a gpg encryption+key that will be given access to the remote, or "shared" which allows+every clone of the repository to access the encrypted data (use with caution).</p>++<p>Note that additional gpg keys can be given access to a remote by+running enableremote with the new key id. See <a href="../encryption.html">encryption</a>.</p></li>+<li><p><code>embedcreds</code> - Optional. Set to "yes" embed the login credentials inside+the git repository, which allows other clones to also access them. This is+the default when gpg encryption is enabled; the credentials are stored+encrypted and only those with the repository's keys can access them.</p>++<p>It is not the default when using shared encryption, or no encryption.+Think carefully about who can access your repository before using+embedcreds without gpg encryption.</p></li>+<li><p><code>datacenter</code> - Defaults to "US". Other values include "EU",+"us-west-1", and "ap-southeast-1".</p></li>+<li><p><code>storageclass</code> - Default is "STANDARD". If you have configured git-annex+to preserve multiple <a href="../copies.html">copies</a>, consider setting this to "REDUCED_REDUNDANCY"+to save money.</p></li>+<li><p><code>host</code> and <code>port</code> - Specify in order to use a different, S3 compatable+service.</p></li>+<li><p><code>bucket</code> - S3 requires that buckets have a globally unique name,+so by default, a bucket name is chosen based on the remote name+and UUID. This can be specified to pick a bucket name.</p></li>+<li><p><code>fileprefix</code> - By default, git-annex places files in a tree rooted at the+top of the S3 bucket. When this is set, it's prefixed to the filenames+used. For example, you could set it to "foo/" in one special remote,+and to "bar/" in another special remote, and both special remotes could+then use the same bucket.</p></li>+<li><p><code>x-amz-*</code> are passed through as http headers when storing keys+in S3.</p></li>+</ul>+++</div>++++<div id="comments">+<div  class="feedlink">+++</div>+<div class="comment" id="comment-e78d09fa4f81e60b0a5bbe36d8b16e5f">++++<div class="comment-subject">++<a href="/special_remotes/S3.html#comment-e78d09fa4f81e60b0a5bbe36d8b16e5f">environment variables</a>++</div>++<div class="inlinecontent">+Just noting that the environment variables <code>ANNEX_S3_ACCESS_KEY_ID</code> and <code>ANNEX_S3_SECRET_ACCESS_KEY</code> seem to have been changed to <code>AWS_ACCESS_KEY_ID</code> and <code>AWS_SECRET_ACCESS_KEY</code>++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawnoUOqs_lbuWyZBqyU6unHgUduJwDDgiKY">Matt</a>+</span>+++&mdash; <span class="date">Tue May 29 08:40:25 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-bc9f8e8cc2d8fd72e5b6518798f0ebfc">++++<div class="comment-subject">++<a href="/special_remotes/S3.html#comment-bc9f8e8cc2d8fd72e5b6518798f0ebfc">comment 2</a>++</div>++<div class="inlinecontent">+Thanks, I've fixed that. (You could have too.. this is a wiki ;)++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Tue May 29 15:10:46 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-286cccd33f418b14269c9cb2701dbaf2">++++<div class="comment-subject">++<a href="/special_remotes/S3.html#comment-286cccd33f418b14269c9cb2701dbaf2">comment 3</a>++</div>++<div class="inlinecontent">+Thanks! Being new here, I didn't want to overstep my boundaries. I've gone ahead and made a small edit and will do so elsewhere as needed.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawnoUOqs_lbuWyZBqyU6unHgUduJwDDgiKY">Matt</a>+</span>+++&mdash; <span class="date">Tue May 29 20:26:33 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-222c50147c35ecbc819e1834cb6f6860">++++<div class="comment-subject">++<a href="/special_remotes/S3.html#comment-222c50147c35ecbc819e1834cb6f6860">bucket/folder s3 remotes</a>++</div>++<div class="inlinecontent">+<p>it'd be really nice being able to configure a S3 remote of the form <code>&lt;bucket&gt;/&lt;folder&gt;</code> (not really a folder, of course, just the usual prefix trick used to simulate folders at S3). The remote = bucket architecture is not scalable at all, in terms of number of repositories.</p>++<p>how hard would it be to support this?</p>++<p>thanks, this is the only thing that's holding us back from using git-annex, nice tool!</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawmX5gPNK35Dub-HzR0Yb3KXllbqc0rYRYs">Eduardo</a>+</span>+++&mdash; <span class="date">Thu Aug  9 06:52:07 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-1109d3fda1d755925bfac275335a7cb8">++++<div class="comment-subject">++<a href="/special_remotes/S3.html#comment-1109d3fda1d755925bfac275335a7cb8">comment 5</a>++</div>++<div class="inlinecontent">+I guess this could be useful if you have a <em>lot</em> of buckets already in use at S3, or if you want to be able to have a lot of distinct S3 special remotes. Implemented the <code>fileprefix</code> setting. Note that I have not tested it, beyond checking it builds, since I let my S3 account expire. Your testing would be appreciated.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Thu Aug  9 14:01:06 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-75f6b47cb9420e144121e759946f410c">++++<div class="comment-subject">++<a href="/special_remotes/S3.html#comment-75f6b47cb9420e144121e759946f410c">Rackspace Cloud Files support?</a>++</div>++<div class="inlinecontent">+<p>Any chance I could bribe you to setup Rackspace Cloud Files support?  We are using them and would hate to have a S3 bucket only for this.</p>++<p>https://github.com/rackspace/python-cloudfiles</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawnY9ObrNrQuRp8Xs0XvdtJJssm5cp4NMZA">alan</a>+</span>+++&mdash; <span class="date">Thu Aug 23 17:00:11 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-d3268047d1eff90564547c661cdea8a5">++++<div class="comment-subject">++<a href="/special_remotes/S3.html#comment-d3268047d1eff90564547c661cdea8a5">S3 Remote Future Proof?</a>++</div>++<div class="inlinecontent">+Joey, I'm curious to understand how future proof an S3 remote is.  Can I restore my files without git-annex?++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawmyFvkaewo432ELwtCoecUGou4v3jCP0Pc">Eric</a>+</span>+++&mdash; <span class="date">Sun Jan 20 05:21:50 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-e9d48ba37aa5b01c236ab894057660b7">++++<div class="comment-subject">++<a href="/special_remotes/S3.html#comment-e9d48ba37aa5b01c236ab894057660b7">comment 8</a>++</div>++<div class="inlinecontent">+<p>If encryption is not used, the files are stored in S3 as-is, and can be accessed directly. They are stored in a hashed directory structure with the names of their key used, rather than the original filename. To get back to the original filename, a copy of the git repo would also be needed.</p>++<p>With encryption, you need the gpg key used in the encryption, or, for shared encryption, a symmetric key which is stored in the git repo.</p>++<p>See <a href="../future_proofing.html">future proofing</a> for non-S3 specific discussion of this topic.</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Sun Jan 20 16:37:09 2013</span>+</div>++++<div style="clear: both"></div>+</div>+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="../special_remotes.html">special remotes</a>++<a href="../tips/Internet_Archive_via_S3.html">tips/Internet Archive via S3</a>++<a href="../tips/using_Amazon_S3.html">tips/using Amazon S3</a>++<a href="../tips/using_Google_Cloud_Storage.html">tips/using Google Cloud Storage</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:45 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:45 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/special_remotes/bup.html view
@@ -0,0 +1,461 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>bup</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../special_remotes.html">special remotes</a>/ ++</span>+<span class="title">+bup++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>This special remote type stores file contents in a+<a href="http://github.com/bup/bup">bup</a> repository. By using git-annex+in the front-end, and bup as a remote, you get an easy git-style+interface to large files, and easy backups of the file contents using git.</p>++<p>This is particularly well suited to collaboration on projects involving+large files, since both the git-annex and bup repositories can be+accessed like any other git repository.</p>++<p>See <a href="../walkthrough/using_bup.html">using bup</a> for usage examples.</p>++<p>Each individual key is stored in a bup remote using <code>bup split</code>, with+a git branch named the same as the key name. Content is retrieved from+bup using <code>bup join</code>. All other bup operations are up to you -- consider+running <code>bup fsck --generate</code> in a cron job to generate recovery blocks,+for example; or clone bup's git repository to further back it up.</p>++<h2>configuration</h2>++<p>These parameters can be passed to <code>git annex initremote</code> to configure bup:</p>++<ul>+<li><p><code>encryption</code> - Required. Either "none" to disable encryption of content+stored in bup (ssh will still be used to transport it securely),+or a value that can be looked up (using gpg -k) to find a gpg encryption+key that will be given access to the remote, or "shared" which allows+every clone of the repository to access the encrypted data (use with caution).</p>++<p>Note that additional gpg keys can be given access to a remote by+running enableremote with the new key id. See <a href="../encryption.html">encryption</a>.</p></li>+<li><p><code>buprepo</code> - Required. This is passed to <code>bup</code> as the <code>--remote</code>+to use to store data. To create the repository,<code>bup init</code> will be run.+Example: "buprepo=example.com:/big/mybup" or "buprepo=/big/mybup"+(To use the default <code>~/.bup</code> repository on the local host, specify "buprepo=")</p></li>+</ul>+++<p>Options to pass to <code>bup split</code> when sending content to bup can also+be specified, by using <code>git config annex.bup-split-options</code>. This+can be used to, for example, limit its bandwidth.</p>++<h2>notes</h2>++<p><a href="../git-annex-shell.html">git-annex-shell</a> does not support bup, due to the wacky way that bup+starts its server. So, to use bup, you need full shell access to the server.</p>++</div>++++<div id="comments">+<div  class="feedlink">+++</div>+<div class="comment" id="comment-fcebb136f6078e006751a2bb398f72bd">++++<div class="comment-subject">++<a href="/special_remotes/bup.html#comment-fcebb136f6078e006751a2bb398f72bd">Error with bup and gnupg</a>++</div>++<div class="inlinecontent">+<p>Hello,</p>++<p>I get this error when trying to use git-annex with bup and gnupg:</p>++<pre>+move importable_pilot_surveys.tar (gpg) (checking localaseebup...) (to localaseebup...) +Traceback (most recent call last):+  File "/usr/lib/bup/cmd/bup-split", line 133, in +    progress=prog)+  File "/usr/lib/bup/bup/hashsplit.py", line 167, in split_to_shalist+    for (sha,size,bits) in sl:+  File "/usr/lib/bup/bup/hashsplit.py", line 118, in _split_to_blobs+    for (blob, bits) in hashsplit_iter(files, keep_boundaries, progress):+  File "/usr/lib/bup/bup/hashsplit.py", line 86, in _hashsplit_iter+    bnew = next(fi)+  File "/usr/lib/bup/bup/helpers.py", line 86, in next+    return it.next()+  File "/usr/lib/bup/bup/hashsplit.py", line 49, in blobiter+    for filenum,f in enumerate(files):+  File "/usr/lib/bup/cmd/bup-split", line 128, in +    files = extra and (open(fn) for fn in extra) or [sys.stdin]+IOError: [Errno 2] No such file or directory: '-'+</pre>+++<p>I was able to work-around this issue by altering /usr/lib/bup/cmd/bup-split (though I don't think its a bup bug) to just pull from stdin:</p>++<p>files = [sys.stdin]</p>++<p>on ~ line 128.</p>++<p>Any ideas? Also, do you think that bup's data-deduplication does anything when gnupg is enabled, i.e. is it just as well to use a directory remote with gnupg?</p>++<p>Thanks! Git annex rules!</p>++<p>Albert</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawkgbXwQtPQSG8igdS7U8l031N8sqDmuyvk">Albert</a>+</span>+++&mdash; <span class="date">Mon Oct 22 16:56:56 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-65d022495714fd230318fc36328928ec">++++<div class="comment-subject">++<a href="/special_remotes/bup.html#comment-65d022495714fd230318fc36328928ec">comment 2</a>++</div>++<div class="inlinecontent">+<p>@Albert, thanks for reporting this bug (but put them in <span class="createlink">bugs</span> in future please).</p>++<p>This is specific to using the bup special remote with encryption. Without encryption it works. And no, it won't manage to deduplicate anything that's encrypted, as far as I know.</p>++<p>I think bup-split must have used - for stdin in the past, but now, it just reads from stdin when no file is specified, so I've updated git-annex.</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Tue Oct 23 16:01:43 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-e8e658180a98b2b4fa3ba75dab3f2d03">++++<div class="comment-subject">++<a href="/special_remotes/bup.html#comment-e8e658180a98b2b4fa3ba75dab3f2d03">Bup remotes in git-annex assistant</a>++</div>++<div class="inlinecontent">+<p>Hi,</p>++<p>Is the bup remote available via the Assistant user interface?</p>++<p>Unrelated question;</p>++<p>If you are syncing files between two bup repos on local usb drives, does it use git to sync the changes or does it use "bup split" to re-add the file? (Basically, is the syncing as efficient as possible using git-annex or would I have to go to a lower level)</p>++<p>Many Thanks,+Sek</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://sekenre.wordpress.com/">sekenre</a>+</span>+++&mdash; <span class="date">Wed Mar 13 08:54:56 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-ab4ff45deb1dbd6bdc4f358edf17f859">++++<div class="comment-subject">++<a href="/special_remotes/bup.html#comment-ab4ff45deb1dbd6bdc4f358edf17f859">comment 4</a>++</div>++<div class="inlinecontent">+<p>I don't plan to support creating bup spefial remotes in the assistant, currently. Of course the assistant can use bup special remotes you set up.</p>++<p>Your two bup repos would be synced using bup-split.</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joey</a>+</span>+++&mdash; <span class="date">Wed Mar 13 12:05:50 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-e83698f8503aa61fbb9e87d2d4cad27d">++++<div class="comment-subject">++<a href="/special_remotes/bup.html#comment-e83698f8503aa61fbb9e87d2d4cad27d">comment 5</a>++</div>++<div class="inlinecontent">+<p>I don't plan to support creating bup spefial remotes in the assistant, currently. Of course the assistant can use bup special remotes you set up.</p>++<p>Your two bup repos would be synced using bup-split.</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joey</a>+</span>+++&mdash; <span class="date">Wed Mar 13 12:05:57 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-9eb04fc51f17b4ae6ea96bca6bb102eb">++++<div class="comment-subject">++<a href="/special_remotes/bup.html#comment-9eb04fc51f17b4ae6ea96bca6bb102eb">bup fail?</a>++</div>++<div class="inlinecontent">+<p>I've run into problems storing a huge number of files in the bup repo. It seems that thousands of branches are a problem. I don't know if it's a problem of git-annex, bup, or the filesystem.</p>++<p>How about adding an option to store tree/commit ids in git-annex instead of using branches in bup?</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawnZWCbRYPVnwscdkdEDwgQHZJLwW6H_AHo">Tobias</a>+</span>+++&mdash; <span class="date">Sun Mar 31 17:05:32 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-904c03f2de30340c297379a762529702">++++<div class="comment-subject">++<a href="/special_remotes/bup.html#comment-904c03f2de30340c297379a762529702">comment 7</a>++</div>++<div class="inlinecontent">+<p><code>bup-split</code> uses a git branch to name the objects stored in the bup repository. So it will be limited by any scalability issues affecting large numbers of git branches. I don't know what those are.</p>++<p>Yes, it would be possible to make git-annex store this in the git-annex branch instead.</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joey</a>+</span>+++&mdash; <span class="date">Tue Apr  2 17:24:06 2013</span>+</div>++++<div style="clear: both"></div>+</div>+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="../not.html">not</a>++<a href="../special_remotes.html">special remotes</a>++<a href="../walkthrough/using_bup.html">walkthrough/using bup</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:45 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:45 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/special_remotes/directory.html view
@@ -0,0 +1,332 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>directory</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../special_remotes.html">special remotes</a>/ ++</span>+<span class="title">+directory++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>This special remote type stores file contents in directory.</p>++<p>One use case for this would be if you have a removable drive that+you want to use it to sneakernet files between systems (possibly with+<a href="../encryption.html">encrypted</a> contents). Just set up both systems to use+the drive's mountpoint as a directory remote.</p>++<h2>configuration</h2>++<p>These parameters can be passed to <code>git annex initremote</code> to configure the+remote:</p>++<ul>+<li><p><code>encryption</code> - Required. Either "none" to disable encryption,+or a value that can be looked up (using gpg -k) to find a gpg encryption+key that will be given access to the remote, or "shared" which allows+every clone of the repository to decrypt the encrypted data.</p>++<p>Note that additional gpg keys can be given access to a remote by+running enableremote with the new key id. See <a href="../encryption.html">encryption</a>.</p></li>+<li><p><code>chunksize</code> - Avoid storing files larger than the specified size in the+directory. For use on directories on mount points that have file size+limitations. The default is to never chunk files.<br/>+The value can use specified using any commonly used units.+Example: <code>chunksize=100 megabytes</code><br/>+Note that enabling chunking on an existing remote with non-chunked+files is not recommended.</p></li>+</ul>+++<p>Setup example:</p>++<pre><code># git annex initremote usbdrive type=directory directory=/media/usbdrive/ encryption=none+# git annex describe usbdrive "usb drive on /media/usbdrive/"+</code></pre>++</div>++++<div id="comments">+<div  class="feedlink">+++</div>+<div class="comment" id="comment-6f677d7ed8f3557a64276b7c493eaf50">++++<div class="comment-subject">++<a href="/special_remotes/directory.html#comment-6f677d7ed8f3557a64276b7c493eaf50">how is this different than rsync?</a>++</div>++<div class="inlinecontent">+<p>Thanks for this great tool! I was wondering what the differences are between using <code>type=directory</code>, <code>type=rsync</code>, or a bare git repo for directories?</p>++<p>I guess I can't use just a regular repo because my USB drive is formatted as <code>vfat</code> -- which threw me for a loop the first time I heard about <code>git-annex</code> about a year ago, because I followed the walkthrough, and it didn't work as expected and gave up (now I know it was just a case of PEBKAC). It might be worth adding a note about <a href="http://git-annex.branchable.com/bugs/fat_support/">vfat</a> to the "Adding a remote" section of the <a href="http://git-annex.branchable.com/walkthrough/">walkthrough</a>, since the unstated assumption there is that the USB drive is formatted as a filesystem that supports symlinks.</p>++<p>Thanks again, my scientific data management just got a lot more sane!</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawlc1og3PqIGudOMkFNrCCNg66vB7s-jLpc">Paul</a>+</span>+++&mdash; <span class="date">Fri Jun 22 18:10:19 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-b8aec6211a2a7e57dc54a8c23101d521">++++<div class="comment-subject">++<a href="/special_remotes/directory.html#comment-b8aec6211a2a7e57dc54a8c23101d521">comment 2</a>++</div>++<div class="inlinecontent">+<p>The directory and rsync special remotes intentionally use the same layout. So the same directory could be set up as both types of special remotes.</p>++<p>The main reason to use this rather than a bare git repo is that it supports encryption.</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Mon Jun 25 11:29:29 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-e3939893c9d2f8e45205222e140b71a1">++++<div class="comment-subject">++<a href="/special_remotes/directory.html#comment-e3939893c9d2f8e45205222e140b71a1">dropping a directory remote?</a>++</div>++<div class="inlinecontent">+How do I drop a directory remote after initremote? Say I want to start over and enable chunking (not supposed to be enabled on an existing directory), can I simply git remote rm it?++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://dzsino.myopenid.com/">dzsino</a>+</span>+++&mdash; <span class="date">Tue Jan 15 18:29:15 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-4ec1b31402dd3bd5df9c96f6f8ba9479">++++<div class="comment-subject">++<a href="/special_remotes/directory.html#comment-4ec1b31402dd3bd5df9c96f6f8ba9479">comment 4</a>++</div>++<div class="inlinecontent">+The best way to remove a special remote is to first <code>git annex move --from $remote</code> to get all the content out of it, then <code>git annex dead $remote</code> and finally you can <code>git remote rm $remote</code>++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Thu Jan 17 14:22:26 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-ee9e18d4d37764ad9198ff01f17fbee0">++++<div class="comment-subject">++<a href="/special_remotes/directory.html#comment-ee9e18d4d37764ad9198ff01f17fbee0">Directory remote with files accessible from non git-annex system?</a>++</div>++<div class="inlinecontent">+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawk3HGoDpnOPob5jOjvIootmkve1-nCpRiI">Kalle</a>+</span>+++&mdash; <span class="date">Sun Jan 20 11:44:16 2013</span>+</div>++++<div style="clear: both"></div>+</div>+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./hook.html">hook</a>++<a href="../special_remotes.html">special remotes</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:45 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:45 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/special_remotes/glacier.html view
@@ -0,0 +1,179 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>glacier</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../special_remotes.html">special remotes</a>/ ++</span>+<span class="title">+glacier++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>This special remote type stores file contents in Amazon Glacier.</p>++<p>To use it, you need to have <a href="http://github.com/basak/glacier-cli">glacier-cli</a>+installed.</p>++<p>The unusual thing about Amazon Glacier is the multiple-hour delay it takes+to retrieve information out of Glacier. To deal with this, commands like+"git-annex get" request Glacier start the retrieval process, and will fail+due to the data not yet being available. You can then wait appriximately+four hours, re-run the same command, and this time, it will actually+download the data.</p>++<h2>configuration</h2>++<p>The standard environment variables <code>AWS_ACCESS_KEY_ID</code> and+<code>AWS_SECRET_ACCESS_KEY</code> are used to supply login credentials+for Amazon. You need to set these only when running+<code>git annex initremote</code>, as they will be cached in a file only you+can read inside the local git repository.</p>++<p>A number of parameters can be passed to <code>git annex initremote</code> to configure+the Glacier remote.</p>++<ul>+<li><p><code>encryption</code> - Required. Either "none" to disable encryption (not recommended),+or a value that can be looked up (using gpg -k) to find a gpg encryption+key that will be given access to the remote, or "shared" which allows+every clone of the repository to access the encrypted data (use with caution).</p>++<p>Note that additional gpg keys can be given access to a remote by+running enableremote with the new key id. See <a href="../encryption.html">encryption</a>.</p></li>+<li><p><code>embedcreds</code> - Optional. Set to "yes" embed the login credentials inside+the git repository, which allows other clones to also access them. This is+the default when gpg encryption is enabled; the credentials are stored+encrypted and only those with the repository's keys can access them.</p>++<p>It is not the default when using shared encryption, or no encryption.+Think carefully about who can access your repository before using+embedcreds without gpg encryption.</p></li>+<li><p><code>datacenter</code> - Defaults to "us-east-1".</p></li>+<li><p><code>vault</code> - By default, a vault name is chosen based on the remote name+and UUID. This can be specified to pick a vault name.</p></li>+<li><p><code>fileprefix</code> - By default, git-annex places files in a tree rooted at the+top of the Glacier vault. When this is set, it's prefixed to the filenames+used. For example, you could set it to "foo/" in one special remote,+and to "bar/" in another special remote, and both special remotes could+then use the same vault.</p></li>+</ul>+++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="../special_remotes.html">special remotes</a>++<a href="../tips/using_Amazon_Glacier.html">tips/using Amazon Glacier</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:45 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:45 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/special_remotes/hook.html view
@@ -0,0 +1,266 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>hook</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../special_remotes.html">special remotes</a>/ ++</span>+<span class="title">+hook++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>This special remote type lets you store content in a remote of your own+devising.</p>++<p>It's not recommended to use this remote type when another like <a href="./rsync.html">rsync</a>+or <a href="./directory.html">directory</a> will do. If your hooks are not carefully written, data+could be lost.</p>++<h2>example</h2>++<p>Here's a simple example that stores content on clay tablets. If you+implement this example in the real world, I'd appreciate a tour+next Apert! :) --<span class="createlink">Joey</span></p>++<pre><code># git config annex.cuneiform-store-hook 'tocuneiform &lt; "$ANNEX_FILE" | tablet-writer --implement=stylus --title="$ANNEX_KEY" | tablet-proofreader | librarian --shelve --floor=$ANNEX_HASH_1 --shelf=$ANNEX_HASH_2'+# git config annex.cuneiform-retrieve-hook 'librarian --get --floor=$ANNEX_HASH_1 --shelf=$ANNEX_HASH_2 --title="$ANNEX_KEY" | tablet-reader --implement=coffee --implement=glasses --force-monastic-dedication | fromcuneiform &gt; "$ANNEX_FILE"'+# git config annex.cuneiform-remove-hook 'librarian --get --floor=$ANNEX_HASH_1 --shelf=$ANNEX_HASH_2 --title="$ANNEX_KEY" | goon --hit-with-hammer'+# git config annex.cuneiform-checkpresent-hook 'librarian --find --force-distrust-catalog --floor=$ANNEX_HASH_1 --shelf=$ANNEX_HASH_2 --title="$ANNEX_KEY" --shout-title'+# git annex initremote library type=hook hooktype=cuneiform encryption=none+# git annex describe library "the reborn Library of Alexandria (upgrade to bronze plates pending)"+</code></pre>++<p>Can you spot the potential data loss bugs in the above simple example?+(Hint: What happens when the <code>tablet-proofreader</code> exits nonzero?)</p>++<h2>configuration</h2>++<p>These parameters can be passed to <code>git annex initremote</code>:</p>++<ul>+<li><p><code>encryption</code> - Required. Either "none" to disable encryption,+or a value that can be looked up (using gpg -k) to find a gpg encryption+key that will be given access to the remote, or "shared" which allows+every clone of the repository to access the encrypted data.</p>++<p>Note that additional gpg keys can be given access to a remote by+running enableremote with the new key id. See <a href="../encryption.html">encryption</a>.</p></li>+<li><p><code>hooktype</code> - Required. This specifies a collection of hooks to use for+this remote.</p></li>+</ul>+++<h2>hooks</h2>++<p>Each type of hook remote is specified by a collection of hook commands.+Each hook command is run as a shell command line, and should return nonzero+on failure, and zero on success.</p>++<p>These environment variables are used to communicate with the hook commands:</p>++<ul>+<li><code>ANNEX_KEY</code> - name of a key to store, retrieve, remove, or check.</li>+<li><code>ANNEX_FILE</code> - a file containing the key's content</li>+<li><code>ANNEX_HASH_1</code> - short stable value, based on the key, can be used for hashing+into 1024 buckets.</li>+<li><code>ANNEX_HASH_2</code> - another hash value, can be used for a second level of hashing</li>+</ul>+++<p>The setting to use in git config for the hook commands are as follows:</p>++<ul>+<li><p><code>annex.$hooktype-store-hook</code> - Command run to store a key in the special remote.+<code>ANNEX_FILE</code> contains the content to be stored.</p></li>+<li><p><code>annex.$hooktype-retrieve-hook</code> - Command run to retrieve a key from the special remote.+<code>ANNEX_FILE</code> is a file that the retrieved content should be written to.+The file may already exist with a partial+copy of the content (or possibly just garbage), to allow for resuming+of partial transfers.</p></li>+<li><p><code>annex.$hooktype-remove-hook</code> - Command to remove a key from the special remote.</p></li>+<li><p><code>annex.$hooktype-checkpresent-hook</code> - Command to check if a key is present+in the special remote. Should output the key name to stdout, on its own line,+if and only if the key has been actively verified to be present in the+special remote (caching presence information is a very bad idea);+all other output to stdout will be ignored.</p></li>+</ul>+++</div>++++<div id="comments">+<div  class="feedlink">+++</div>+<div class="comment" id="comment-70d5145af0290f63af3145c35487392f">++++<div class="comment-subject">++<a href="/special_remotes/hook.html#comment-70d5145af0290f63af3145c35487392f">Asynchronous hooks?</a>++</div>++<div class="inlinecontent">+<p>Is there a way to use asynchronous remotes? Interaction with git annex would have to+split the part of initiating some action from completing it.</p>++<p>I imagine I could <code>git annex copy</code> a file to an asynchronous remote and the command+would almost immediately complete. Later I would learn that the transfer is+completed, so the hook must be able to record that information in the <code>git-annex</code>+branch. An additional plumbing command seems required here as well as a way to+indicate that even though the store-hook completed, the file is not transferred.</p>++<p>Similarly <code>git annex get</code> would immediately return without actually fetching the+file. This should already be possible by returning non-zero from the retrieve-hook.+Later the hook could use plumbing level commands to actually stick the received file+into the repository.</p>++<p>The remove-hook should need no changes, but the checkpresent-hook would be more like+a trigger without any actual result. The extension of the plumbing required for the+extension to the receive-hook could update the location log. A downside here is that+you never know when a fsck has completed.</p>++<p>My proposal does not include a way to track the completion of actions, but relies on+the hook to always complete them reliably. It is not clear that this is the best road+for asynchronous hooks.</p>++<p>One use case for this would be a remote that is only accessible via uucp. Are there+other use cases? Is the drafted interface useful?</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="Signed in">++<a href="?page=helmut&amp;do=goto">helmut</a>++</span>+++&mdash; <span class="date">Sat Oct 13 05:46:14 2012</span>+</div>++++<div style="clear: both"></div>+</div>+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="../special_remotes.html">special remotes</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:45 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:45 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/special_remotes/rsync.html view
@@ -0,0 +1,291 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>rsync</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../special_remotes.html">special remotes</a>/ ++</span>+<span class="title">+rsync++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>This special remote type rsyncs file contents to somewhere else.</p>++<p>Setup example:</p>++<pre><code># git annex initremote myrsync type=rsync rsyncurl=rsync://rsync.example.com/myrsync encryption=joey@kitenet.net+# git annex describe myrsync "rsync server"+</code></pre>++<p>Or for using rsync over SSH</p>++<pre><code># git annex initremote myrsync type=rsync rsyncurl=ssh.example.com:/myrsync encryption=joey@kitenet.net+# git annex describe myrsync "rsync server"+</code></pre>++<h2>configuration</h2>++<p>These parameters can be passed to <code>git annex initremote</code> to configure rsync:</p>++<ul>+<li><p><code>encryption</code> - Required. Either "none" to disable encryption of content+stored on the remote rsync server,+or a value that can be looked up (using gpg -k) to find a gpg encryption+key that will be given access to the remote, or "shared" which allows+every clone of the repository to decrypt the encrypted data.</p>++<p>Note that additional gpg keys can be given access to a remote by+running enableremote with the new key id. See <a href="../encryption.html">encryption</a>.</p></li>+<li><p><code>rsyncurl</code> - Required. This is the url or <code>hostname:/directory</code> to+pass to rsync to tell it where to store content.</p></li>+<li><p><code>shellescape</code> - Optional. Set to "no" to avoid shell escaping normally+done when using rsync over ssh. That escaping is needed with typical+setups, but not with some hosting providers that do not expose rsynced+filenames to the shell. You'll know you need this option if <code>git annex get</code>+from the special remote fails with an error message containing a single+quote (<code>'</code>) character. If that happens, you can run enableremote+setting shellescape=no.</p></li>+</ul>+++<p>The <code>annex-rsync-options</code> git configuration setting can be used to pass+parameters to rsync.</p>++</div>++++<div id="comments">+<div  class="feedlink">+++</div>+<div class="comment" id="comment-365df6b0ce20645343d07bea2e6cd84f">++++<div class="comment-subject">++<a href="/special_remotes/rsync.html#comment-365df6b0ce20645343d07bea2e6cd84f">rsync description and example</a>++</div>++<div class="inlinecontent">+<p>Hi, I would like to see a example of setting up / using e.g. rsync.net as a repo.</p>++<p>Please also provide a highlevel description of how the rsync repo fits in with git-annex.</p>++<p>Q1. can you adds files to the remote rsync repo, and will they be detected and synced back ?+Q2. is all the git history rsync'd to remote ?   how do i recover if i loose all data except the remote rsync repo ?</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="Signed in">++<a href="?page=diepes&amp;do=goto">diepes</a>++</span>+++&mdash; <span class="date">Fri Mar 29 11:57:20 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-525d3951ab1f09fdf471f450a798b50e">++++<div class="comment-subject">++<a href="/special_remotes/rsync.html#comment-525d3951ab1f09fdf471f450a798b50e">comment 2</a>++</div>++<div class="inlinecontent">+No, special remotes do not contain a copy of the git repository, and no, git-annex does not notice when files are added to remote rsync repositories. Suggest you read <a href="../special_remotes.html">special remotes</a>.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joey</a>+</span>+++&mdash; <span class="date">Fri Mar 29 13:12:47 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-c8fc6dad2ad0eef8accbe31bfd82542b">++++<div class="comment-subject">++<a href="/special_remotes/rsync.html#comment-c8fc6dad2ad0eef8accbe31bfd82542b">sshfs ?  and no sync from special remote to 2nd git-annex ?</a>++</div>++<div class="inlinecontent">+<ul>+<li>It sound to me it would be 1st prize if the cloud provider supported the git-annex functionality over ssh.</li>+<li>Then it could be a full git-annex repo, and used for recovery if my laptop with the git info gets lost.</li>+<li>From special remotes "These can be used just like any normal remote by git-annex"</li>+<li><p>Your comment "No, special remotes do not contain a copy of the git repository"</p></li>+<li><p>so a special remote is</p></li>+<li><p>"A. just a remote filesystem, that contains the objects with sha1 names ? "</p></li>+<li>"B. there is no git info and thus no file name &amp; directory details or am i missing something ?"</li>+<li>"C. you can't use the remote as a cloud drive to sync changes e.g. file moves, renames between two other git-annex repositories ? (no meta data)"</li>+<li><p>"D. the data on the cloud/rsync storage can not be used directly it has to moved into a git-annex capable storage location. "</p></li>+<li><p>Would it not be better to mount the remote storage over ssh(sshfs) and then use full git-annex on mounted directory ?</p></li>+</ul>++++</div>++<div class="comment-header">++Comment by++<span class="author" title="Signed in">++<a href="?page=diepes&amp;do=goto">diepes</a>++</span>+++&mdash; <span class="date">Fri Mar 29 18:09:49 2013</span>+</div>++++<div style="clear: both"></div>+</div>+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./hook.html">hook</a>++<a href="../special_remotes.html">special remotes</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:45 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:45 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/special_remotes/web.html view
@@ -0,0 +1,141 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>web</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../special_remotes.html">special remotes</a>/ ++</span>+<span class="title">+web++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>git-annex can use the WWW as a special remote, downloading urls to files.+See <a href="../tips/using_the_web_as_a_special_remote.html">using the web as a special remote</a> for usage examples.</p>++<h2>notes</h2>++<p>Currently git-annex only supports downloading content from the web;+it cannot upload to it or remove content.</p>++<p>This special remote uses arbitrary urls on the web as the source for content.+git-annex can also download content from a normal git remote, accessible by+http.</p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="../internals.html">internals</a>++<a href="../special_remotes.html">special remotes</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Fri Sep 28 01:45:57 2012</span>+<!-- Created <span class="date">Fri Sep 28 01:45:57 2012</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/special_remotes/webdav.html view
@@ -0,0 +1,465 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>webdav</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../special_remotes.html">special remotes</a>/ ++</span>+<span class="title">+webdav++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>This special remote type stores file contents in a WebDAV server.</p>++<h2>configuration</h2>++<p>The environment variables <code>WEBDAV_USERNAME</code> and <code>WEBDAV_PASSWORD</code> are used+to supply login credentials. You need to set these only when running+<code>git annex initremote</code>, as they will be cached in a file only you+can read inside the local git repository.</p>++<p>A number of parameters can be passed to <code>git annex initremote</code> to configure+the webdav remote.</p>++<ul>+<li><p><code>encryption</code> - Required. Either "none" to disable encryption (not recommended),+or a value that can be looked up (using gpg -k) to find a gpg encryption+key that will be given access to the remote, or "shared" which allows+every clone of the repository to access the encrypted data (use with caution).</p>++<p>Note that additional gpg keys can be given access to a remote by+running enableremote with the new key id. See <a href="../encryption.html">encryption</a>.</p></li>+<li><p><code>embedcreds</code> - Optional. Set to "yes" embed the login credentials inside+the git repository, which allows other clones to also access them. This is+the default when gpg encryption is enabled; the credentials are stored+encrypted and only those with the repository's keys can access them.</p>++<p>It is not the default when using shared encryption, or no encryption.+Think carefully about who can access your repository before using+embedcreds without gpg encryption.</p></li>+<li><p><code>url</code> - Required. The URL to the WebDAV directory where files will be+stored. This can be a subdirectory of a larger WebDAV repository, and will+be created as needed. Use of a https URL is strongly+encouraged, since HTTP basic authentication is used.</p></li>+<li><p><code>chunksize</code> - Avoid storing files larger than the specified size in+WebDAV. For use when the WebDAV server has file size+limitations. The default is to never chunk files.<br/>+The value can use specified using any commonly used units.+Example: <code>chunksize=75 megabytes</code><br/>+Note that enabling chunking on an existing remote with non-chunked+files is not recommended.</p></li>+</ul>+++<p>Setup example:</p>++<pre><code># WEBDAV_USERNAME=joey@kitenet.net WEBDAV_PASSWORD=xxxxxxx git annex initremote box.com type=webdav url=https://www.box.com/dav/git-annex chunksize=75mb encryption=joey@kitenet.net+</code></pre>++</div>++++<div id="comments">+<div  class="feedlink">+++</div>+<div class="comment" id="comment-5baa5a7124413672286561cd0cf2d81e">++++<div class="comment-subject">++<a href="/special_remotes/webdav.html#comment-5baa5a7124413672286561cd0cf2d81e">git-annex initremote failing for webdav servers</a>++</div>++<div class="inlinecontent">+<p>Unfortunately, trying to set up the following webdav servers fail. Some of the terminal output of git-annex --debug initremote ... is below, but it may not really helpful. Can I help any further, can a webdav remote be set up in a different way? (The box.com webdav initremote worked fine.) Cheers</p>++<p>With livedrive.com:</p>++<pre><code>[2012-12-01 10:15:12 GMT] chat: gpg ["--batch","--no-tty","--use-agent","--quiet","--trust-model","always","--encrypt","--no-encrypt-to","--no-default-recipient","--recipient","xxxxxxxxxxxxxx"]+(encryption setup with gpg key xxxxxxxxxxxxxx) (testing WebDAV server...)+git-annex: "Bad Request": user error+failed+git-annex: initremote: 1 failed+</code></pre>++<p>With sd2dav.1und1.de:</p>++<pre><code>[2012-12-01 10:13:10 GMT] chat: gpg ["--batch","--no-tty","--use-agent","--quiet","--trust-model","always","--encrypt","--no-encrypt-to","--no-default-recipient","--recipient","xxxxxxxxxxxxxx"]+(encryption setup with gpg key xxxxxxxxxxxxxx) (testing WebDAV server...)+git-annex: "Locked": user error+failed+git-annex: initremote: 1 failed+</code></pre>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://rfhbuk.myopenid.com/">rfhbuk [myopenid.com]</a>+</span>+++&mdash; <span class="date">Sat Dec  1 06:18:04 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-a15cb41a5f551865af13d2b517d5f222">++++<div class="comment-subject">++<a href="/special_remotes/webdav.html#comment-a15cb41a5f551865af13d2b517d5f222">comment 2</a>++</div>++<div class="inlinecontent">+<p>I tried signing up for livedrive, but I cannot log into it with WebDav at all. Do they require a Pro account to use WebDav?</p>++<p>When it's "testing webdav server", it tries to make a collection (a subdirectory), and uploads a file to it, and sets the file's properties, and deletes the file. One of these actions must be failing, perhaps because the webdav server implementation does not support it. Or perhaps because the webdav client library is doing something wrong. I've instrumented the test, so it'll say which one.</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Sat Dec  1 14:34:05 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-a1fcb97f459ec0e242b5172fbfa5dd3a">++++<div class="comment-subject">++<a href="/special_remotes/webdav.html#comment-a1fcb97f459ec0e242b5172fbfa5dd3a">comment 3</a>++</div>++<div class="inlinecontent">+<p>I've identified the problem keeping it working with livedrive. Once a patch I've written is applied to the Haskell DAV library, I'll be able to update git-annex to support it.</p>++<p>I don't know about sd2dav.1und1.de. The error looks like it doesn't support WebDAV file locking.</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Sat Dec  1 16:13:36 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-51b7aea2538c30d0064f6993ffaf7f14">++++<div class="comment-subject">++<a href="/special_remotes/webdav.html#comment-51b7aea2538c30d0064f6993ffaf7f14">comment 4</a>++</div>++<div class="inlinecontent">+Good news, livedrive is supported now, by git-annex's master branch.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Sat Dec  1 17:14:34 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-471a2ec5c3bf715d7f6fb22d67a5fae8">++++<div class="comment-subject">++<a href="/special_remotes/webdav.html#comment-471a2ec5c3bf715d7f6fb22d67a5fae8">WebDAV without locking</a>++</div>++<div class="inlinecontent">+<p>Hi Joey,</p>++<p>you are right, the 1-und-1.de implementation of WebDAV does not support locking.</p>++<p>Do you think there is a way to make that service work with git-annex anyhow -- say, by allowing the user to disable file-locking? I've worked around the problem with 1-und-1.de by using fuse+davfs2 to mount the storage in my file system and access it through the directory backend, but FUSE is dead slow, unfortunately, and this solution really sucks.</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://peter-simons.myopenid.com/">peter-simons [myopenid.com]</a>+</span>+++&mdash; <span class="date">Wed Jan 16 08:44:16 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-d7b26368885fe7ae941ff2662165b22a">++++<div class="comment-subject">++<a href="/special_remotes/webdav.html#comment-d7b26368885fe7ae941ff2662165b22a">comment 6</a>++</div>++<div class="inlinecontent">+<p>It seems it must advertise it supports the LOCK and UNLOCK http actions, but fails when they're used.</p>++<p>The DAV library I am using always locks if it seems the server supports it. So this will need changes to that library. I've filed a bug requesting the changes. <a href="http://bugs.debian.org/698379">http://bugs.debian.org/698379</a></p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Thu Jan 17 14:23:27 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-43a9332e13739104c0bfe968d598b892">++++<div class="comment-subject">++<a href="/special_remotes/webdav.html#comment-43a9332e13739104c0bfe968d598b892">SSL certificates</a>++</div>++<div class="inlinecontent">+<p>Trying to use webdav leads in:</p>++<pre><code>git-annex: HandshakeFailed (Error_Protocol ("certificate rejected: not coping with anything else Start (Container Context 0)",True,CertificateUnknown))+</code></pre>++<p>How can I disable the SSL certificate check?</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawniayrgSdVLUc3c6bf93VbO-_HT4hzxmyo">Tobias</a>+</span>+++&mdash; <span class="date">Mon Mar 25 12:09:54 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-e85611766963b29b00490ff821328a5f">++++<div class="comment-subject">++<a href="/special_remotes/webdav.html#comment-e85611766963b29b00490ff821328a5f">comment 8</a>++</div>++<div class="inlinecontent">+I don't think the checking of SSL certificates can currently be disabled.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joey</a>+</span>+++&mdash; <span class="date">Wed Mar 27 12:38:47 2013</span>+</div>++++<div style="clear: both"></div>+</div>+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="../special_remotes.html">special remotes</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:45 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:45 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/special_remotes/xmpp.html view
@@ -0,0 +1,225 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>xmpp</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../special_remotes.html">special remotes</a>/ ++</span>+<span class="title">+xmpp++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>XMPP (Jabber) is used by the <a href="../assistant.html">assistant</a> as a git remote. This is,+technically not a git-annex special remote (large files are not transferred+over XMPP; only git commits are sent).</p>++<p>Typically XMPP will be set up using the web app, but here's how a manual+set up could be accomplished:</p>++<ol>+<li><p>xmpp login credentials need to be stored in <code>.git/annex/creds/xmpp</code>.+Obviously this file should be mode 600. An example file:</p>++<p> XMPPCreds {xmppUsername = "joeyhess", xmppPassword = "xxxx", xmppHostname = "xmpp.l.google.com.", xmppPort = 5222, xmppJID = "joeyhess@gmail.com"}</p></li>+<li><p>A git remote is created using a special url, of the form <code>xmpp::user@host</code>+For the above example, it would be <code>url = xmpp::joeyhess@gmail.com</code></p></li>+<li><p>The uuid of one of the other clients using XMPP should be configured+using the <code>annex.uuid</code> setting, the same as is set up for other remotes.</p></li>+</ol>+++<p>With the above configuration, the <a href="../assistant.html">assistant</a> will use xmpp remotes much as+any other git remote. Since XMPP requires a client that is continually running+to see incoming pushes, the XMPP remote cannot be used with git at the+command line.</p>++<p>See also: <a href="../design/assistant/xmpp.html">xmpp protocol design notes</a></p>++</div>++++<div id="comments">+<div  class="feedlink">+++</div>+<div class="comment" id="comment-a7e65f545755de544dc069536c1fff4a">++++<div class="comment-subject">++<a href="/special_remotes/xmpp.html#comment-a7e65f545755de544dc069536c1fff4a">User defined server</a>++</div>++<div class="inlinecontent">+<p>It would be nice if you could expand the XMPP setup in the assistant to support an "advanced" settings view where a custom server could be defined.</p>++<p>Example: I have a google Apps domain called mytest.com, with the users bla1@mytest.com and bla2@mytest.com. When trying to add either of those accounts to the assistant XMPP will try to use mytest.com as the jabber server, and not googles server.</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawmWg4VvDTer9f49Y3z-R0AH16P4d1ygotA">Tobias</a>+</span>+++&mdash; <span class="date">Wed Apr 17 05:45:59 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-f62f17a333e25b8451183e8ac011d05f">++++<div class="comment-subject">++<a href="/special_remotes/xmpp.html#comment-f62f17a333e25b8451183e8ac011d05f">comment 2</a>++</div>++<div class="inlinecontent">+<p>Yeah, I agree, this would be nice.</p>++<p>For your own domain, you can configure DNS like this: <a href="http://support.google.com/a/bin/answer.py?hl=en&amp;answer=34143">http://support.google.com/a/bin/answer.py?hl=en&amp;answer=34143</a> to make XMPP find the right server. But for some that's not an option and the "advanced" mode would be useful in that case.</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawmRFKwny4rArBaz-36xTcsJYqKIgdDaw5Q">Andrew</a>+</span>+++&mdash; <span class="date">Wed Apr 17 18:28:39 2013</span>+</div>++++<div style="clear: both"></div>+</div>+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="../special_remotes.html">special remotes</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:45 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:45 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/summary.html view
@@ -0,0 +1,129 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>summary</title>++<link rel="stylesheet" href="style.css" type="text/css" />++<link rel="stylesheet" href="local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="./index.html">git-annex</a>/ ++</span>+<span class="title">+summary++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="./install.html">install</a></li>+<li><a href="./assistant.html">assistant</a></li>+<li><a href="./walkthrough.html">walkthrough</a></li>+<li><a href="./tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="./comments.html">comments</a></li>+<li><a href="./contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>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, time, or disk space.</p>++<p><a href="./assistant.html"><img src="./assistant/thumbnail.png" width="216" height="28" class="img" align="right" /></a>+git-annex is designed for git users who love the command line.+For everyone else, the <a href="./assistant.html">git-annex assistant</a> turns+git-annex into an easy to use folder synchroniser.</p>++<p>To get a feel for git-annex, see the <a href="./walkthrough.html">walkthrough</a>.</p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">++++++++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:46 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:46 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/sync.html view
@@ -0,0 +1,302 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>sync</title>++<link rel="stylesheet" href="style.css" type="text/css" />++<link rel="stylesheet" href="local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="./index.html">git-annex</a>/ ++</span>+<span class="title">+sync++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="./install.html">install</a></li>+<li><a href="./assistant.html">assistant</a></li>+<li><a href="./walkthrough.html">walkthrough</a></li>+<li><a href="./tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="./comments.html">comments</a></li>+<li><a href="./contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>The <code>git annex sync</code> command provides an easy way to keep several+repositories in sync.</p>++<p>Often git is used in a centralized fashion with a central bare repository+which changes are pulled and pushed to using normal git commands.+That works fine, if you don't mind having a central repository.</p>++<p>But it can be harder to use git in a fully decentralized fashion, with no+central repository and still keep repositories in sync with one another.+You have to remember to pull from each remote, and merge the appopriate+branch after pulling. It's difficult to <em>push</em> to a remote, since git does+not allow pushes into the currently checked out branch.</p>++<p><code>git annex sync</code> makes it easier using a scheme devised by Joachim+Breitner. The idea is to have a branch <code>synced/master</code> (actually,+<code>synced/$currentbranch</code>), that is never directly checked out, and serves+as a drop-point for other repositories to use to push changes.</p>++<p>When you run <code>git annex sync</code>, it merges the <code>synced/master</code> branch+into <code>master</code>, receiving anything that's been pushed to it. Then it+fetches from each remote, and merges in any changes that have been made+to the remotes too. Finally, it updates <code>synced/master</code> to reflect the new+state of <code>master</code>, and pushes it out to each of the remotes.</p>++<p>This way, changes propagate around between repositories as <code>git annex sync</code>+is run on each of them. Every repository does not need to be able to talk+to every other repository; as long as the graph of repositories is+connected, and <code>git annex sync</code> is run from time to time on each, a given+change, made anywhere, will eventually reach every other repository.</p>++<p>The workflow for using <code>git annex sync</code> is simple:</p>++<ul>+<li>Make some changes to files in the repository, using <code>git-annex</code>,+or anything else.</li>+<li>Run <code>git annex sync</code> to save the changes.</li>+<li>Next time you're working on a different clone of that repository,+run <code>git annex sync</code> to update it.</li>+</ul>+++</div>++++<div id="comments">+<div  class="feedlink">+++</div>+<div class="comment" id="comment-4214020597adf16b7ef35b641357c34a">++++<div class="comment-subject">++<a href="/sync.html#comment-4214020597adf16b7ef35b641357c34a">very nice</a>++</div>++<div class="inlinecontent">+Here's a way to get from a starting point of two or more peer directory trees <em>not</em> tracked by git or git-annex, to the point where they can be synced in the manner described above: <span class="createlink">syncing non-git trees with git-annex</span>++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://adamspiers.myopenid.com/">Adam</a>+</span>+++&mdash; <span class="date">Sat Feb 25 11:02:18 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-37997a5f56f061ccba8573346b830484">++++<div class="comment-subject">++<a href="/sync.html#comment-37997a5f56f061ccba8573346b830484">Its just grand</a>++</div>++<div class="inlinecontent">+<p>I cam upon git-annex a few months ago. I saw immidiately how it could help with some frustrations I've been having. One in particlar is keeping my vimrc in sync accross multiple locations and platforms. I finally took the time to give it a try after I finally hit my boiling point this morning. I went through the <a href="http://git-annex.branchable.com/walkthrough/">walkthrough</a> and now I have an annax everywhere I need it. <code>git annex sync</code> and my vimrc is up-to-date, simply grand!</p>++<p>Thanks so much for making git-annex,+<a href="http://woz.io">Daniel Wozniak</a></p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawlDDW-g2WLLsLpcnCm4LykAquFY_nwbIrU">Daniel</a>+</span>+++&mdash; <span class="date">Fri Jan  4 10:45:35 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-a93800cc4523d79b0baba1b64210e6a8">++++<div class="comment-subject">++<a href="/sync.html#comment-a93800cc4523d79b0baba1b64210e6a8">synchronising stored files with a bare repository</a>++</div>++<div class="inlinecontent">+Good for syncing indexes, but if I want to synchronise all data files too (specifically pushing to a remote bare repository), how do I do that?++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawnVX_teMpJeQkyheivad_1XSCFSjpiWgx8">Diggory</a>+</span>+++&mdash; <span class="date">Fri Jan 11 12:52:38 2013</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-460e386e29f24721d89fc9a6e21b52a0">++++<div class="comment-subject">++<a href="/sync.html#comment-460e386e29f24721d89fc9a6e21b52a0">comment 4</a>++</div>++<div class="inlinecontent">+Yes, sync only syncs the git branches, not git-annex data. To sync the date, you can run a command such as <code>git annex copy --to bareremote</code>. You could run that in cron. Or, the <a href="./assistant.html">assistant</a> can be run as a daemon, and automatically syncs git-annex data.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Fri Jan 11 14:18:07 2013</span>+</div>++++<div style="clear: both"></div>+</div>+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./how_it_works.html">how it works</a>++<a href="./links/key_concepts.html">links/key concepts</a>++<a href="./walkthrough/syncing.html">walkthrough/syncing</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:46 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:46 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/templates/bare.tmpl view
@@ -0,0 +1,1 @@+<TMPL_VAR CONTENT>
+ debian/git-annex/usr/share/doc/git-annex/html/templates/bugtemplate.html view
@@ -0,0 +1,137 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>bugtemplate</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../index.html">templates</a>/ ++</span>+<span class="title">+bugtemplate++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<h3>Please describe the problem.</h3>++<h3>What steps will reproduce the problem?</h3>++<h3>What version of git-annex are you using? On what operating system?</h3>++<h3>Please provide any additional information below.</h3>++<p>[[!format  sh """</p>++<h1>If you can, paste a complete transcript of the problem occurring here.</h1>++<h1>If the problem is with the git-annex assistant, paste in .git/annex/debug.log</h1>++<h1>End of transcript or log.</h1>++<p>"""]]</p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">++++++++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:46 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:46 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/templates/walkthrough.tmpl view
@@ -0,0 +1,2 @@+<h2><a href="<TMPL_VAR PAGEURL>"><TMPL_VAR TITLE></a></h2>+<TMPL_VAR CONTENT>
+ debian/git-annex/usr/share/doc/git-annex/html/testimonials.html view
@@ -0,0 +1,163 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>testimonials</title>++<link rel="stylesheet" href="style.css" type="text/css" />++<link rel="stylesheet" href="local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="./index.html">git-annex</a>/ ++</span>+<span class="title">+testimonials++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="./install.html">install</a></li>+<li><a href="./assistant.html">assistant</a></li>+<li><a href="./walkthrough.html">walkthrough</a></li>+<li><a href="./tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="./comments.html">comments</a></li>+<li><a href="./contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<div>+<blockquote class="twitter-tweet"><p>Git annex. Brilliant. Powerful. <a href="http://t.co/AM9B6peM" title="http://git-annex.branchable.com/">git-annex.branchable.com</a></p>&mdash; Gert van Dijk (@gertvdijk) <a href="https://twitter.com/gertvdijk/status/186456474246053888">April 1, 2012</a></blockquote>++<blockquote class="twitter-tweet"><p>git-annex is like dropbox without the chrome. <a href="http://t.co/qcENNt3g" title="http://git-annex.branchable.com/">git-annex.branchable.com</a></p>&mdash; Wil Chung (@iamwil) <a href="https://twitter.com/iamwil/status/185997581229367296">March 31, 2012</a></blockquote>++<blockquote class="twitter-tweet"><p>blender 2.62 + ffmpeg + dnxhd + git-annex = who needs final cut?</p>&mdash; cdotwright (@cdotwright) <a href="https://twitter.com/cdotwright/status/187645142864375808">April 4, 2012</a></blockquote>++<blockquote class="twitter-tweet"><p>I want <a href="https://twitter.com/search/%2523git">#git</a>-annex whereis for all the stuff (not) in my room.</p>&mdash; topr (@derwelle) <a href="https://twitter.com/derwelle/status/172356564072673280">February 22, 2012</a></blockquote>++</div>+++++<blockquote>+What excites me about GIT ANNEX is how it fundamentally tracks the+backup and availability of any data you own, and allows you to share+data with a large or small audience, ensuring that the data survives.+</blockquote>+++<p>-- Jason Scott <a href="http://ascii.textfiles.com/archives/3625">http://ascii.textfiles.com/archives/3625</a></p>++<p>Seen on IRC:</p>++<pre>+oh my god, git-annex is amazing+this is the revolution in fucking with gigantic piles of files that I've been waiting for+</pre>+++<p>And then my own story: I have a ton of drives. I have a lot of servers. I+live in a cabin on <strong>dialup</strong> and often have 1 hour on broadband in a week+to get everything I need. Without git-annex, managing all this would not be+possible. It works perfectly for me, not a surprise since I wrote it, but+still, it's a different level of "perfect" than anything I could put+together before. --<span class="createlink">Joey</span></p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./links/other_stuff.html">links/other stuff</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Fri Sep 28 01:45:57 2012</span>+<!-- Created <span class="date">Fri Sep 28 01:45:57 2012</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/tips.html view
@@ -0,0 +1,390 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>tips</title>++<link rel="stylesheet" href="style.css" type="text/css" />++<link rel="stylesheet" href="local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="./index.html">git-annex</a>/ ++</span>+<span class="title">+tips++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="./install.html">install</a></li>+<li><a href="./assistant.html">assistant</a></li>+<li><a href="./walkthrough.html">walkthrough</a></li>+<li><span class="selflink">tips</span></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="./comments.html">comments</a></li>+<li><a href="./contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>This page is a place to document tips and techniques for using git-annex.</p>++<div  class="feedlink">+++</div>+<p>++<a href="./tips/what_to_do_when_you_lose_a_repository.html">what to do when you lose a repository</a><br />++<i>+Posted <span class="date">Sat May  4 11:06:46 2013</span>++</i>+</p>+<p>++<a href="./tips/setup_a_public_repository_on_a_web_site.html">setup a public repository on a web site</a><br />++<i>+Posted <span class="date">Sat May  4 11:06:46 2013</span>++</i>+</p>+<p>++<a href="./tips/Decentralized_repository_behind_a_Firewall.html">Decentralized repository behind a Firewall</a><br />++<i>+Posted <span class="date">Sat May  4 11:06:46 2013</span>++</i>+</p>+<p>++<a href="./tips/Internet_Archive_via_S3.html">Internet Archive via S3</a><br />++<i>+Posted <span class="date">Sat May  4 11:06:46 2013</span>++</i>+</p>+<p>++<a href="./tips/replacing_Sparkleshare_or_dvcs-autosync_with_the_assistant.html">replacing Sparkleshare or dvcs-autosync with the assistant</a><br />++<i>+Posted <span class="date">Sat May  4 11:06:46 2013</span>++</i>+</p>+<p>++<a href="./tips/Using_Git-annex_as_a_web_browsing_assistant.html">Using Git-annex as a web browsing assistant</a><br />++<i>+Posted <span class="date">Sat May  4 11:06:46 2013</span>++</i>+</p>+<p>++<a href="./tips/using_gitolite_with_git-annex.html">using gitolite with git-annex</a><br />++<i>+Posted <span class="date">Sat May  4 11:06:46 2013</span>++</i>+</p>+<p>++<a href="./tips/using_Google_Cloud_Storage.html">using Google Cloud Storage</a><br />++<i>+Posted <span class="date">Sat May  4 11:06:46 2013</span>++</i>+</p>+<p>++<a href="./tips/Building_git-annex_on_Debian_OR___37____164____35____34____164____37____38____34____35___Haskell__33__.html">Building git-annex on Debian OR &#37;&#164;&#35;&#34;&#164;&#37;&#38;&#34;&#35; Haskell&#33;</a><br />++<i>+Posted <span class="date">Sat May  4 11:06:46 2013</span>++</i>+</p>+<p>++<a href="./tips/using_Amazon_S3.html">using Amazon S3</a><br />++<i>+Posted <span class="date">Sat May  4 11:06:46 2013</span>++</i>+</p>+<p>++<a href="./tips/assume-unstaged.html">using assume-unstages to speed up git with large trees of annexed files</a><br />++<i>+Posted <span class="date">Sat May  4 11:06:46 2013</span>++</i>+</p>+<p>++<a href="./tips/How_to_retroactively_annex_a_file_already_in_a_git_repo.html">How to retroactively annex a file already in a git repo</a><br />++<i>+Posted <span class="date">Sat May  4 11:06:46 2013</span>++</i>+</p>+<p>++<a href="./tips/using_Amazon_Glacier.html">using Amazon Glacier</a><br />++<i>+Posted <span class="date">Sat May  4 11:06:46 2013</span>++</i>+</p>+<p>++<a href="./tips/emacs_integration.html">emacs integration</a><br />++<i>+Posted <span class="date">Sat May  4 11:06:46 2013</span>++</i>+</p>+<p>++<a href="./tips/using_box.com_as_a_special_remote.html">using box.com as a special remote</a><br />++<i>+Posted <span class="date">Sat May  4 11:06:46 2013</span>++</i>+</p>+<p>++<a href="./tips/finding_duplicate_files.html">finding duplicate files</a><br />++<i>+Posted <span class="date">Fri Sep 28 01:45:57 2012</span>++</i>+</p>+<p>++<a href="./tips/using_git_annex_with_no_fixed_hostname_and_optimising_ssh.html">using git annex with no fixed hostname and optimising ssh</a><br />++<i>+Posted <span class="date">Fri Sep 28 01:45:57 2012</span>++</i>+</p>+<p>++<a href="./tips/using_the_web_as_a_special_remote.html">using the web as a special remote</a><br />++<i>+Posted <span class="date">Fri Sep 28 01:45:57 2012</span>++</i>+</p>+<p>++<a href="./tips/visualizing_repositories_with_gource.html">visualizing repositories with gource</a><br />++<i>+Posted <span class="date">Fri Sep 28 01:45:57 2012</span>++</i>+</p>+<p>++<a href="./tips/centralised_repository:_starting_from_nothing.html">centralised repository: starting from nothing</a><br />++<i>+Posted <span class="date">Fri Sep 28 01:45:57 2012</span>++</i>+</p>+<p>++<a href="./tips/migrating_data_to_a_new_backend.html">migrating data to a new backend</a><br />++<i>+Posted <span class="date">Fri Sep 28 01:45:57 2012</span>++</i>+</p>+<p>++<a href="./tips/centralized_git_repository_tutorial.html">centralized git repository tutorial</a><br />++<i>+Posted <span class="date">Fri Sep 28 01:45:57 2012</span>++</i>+</p>+<p>++<a href="./tips/powerful_file_matching.html">powerful file matching</a><br />++<i>+Posted <span class="date">Fri Sep 28 01:45:57 2012</span>++</i>+</p>+<p>++<a href="./tips/automatically_getting_files_on_checkout.html">automatically getting files on checkout</a><br />++<i>+Posted <span class="date">Fri Sep 28 01:45:57 2012</span>++</i>+</p>+<p>++<a href="./tips/what_to_do_when_a_repository_is_corrupted.html">what to do when a repository is corrupted</a><br />++<i>+Posted <span class="date">Fri Sep 28 01:45:57 2012</span>++</i>+</p>+<p>++<a href="./tips/recover_data_from_lost+found.html">recover data from lost+found</a><br />++<i>+Posted <span class="date">Fri Sep 28 01:45:57 2012</span>++</i>+</p>+<p>++<a href="./tips/untrusted_repositories.html">untrusted repositories</a><br />++<i>+Posted <span class="date">Fri Sep 28 01:45:57 2012</span>++</i>+</p>+<p>++<a href="./tips/using_the_SHA1_backend.html">using the SHA1 backend</a><br />++<i>+Posted <span class="date">Fri Sep 28 01:45:57 2012</span>++</i>+</p>++++++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./sidebar.html">sidebar</a>++<a href="./walkthrough/more.html">walkthrough/more</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Fri Sep 28 01:45:57 2012</span>+<!-- Created <span class="date">Fri Sep 28 01:45:57 2012</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/tips/assume-unstaged.html view
@@ -0,0 +1,188 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>using assume-unstages to speed up git with large trees of annexed files</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../tips.html">tips</a>/ ++</span>+<span class="title">+using assume-unstages to speed up git with large trees of annexed files++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>Git update-index's assume-unstaged feature can be used to speed+up <code>git status</code> and stuff by not statting the whole tree looking for changed+files.</p>++<p>This feature works quite well with git-annex. Especially because git+annex's files are immutable, so aren't going to change out from under it,+this is a nice fit. If you have a very large tree and <code>git status</code> is+annoyingly slow, you can turn it on:</p>++<pre><code>git config core.ignoreStat true+</code></pre>++<p>When git mv and git rm are used, those changes <em>do</em> get noticed, even+on assume-unchanged files. When new files are added, eg by <code>git annex add</code>,+they are also noticed.</p>++<p>There are two gotchas. Both occur because <code>git add</code> does not stage+assume-unchanged files.</p>++<ol>+<li>When an annexed file is moved to a different directory, it updates+the symlink, and runs <code>git add</code> on it. So the file will move,+but the changed symlink will not be noticed by git and it will commit a+dangling symlink.</li>+<li>When using <code>git annex migrate</code>, it changes the symlink and <code>git adds</code>+it. Again this won't be committed.</li>+</ol>+++<p>These can be worked around by running <code>git update-index --really-refresh</code>+after performing such operations. I hope that <code>git add</code> will be changed+to stage changes to assume-unchanged files, which would remove this+only complication. --<span class="createlink">Joey</span></p>++</div>++++<div id="comments">+<div  class="feedlink">+++</div>+<div class="comment" id="comment-f2b947110dbafdb39f0cc32de1d0dc1d">++++<div class="comment-subject">++<a href="/tips/assume-unstaged.html#comment-f2b947110dbafdb39f0cc32de1d0dc1d">It doesn&#x27;t work 100%</a>++</div>++<div class="inlinecontent">+When you remove tracked files... it doesn't show the new status. it's like if the file was ignored.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://me.yahoo.com/a/2djv2EYwk43rfJIAQXjYt_vfuOU-#a11a6">Olivier R</a>+</span>+++&mdash; <span class="date">Thu May  3 17:42:54 2012</span>+</div>++++<div style="clear: both"></div>+</div>+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">++++++++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:46 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:46 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/tips/emacs_integration.html view
@@ -0,0 +1,140 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>emacs integration</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../tips.html">tips</a>/ ++</span>+<span class="title">+emacs integration++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>bergey has developed an emacs mode for browsing git-annex repositories,+dired style.</p>++<p><a href="https://gitorious.org/emacs-contrib/annex-mode">https://gitorious.org/emacs-contrib/annex-mode</a></p>++<p>Locally available files are colored differently, and pressing g runs+<code>git annex get</code> on the file at point.</p>++<hr />++<p>John Wiegley has developed a brand new git-annex interaction mode for+Emacs, which aims to integrate with the standard facilities+(C-x C-q, M-x dired, etc) rather than invent its own interface.</p>++<p><a href="https://github.com/jwiegley/git-annex-el">https://github.com/jwiegley/git-annex-el</a></p>++<p>He has also added support to org-attach; if+<code>org-attach-git-annex-cutoff' is non-nil and smaller than the size+ of the file you're attaching then org-attach will</code>git annex add the+file`; otherwise it will "git add" it.</p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">++++++++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:46 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:46 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/tips/using_Amazon_Glacier.html view
@@ -0,0 +1,210 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>using Amazon Glacier</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../tips.html">tips</a>/ ++</span>+<span class="title">+using Amazon Glacier++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>Amazon Glacier provides low-cost storage, well suited for archiving and+backup. But it takes around 4 hours to get content out of Glacier.</p>++<p>Recent versions of git-annex support Glacier. To use it, you need to have+<a href="http://github.com/basak/glacier-cli">glacier-cli</a> installed.</p>++<p>First, export your Amazon AWS credentials:</p>++<pre><code>    # export AWS_ACCESS_KEY_ID="08TJMT99S3511WOZEP91"+    # export AWS_SECRET_ACCESS_KEY="s3kr1t"+</code></pre>++<p>Now, create a gpg key, if you don't already have one. This will be used+to encrypt everything stored in Glacier, for your privacy. Once you have+a gpg key, run <code>gpg --list-secret-keys</code> to look up its key id, something+like "2512E3C7"</p>++<p>Next, create the Glacier remote.</p>++<pre><code># git annex initremote glacier type=glacier encryption=2512E3C7+initremote glacier (encryption setup with gpg key C910D9222512E3C7) (gpg) ok+</code></pre>++<p>The configuration for the Glacier remote is stored in git. So to make another+repository use the same Glacier remote is easy:</p>++<pre><code>    # cd /media/usb/annex+    # git pull laptop+    # git annex initremote glacier+    initremote glacier (gpg) ok+</code></pre>++<p>Now the remote can be used like any other remote.</p>++<pre><code>    # git annex move my_cool_big_file --to glacier+    copy my_cool_big_file (gpg) (checking glacier...) (to glacier...) ok+</code></pre>++<p>But, when you try to get a file out of Glacier, it'll queue a retrieval+job:</p>++<pre><code># git annex get my_cool_big_file+get my_cool_big_file (from glacier...) (gpg)+glacier: queued retrieval job for archive 'GPGHMACSHA1--862afd4e67e3946587a9ef7fa5beb4e8f1aeb6b8'+  Recommend you wait up to 4 hours, and then run this command again.+failed+</code></pre>++<p>Like it says, you'll need to run the command again later. Let's remember to+do that:</p>++<pre><code># at now + 4 hours+at&gt; git annex get my_cool_big_file+</code></pre>++<p>Another oddity of Glacier is that git-annex is never entirely sure+if a file is still in Glacier. Glacier inventories take hours to retrieve,+and even when retrieved do not necessarily represent the current state.</p>++<p>So, git-annex plays it safe, and avoids trusting the inventory:</p>++<pre><code># git annex copy important_file --to glacier+copy important_file (gpg) (checking glacier...) (to glacier...) ok+# git annex drop important_file+drop important_file (gpg) (checking glacier...)+  Glacier's inventory says it has a copy.+  However, the inventory could be out of date, if it was recently removed.+  (Use --trust-glacier if you're sure it's still in Glacier.)++(unsafe) +  Could only verify the existence of 0 out of 1 necessary copies+</code></pre>++<p>Like it says, you can use <code>--trust-glacier</code> if you're sure+Glacier's inventory is correct and up-to-date.</p>++<p>A final potential gotcha with Glacier is that glacier-cli keeps a local+mapping of file names to Glacier archives. If this cache is lost, or+you want to retrieve files on a different box than the one that put them in+glacier, you'll need to use <code>glacier vault sync</code> to rebuild this cache.</p>++<p>See <a href="../special_remotes/glacier.html">Glacier</a> for details.</p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="../special_remotes.html">special remotes</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:46 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:46 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/tips/using_Amazon_S3.html view
@@ -0,0 +1,239 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>using Amazon S3</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../tips.html">tips</a>/ ++</span>+<span class="title">+using Amazon S3++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>git-annex extends git's usual remotes with some <a href="../special_remotes.html">special remotes</a>, that+are not git repositories. This way you can set up a remote using say,+Amazon S3, and use git-annex to transfer files into the cloud.</p>++<p>First, export your Amazon AWS credentials:</p>++<pre><code># export AWS_ACCESS_KEY_ID="08TJMT99S3511WOZEP91"+# export AWS_SECRET_ACCESS_KEY="s3kr1t"+</code></pre>++<p>Now, create a gpg key, if you don't already have one. This will be used+to encrypt everything stored in S3, for your privacy. Once you have+a gpg key, run <code>gpg --list-secret-keys</code> to look up its key id, something+like "2512E3C7"</p>++<p>Next, create the S3 remote, and describe it.</p>++<pre><code># git annex initremote cloud type=S3 encryption=2512E3C7+initremote cloud (encryption setup with gpg key C910D9222512E3C7) (checking bucket) (creating bucket in US) (gpg) ok+# git annex describe cloud "at Amazon's US datacenter"+describe cloud ok+</code></pre>++<p>The configuration for the S3 remote is stored in git. So to make another+repository use the same S3 remote is easy:</p>++<pre><code># cd /media/usb/annex+# git pull laptop+# git annex initremote cloud+initremote cloud (gpg) (checking bucket) ok+</code></pre>++<p>Now the remote can be used like any other remote.</p>++<pre><code># git annex copy my_cool_big_file --to cloud+copy my_cool_big_file (gpg) (checking cloud...) (to cloud...) ok+# git annex move video/hackity_hack_and_kaxxt.mov --to cloud+move video/hackity_hack_and_kaxxt.mov (checking cloud...) (to cloud...) ok+</code></pre>++<p>See <a href="../special_remotes/S3.html">S3</a> for details.</p>++</div>++++<div id="comments">+<div  class="feedlink">+++</div>+<div class="comment" id="comment-ffb374370bd464243362838201609e33">++++<div class="comment-subject">++<a href="/tips/using_Amazon_S3.html#comment-ffb374370bd464243362838201609e33">ANNEX_S3 vs AWS for keys</a>++</div>++<div class="inlinecontent">+The instructions state ANNEX_S3_ACCESS_KEY_ID and ANNEX_SECRET_ACCESS_KEY but git-annex cannot connect with those constants. git-annex tells me to set both "AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY" instead, which works. This is with Xubuntu 12.04.++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawnoUOqs_lbuWyZBqyU6unHgUduJwDDgiKY">Matt</a>+</span>+++&mdash; <span class="date">Tue May 29 08:24:25 2012</span>+</div>++++<div style="clear: both"></div>+</div>+<div class="comment" id="comment-7f18ee038ed2bb0c5099f2bd015b6fdd">++++<div class="comment-subject">++<a href="/tips/using_Amazon_S3.html#comment-7f18ee038ed2bb0c5099f2bd015b6fdd">comment 2</a>++</div>++<div class="inlinecontent">+Thanks, I've fixed that. (You could have too.. this is a wiki ;)++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="http://joeyh.name/">joeyh.name</a>+</span>+++&mdash; <span class="date">Tue May 29 15:10:42 2012</span>+</div>++++<div style="clear: both"></div>+</div>+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="../design/encryption.html">design/encryption</a>++<a href="../special_remotes.html">special remotes</a>++<a href="../special_remotes/S3.html">special remotes/S3</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:46 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:46 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/transferring_data.html view
@@ -0,0 +1,148 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>transferring data</title>++<link rel="stylesheet" href="style.css" type="text/css" />++<link rel="stylesheet" href="local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="./index.html">git-annex</a>/ ++</span>+<span class="title">+transferring data++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="./install.html">install</a></li>+<li><a href="./assistant.html">assistant</a></li>+<li><a href="./walkthrough.html">walkthrough</a></li>+<li><a href="./tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="./comments.html">comments</a></li>+<li><a href="./contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>git-annex can transfer data to or from any of a repository's git remotes.+Depending on where the remote is, the data transfer is done using rsync+(over ssh or locally), or plain cp (with copy-on-write+optimisations on supported filesystems), or using curl (for repositories+on the web). Some <a href="./special_remotes.html">special remotes</a> are also supported that are not+traditional git remotes.</p>++<p>If a data transfer is interrupted, git-annex retains the partial transfer+to allow it to be automatically resumed later.</p>++<p>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+repositories they are scattered amongst.</p>++<p>git-annex automatically uses whatever remotes are currently accessible,+preferring ones that are less expensive to talk to.</p>++<table class="img"><caption>A real-world repository interconnection map+(generated by git-annex map)</caption><tr><td><a href="./repomap.png"><img src="./repomap.png" width="640" height="533" class="img" /></a></td></tr></table>+++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./how_it_works.html">how it works</a>++<a href="./use_case/Alice.html">use case/Alice</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Fri Sep 28 01:45:57 2012</span>+<!-- Created <span class="date">Fri Sep 28 01:45:57 2012</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/trust.html view
@@ -0,0 +1,198 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>trust</title>++<link rel="stylesheet" href="style.css" type="text/css" />++<link rel="stylesheet" href="local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="./index.html">git-annex</a>/ ++</span>+<span class="title">+trust++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="./install.html">install</a></li>+<li><a href="./assistant.html">assistant</a></li>+<li><a href="./walkthrough.html">walkthrough</a></li>+<li><a href="./tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="./comments.html">comments</a></li>+<li><a href="./contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>Git-annex supports several levels of trust of a repository:</p>++<ul>+<li>semitrusted (default)</li>+<li>untrusted</li>+<li>trusted</li>+<li>dead</li>+</ul>+++<h2>semitrusted</h2>++<p>Normally, git-annex does not fully trust its stored <a href="./location_tracking.html">location tracking</a>+information. When removing content, it will directly check+that other repositories have enough <a href="./copies.html">copies</a>.</p>++<p>Generally that explicit checking is a good idea. Consider that the current+<a href="./location_tracking.html">location tracking</a> information for a remote may not yet have propagated+out. Or, a remote may have suffered a catastrophic loss of data, or itself+been lost.</p>++<p>There is still some trust involved here. A semitrusted repository is+depended on to retain a copy of the file content; possibly the only+<a href="./copies.html">copy</a>.</p>++<p>(Being semitrusted is the default. The <code>git annex semitrust</code> command+restores a repository to this default, when it has been overridden.+The <code>--semitrust</code> option can temporarily restore a repository to this+default.)</p>++<h2>untrusted</h2>++<p>An untrusted repository is not trusted to retain data at all. Git-annex+will retain sufficient <a href="./copies.html">copies</a> of data elsewhere.</p>++<p>This is a good choice for eg, portable drives that could get lost. Or,+if a disk is known to be dying, you can set it to untrusted and let+<code>git annex fsck</code> warn about data that needs to be copied off it.</p>++<p>To configure a repository as untrusted, use the <code>git annex untrust</code>+command.</p>++<h2>trusted</h2>++<p>Sometimes, you may have reasons to fully trust the location tracking+information for a repository. For example, it may be an offline+archival drive, from which you rarely or never remove content. Deciding+when it makes sense to trust the tracking info is up to you.</p>++<p>One way to handle this is just to use <code>--force</code> when a command cannot+access a remote you trust. Or to use <code>--trust</code> to specify a repisitory to+trust temporarily.</p>++<p>To configure a repository as fully and permanently trusted,+use the <code>git annex trust</code> command.</p>++<h2>dead</h2>++<p>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+even showing the repository as a place where data might still reside.</p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./copies.html">copies</a>++<a href="./internals.html">internals</a>++<a href="./location_tracking.html">location tracking</a>++<a href="./tips/untrusted_repositories.html">tips/untrusted repositories</a>++<a href="./tips/using_the_web_as_a_special_remote.html">tips/using the web as a special remote</a>++<a href="./walkthrough/removing_files:_When_things_go_wrong.html">walkthrough/removing files: When things go wrong</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Fri Sep 28 01:45:57 2012</span>+<!-- Created <span class="date">Fri Sep 28 01:45:57 2012</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/upgrades.html view
@@ -0,0 +1,227 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>upgrades</title>++<link rel="stylesheet" href="style.css" type="text/css" />++<link rel="stylesheet" href="local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="./index.html">git-annex</a>/ ++</span>+<span class="title">+upgrades++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="./install.html">install</a></li>+<li><a href="./assistant.html">assistant</a></li>+<li><a href="./walkthrough.html">walkthrough</a></li>+<li><a href="./tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="./comments.html">comments</a></li>+<li><a href="./contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>Occasionally improvments 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.</p>++<p>There's a committment 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.</p>++<p>git-annex will notice if it is run in a repository that+needs an upgrade, and refuse to do anything. To upgrade,+use the "git annex upgrade" command.</p>++<p>The upgrade process is guaranteed to be conflict-free. Unless you+already have git conflicts in your repository or between repositories.+Upgrading a repository with conflicts is not recommended; resolve the+conflicts first before upgrading git-annex.</p>++<h2>Upgrade events, so far</h2>++<h3>v3 -&gt; v4 (git-annex version 4.x)</h3>++<p>v4 is only used for <a href="./direct_mode.html">direct mode</a>, and no upgrade needs to be done from+existing v3 repositories, they will continue to work.</p>++<h3>v2 -&gt; v3 (git-annex version 3.x)</h3>++<p>Involved moving the .git-annex/ directory into a separate git-annex branch.</p>++<p>After this upgrade, you should make sure you include the git-annex branch+when git pushing and pulling.</p>++<h3>tips for this upgrade</h3>++<p>This upgrade is easier (and faster!) than the previous upgrades.+You don't need to upgrade every repository at once; it's sufficient+to upgrade each repository only when you next use it.</p>++<p>Example upgrade process:</p>++<pre><code>cd localrepo+git pull+git annex upgrade+git commit -m "upgrade v2 to v3"+git gc+</code></pre>++<h3>v1 -&gt; v2 (git-annex version 0.20110316)</h3>++<p>Involved adding hashing to .git/annex/ and changing the names of all keys.+Symlinks changed.</p>++<p>Also, hashing was added to location log files in .git-annex/.+And .gitattributes needed to have another line added to it.</p>++<p>Previously, files added to the SHA <a href="./backends.html">backends</a> did not have their file+size tracked, while files added to the WORM backend did. Files added to+the SHA backends after the conversion will have their file size tracked,+and that information will be used by git-annex for disk free space checking.+To ensure that information is available for all your annexed files, see+<a href="./upgrades/SHA_size.html">SHA size</a>.</p>++<h3>tips for this upgrade</h3>++<p>This upgrade can tend to take a while, if you have a lot of files.</p>++<p>Each clone of a repository should be individually upgraded.+Until a repository's remotes have been upgraded, git-annex+will refuse to communicate with them.</p>++<p>Start by upgrading one repository, and then you can commit+the changes git-annex staged during upgrade, and push them out to other+repositories. And then upgrade those other repositories. Doing it this+way avoids git-annex doing some duplicate work during the upgrade.</p>++<p>Example upgrade process:</p>++<pre><code>cd localrepo+git pull+git annex upgrade+git commit -m "upgrade v1 to v2"+git push++ssh remote+cd remoterepo+git pull+git annex upgrade+...+</code></pre>++<h3>v0 -&gt; v1 (git-annex version 0.04)</h3>++<p>Involved a reorganisation of the layout of .git/annex/. Symlinks changed.</p>++<p>Handled more or less transparently, although git-annex was just 2 weeks+old at the time, and had few users other than Joey.</p>++<p>Before doing this upgrade, set annex.version:</p>++<pre><code>git config annex.version 0+</code></pre>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./upgrades/SHA_size.html">upgrades/SHA size</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:46 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:46 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/upgrades/SHA_size.html view
@@ -0,0 +1,189 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>SHA size</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../upgrades.html">upgrades</a>/ ++</span>+<span class="title">+SHA size++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>Before version 2 of the git-annex repository, files added to the SHA+<a href="../backends.html">backends</a> did not have their file size tracked, while files added to the+WORM backend did. The file size information is used for disk free space+checking.</p>++<p>Files added to the SHA backends after the conversion will have their file+size tracked automatically. This disk free space checking is an optional+feature and since you're more likely to be using more recently added files,+you're unlikely to see any bad effect if you do nothing.</p>++<p>That said, if you have old files added to SHA backends that lack file size+tracking info, here's how you can add that info. After <a href="../upgrades.html">upgrading</a>+to repository version 2, in each repository run:</p>++<pre><code>git annex migrate+git commit -m 'migrated keys for v2'+</code></pre>++<p>The usual caveats about <a href="../tips/migrating_data_to_a_new_backend.html">migrating data to a new backend</a>+apply; you will end up with unused keys that you can later clean up with+<code>git annex unused</code>.</p>++</div>++++<div id="comments">+<div  class="feedlink">+++</div>+<div class="comment" id="comment-376cc462e818489fa3c78eccc99b6f7f">++++<div class="comment-subject">++<a href="/upgrades/SHA_size.html#comment-376cc462e818489fa3c78eccc99b6f7f">The fact that the keys changed causes merge conflicts</a>++</div>++<div class="inlinecontent">+<p>FYI, I have run into a problem where if you 'git annex sync' between various 'git annex v3' repositories, if the different repositories are using different encodings of the SHA1 information (one including size, one not), then the 'git merge' will declare that they conflict.</p>++<p>There's no indication that 'git annex migrate' is the right tool to run, except from perusing the 'git annex' man page. In my opinion this is a major user interface problem.</p>++<p>-- Asheesh.</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="OpenID">+<a href="https://www.google.com/accounts/o8/id?id=AItOawkjvjLHW9Omza7x1VEzIFQ8Z5honhRB90I">Asheesh</a>+</span>+++&mdash; <span class="date">Sun Jun 24 20:28:59 2012</span>+</div>++++<div style="clear: both"></div>+</div>+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="../upgrades.html">upgrades</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Fri Sep 28 01:45:57 2012</span>+<!-- Created <span class="date">Fri Sep 28 01:45:57 2012</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/use_case/Alice.html view
@@ -0,0 +1,144 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>Alice</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../index.html">use case</a>/ ++</span>+<span class="title">+Alice++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<h3>use case: The Nomad</h3>++<p>Alice is always on the move, often with her trusty netbook and a small+handheld terabyte USB drive, or a smaller USB keydrive. She has a server+out there on the net. She stores data, encrypted in the Cloud.</p>++<p>All these things can have different files on them, but Alice no longer+has to deal with the tedious process of keeping them manually in sync,+or remembering where she put a file. git-annex manages all these data+sources as if they were git remotes.<br/>+<small><a href="../special_remotes.html">more about special remotes</a></small></p>++<p>When she has 1 bar on her cell, Alice queues up interesting files on her+server for later. At a coffee shop, she has git-annex download them to her+USB drive. High in the sky or in a remote cabin, she catches up on+podcasts, videos, and games, first letting git-annex copy them from+her USB drive to the netbook (this saves battery power).<br/>+<small><a href="../transferring_data.html">more about transferring data</a></small></p>++<p>When she's done, she tells git-annex which to keep and which to remove.+They're all removed from her netbook to save space, and Alice knows+that next time she syncs up to the net, her changes will be synced back+to her server.<br/>+<small><a href="../distributed_version_control.html">more about distributed version control</a></small></p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">++++++++++++<div class="pagedate">+Last edited <span class="date">Fri Sep 28 01:45:57 2012</span>+<!-- Created <span class="date">Fri Sep 28 01:45:57 2012</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/use_case/Bob.html view
@@ -0,0 +1,153 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>Bob</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../index.html">use case</a>/ ++</span>+<span class="title">+Bob++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<h3>use case: The Archivist</h3>++<p>Bob has many drives to archive his data, most of them kept offline, in a+safe place.</p>++<p>With git-annex, Bob has a single directory tree that includes all+his files, even if their content is being stored offline. He can+reorganize his files using that tree, committing new versions to git,+without worry about accidentally deleting anything.</p>++<p>When Bob needs access to some files, git-annex can tell him which drive(s)+they're on, and easily make them available. Indeed, every drive knows what+is on every other drive.<br/>+<small><a href="../location_tracking.html">more about location tracking</a></small></p>++<p>Bob thinks long-term, and so he appreciates that git-annex uses a simple+repository format. He knows his files will be accessible in the future+even if the world has forgotten about git-annex and git.<br/>+<small><a href="../future_proofing.html">more about future-proofing</a></small></p>++<p>Run in a cron job, git-annex adds new files to archival drives at night. It+also helps Bob keep track of intentional, and unintentional copies of+files, and logs information he can use to decide when it's time to duplicate+the content of old drives.<br/>+<small><a href="../copies.html">more about backup copies</a></small></p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="../not.html">not</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Fri Sep 28 01:45:57 2012</span>+<!-- Created <span class="date">Fri Sep 28 01:45:57 2012</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/users.html view
@@ -0,0 +1,148 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>users</title>++<link rel="stylesheet" href="style.css" type="text/css" />++<link rel="stylesheet" href="local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="./index.html">git-annex</a>/ ++</span>+<span class="title">+users++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="./install.html">install</a></li>+<li><a href="./assistant.html">assistant</a></li>+<li><a href="./walkthrough.html">walkthrough</a></li>+<li><a href="./tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="./comments.html">comments</a></li>+<li><a href="./contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>Users of this wiki, feel free to create a subpage of this one and talk+about yourself on it, within reason. You can link to it to sign your+comments.</p>++<h1>List of users</h1>++<p>++<a href="./users/chrysn.html">chrysn</a>++</p>+<p>++<a href="./users/fmarier.html">fmarier</a>++</p>+<p>++<a href="./users/gebi.html">gebi</a>++</p>+<p>++<a href="./users/joey.html">joey</a>++</p>++++++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">++++++++++++<div class="pagedate">+Last edited <span class="date">Fri Sep 28 01:45:57 2012</span>+<!-- Created <span class="date">Fri Sep 28 01:45:57 2012</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/users/chrysn.html view
@@ -0,0 +1,128 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>chrysn</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../users.html">users</a>/ ++</span>+<span class="title">+chrysn++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<ul>+<li><strong>name</strong>: chrysn</li>+<li><strong>website</strong>: <a href="http://christian.amsuess.com/">http://christian.amsuess.com/</a></li>+<li><strong>uses git-annex for</strong>: managing the family's photos (and possibly videos and music in the future)</li>+<li><strong>likes git-annex because</strong>: it adds a layer of commit semantics over a regular file system without keeping everything in duplicate locally</li>+<li><strong>would like git-annex to</strong>: not be required any more as git itself learns to use cow filesystems to avoid abundant disk usage and gets better with sparser checkouts (git-annex might then still be a simpler tool that watches over what can be safely dropped for a sparser checkout)</li>+</ul>+++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">++++++++++++<div class="pagedate">+Last edited <span class="date">Fri Sep 28 01:45:57 2012</span>+<!-- Created <span class="date">Fri Sep 28 01:45:57 2012</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/users/fmarier.html view
@@ -0,0 +1,129 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>fmarier</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../users.html">users</a>/ ++</span>+<span class="title">+fmarier++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<h1>François Marier</h1>++<p>Free Software and Debian Developer. Lead developer of <a href="https://www.libravatar.org">Libravatar</a></p>++<ul>+<li><a href="http://feeding.cloud.geek.nz">Blog</a> and <a href="http://fmarier.org">homepage</a></li>+<li><a href="http://identi.ca/fmarier">Identica</a> / <a href="https://twitter.com/fmarier">Twitter</a></li>+</ul>+++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">++++++++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:46 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:46 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/users/gebi.html view
@@ -0,0 +1,121 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>gebi</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../users.html">users</a>/ ++</span>+<span class="title">+gebi++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>Michael Gebetsroither <a href="mailto:michael@mgeb.org">&#x6d;&#x69;&#99;&#104;&#x61;&#101;&#108;&#64;&#109;&#x67;&#101;&#98;&#x2e;&#x6f;&#x72;&#x67;</a></p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">++++++++++++<div class="pagedate">+Last edited <span class="date">Fri Sep 28 01:45:57 2012</span>+<!-- Created <span class="date">Fri Sep 28 01:45:57 2012</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/users/joey.html view
@@ -0,0 +1,122 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>joey</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../users.html">users</a>/ ++</span>+<span class="title">+joey++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>Joey Hess <a href="mailto:joey@kitenet.net">&#x6a;&#x6f;&#101;&#x79;&#64;&#107;&#105;&#116;&#x65;&#x6e;&#101;&#x74;&#46;&#x6e;&#101;&#116;</a><br/>+<a href="http://kitenet.net/~joey/">http://kitenet.net/~joey/</a></p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">++++++++++++<div class="pagedate">+Last edited <span class="date">Fri Sep 28 01:45:57 2012</span>+<!-- Created <span class="date">Fri Sep 28 01:45:57 2012</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/videos.html view
@@ -0,0 +1,275 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>videos</title>++<link rel="stylesheet" href="style.css" type="text/css" />++<link rel="stylesheet" href="local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="./index.html">git-annex</a>/ ++</span>+<span class="title">+videos++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="./install.html">install</a></li>+<li><a href="./assistant.html">assistant</a></li>+<li><a href="./walkthrough.html">walkthrough</a></li>+<li><a href="./tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="./comments.html">comments</a></li>+<li><a href="./contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>Talks and screencasts about git-annex.</p>++<p>These videos are also available in a public git-annex repository+<code>git clone http://downloads.kitenet.net/.git/</code></p>++<div  class="feedlink">+++</div>+<div class="inlinepage">++<div class="inlineheader">++<span class="header">++<a href="./videos/git-annex_assistant_archiving.html">git-annex assistant archiving</a>++</span>+</div>++<div class="inlinecontent">+<p><video controls width="400">+<source src="http://downloads.kitenet.net/videos/git-annex/git-annex-assistant-archiving.ogv">+</video><br>+A <a href="http://downloads.kitenet.net/videos/git-annex/git-annex-assistant-archiving.ogv">9 minute screencast</a>+covering archiving your files with the <a href="./assistant.html">git-annex assistant</a></a>.</p>++</div>++<div class="inlinefooter">++<span class="pagedate">+Posted <span class="date">Sat May  4 11:06:46 2013</span>+</span>++++++++++</div>++</div>+<div class="inlinepage">++<div class="inlineheader">++<span class="header">++<a href="./videos/git-annex_assistant_remote_sharing.html">git-annex assistant remote sharing</a>++</span>+</div>++<div class="inlinecontent">+<p><video controls width="400">+<source src="http://downloads.kitenet.net/videos/git-annex/git-annex-xmpp-pairing.ogv">+</video><br>+A <a href="http://downloads.kitenet.net/videos/git-annex/git-annex-xmpp-pairing.ogv">6 minute screencast</a>+showing how to share files between your computers in different locations,+such as home and work.</p>++</div>++<div class="inlinefooter">++<span class="pagedate">+Posted <span class="date">Sat May  4 11:06:46 2013</span>+</span>++++++++++</div>++</div>++++++<p>++<a href="./videos/git-annex_assistant_introduction.html">git-annex assistant introduction</a><br />++<i>+Posted <span class="date">Sat May  4 11:06:46 2013</span>++</i>+</p>+<p>++<a href="./videos/LCA2013.html">git-annex presentation by Joey Hess at Linux.Conf.Au 2013</a><br />++<i>+Posted <span class="date">Fri Feb  1 00:00:00 2013</span>++</i>+</p>+<p>++<a href="./videos/git-annex_weppapp_demo.html">git-annex weppapp demo</a><br />++<i>+Posted <span class="date">Sun Jul 29 14:41:41 2012</span>++</i>+</p>+<p>++<a href="./videos/git-annex_assistant_sync_demo.html">git-annex assistant sync demo</a><br />++<i>+Posted <span class="date">Thu Jul  5 18:36:06 2012</span>++</i>+</p>+<p>++<a href="./videos/git-annex_watch_demo.html">git-annex watch demo</a><br />++<i>+Posted <span class="date">Mon Jun 11 16:02:14 2012</span>++</i>+</p>+<p>++<a href="./videos/FOSDEM2012.html">git-annex presentation by Richard Hartmann at FOSDEM 2012</a><br />++<i>+Posted <span class="date">Sun Jan  1 00:00:00 2012</span>++</i>+</p>++++++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./design/assistant.html">design/assistant</a>++<a href="./footer/column_b.html">footer/column b</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:46 2013</span>+<!-- Created <span class="date">Sat May  4 11:06:46 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/videos/FOSDEM2012.html view
@@ -0,0 +1,123 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>git-annex presentation by Richard Hartmann at FOSDEM 2012</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../videos.html">videos</a>/ ++</span>+<span class="title">+git-annex presentation by Richard Hartmann at FOSDEM 2012++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p><video controls src="http://video.fosdem.org/2012/lightningtalks/git_annex___manage_files_with_git,_without_checking_their_contents_into_git.webm"></video><br>+A <a href="http://video.fosdem.org/2012/lightningtalks/git_annex___manage_files_with_git,_without_checking_their_contents_into_git.webm">15 minute introduction to git-annex</a>,+presented by Richard Hartmann at FOSDEM 2012.</p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">++++++++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:46 2013</span>+<!-- Created <span class="date">Sun Jan  1 00:00:00 2012</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/videos/LCA2013.html view
@@ -0,0 +1,125 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>git-annex presentation by Joey Hess at Linux.Conf.Au 2013</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../videos.html">videos</a>/ ++</span>+<span class="title">+git-annex presentation by Joey Hess at Linux.Conf.Au 2013++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p><video controls>+<source type="video/mp4" src="http://mirror.linux.org.au/linux.conf.au/2013/mp4/gitannex.mp4">+<source type="video/ogg" src="http://mirror.linux.org.au/linux.conf.au/2013/ogv/gitannex.ogv">+</video><br>+A <a href="http://mirror.linux.org.au/linux.conf.au/2013/mp4/gitannex.mp4">45 minute talk and demo of git-annex and the assistant</a>), presented by Joey Hess at LCA 2013.</p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">++++++++++++<div class="pagedate">+Last edited <span class="date">Sat May  4 11:06:46 2013</span>+<!-- Created <span class="date">Fri Feb  1 00:00:00 2013</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/walkthrough.html view
@@ -0,0 +1,607 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>walkthrough</title>++<link rel="stylesheet" href="style.css" type="text/css" />++<link rel="stylesheet" href="local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="./index.html">git-annex</a>/ ++</span>+<span class="title">+walkthrough++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="./logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="./install.html">install</a></li>+<li><a href="./assistant.html">assistant</a></li>+<li><span class="selflink">walkthrough</span></li>+<li><a href="./tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="./comments.html">comments</a></li>+<li><a href="./contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>A walkthrough of the basic features of git-annex.</p>++<div class="toc">+	<ol>+		<li class="L2"><a href="#index1h2">creating a repository</a>+		</li>+		<li class="L2"><a href="#index2h2">adding a remote</a>+		</li>+		<li class="L2"><a href="#index3h2">adding files</a>+		</li>+		<li class="L2"><a href="#index4h2">renaming files</a>+		</li>+		<li class="L2"><a href="#index5h2">getting file content</a>+		</li>+		<li class="L2"><a href="#index6h2">syncing</a>+		</li>+		<li class="L2"><a href="#index7h2">transferring files: When things go wrong</a>+		</li>+		<li class="L2"><a href="#index8h2">removing files</a>+		</li>+		<li class="L2"><a href="#index9h2">removing files: When things go wrong</a>+		</li>+		<li class="L2"><a href="#index10h2">modifying annexed files</a>+		</li>+		<li class="L2"><a href="#index11h2">using ssh remotes</a>+		</li>+		<li class="L2"><a href="#index12h2">moving file content between repositories</a>+		</li>+		<li class="L2"><a href="#index13h2">unused data</a>+		</li>+		<li class="L2"><a href="#index14h2">fsck: verifying your data</a>+		</li>+		<li class="L2"><a href="#index15h2">fsck: when things go wrong</a>+		</li>+		<li class="L2"><a href="#index16h2">backups</a>+		</li>+		<li class="L2"><a href="#index17h2">automatically managing content</a>+		</li>+		<li class="L2"><a href="#index18h2">more</a>+		</li>+	</ol>+</div>+++++<h2><a name="index1h2"></a><a href="./walkthrough/creating_a_repository.html">creating a repository</a></h2>+<p>This is very straightforward. Just tell it a description of the repository.</p>++<pre><code># mkdir ~/annex+# cd ~/annex+# git init+# git annex init "my laptop"+</code></pre>++<h2><a name="index2h2"></a><a href="./walkthrough/adding_a_remote.html">adding a remote</a></h2>+<p>Like any other git repository, git-annex repositories have remotes.+Let's start by adding a USB drive as a remote.</p>++<pre><code># sudo mount /media/usb+# cd /media/usb+# git clone ~/annex+# cd annex+# git annex init "portable USB drive"+# git remote add laptop ~/annex+# cd ~/annex+# git remote add usbdrive /media/usb/annex+</code></pre>++<p>This is all standard ad-hoc distributed git repository setup.+The only git-annex specific part is telling it the name+of the new repository created on the USB drive.</p>++<p>Notice that both repos are set up as remotes of one another. This lets+either get annexed files from the other. You'll want to do that even+if you are using git in a more centralized fashion.</p>++<h2><a name="index3h2"></a><a href="./walkthrough/adding_files.html">adding files</a></h2>+<pre><code># cd ~/annex+# cp /tmp/big_file .+# cp /tmp/debian.iso .+# git annex add .+add big_file (checksum...) ok+add debian.iso (checksum...) ok+# git commit -a -m added+</code></pre>++<p>When you add a file to the annex and commit it, only a symlink to+the annexed content is committed. The content itself is stored in+git-annex's backend.</p>++<h2><a name="index4h2"></a><a href="./walkthrough/renaming_files.html">renaming files</a></h2>+<pre><code># cd ~/annex+# git mv big_file my_cool_big_file+# mkdir iso+# git mv debian.iso iso/+# git commit -m moved+</code></pre>++<p>You can use any normal git operations to move files around, or even+make copies or delete them.</p>++<p>Notice that, since annexed files are represented by symlinks,+the symlink will break when the file is moved into a subdirectory.+But, git-annex will fix this up for you when you commit --+it has a pre-commit hook that watches for and corrects broken symlinks.</p>++<h2><a name="index5h2"></a><a href="./walkthrough/getting_file_content.html">getting file content</a></h2>+<p>A repository does not always have all annexed file contents available.+When you need the content of a file, you can use "git annex get" to+make it available.</p>++<p>We can use this to copy everything in the laptop's annex to the+USB drive.</p>++<pre><code># cd /media/usb/annex+# git fetch laptop; git merge laptop/master+# git annex get .+get my_cool_big_file (from laptop...) ok+get iso/debian.iso (from laptop...) ok+</code></pre>++<h2><a name="index6h2"></a><a href="./walkthrough/syncing.html">syncing</a></h2>+<p>Notice that in the <a href="./walkthrough/getting_file_content.html">previous example</a>, you had to+git fetch and merge from laptop first. This lets git-annex know what has+changed in laptop, and so it knows about the files present there and can+get them.</p>++<p>If you have a lot of repositories to keep in sync, manually fetching and+merging from them can become tedious. To automate it there is a handy+sync command, which also even commits your changes for you.</p>++<pre><code># cd /media/usb/annex+# git annex sync+commit+nothing to commit (working directory clean)+ok+pull laptop+ok+push laptop+ok+</code></pre>++<p>After you run sync, the repository will be updated with all changes made to+its remotes, and any changes in the repository will be pushed out to its+remotes, where a sync will get them. This is especially useful when using+git in a distributed fashion, without a+<a href="./tips/centralized_git_repository_tutorial.html">central bare repository</a>. See+<a href="./sync.html">sync</a> for details.</p>++<h2><a name="index7h2"></a><a href="./walkthrough/transferring_files:_When_things_go_wrong.html">transferring files: When things go wrong</a></h2>+<p>After a while, you'll have several annexes, with different file contents.+You don't have to try to keep all that straight; git-annex does+<a href="./location_tracking.html">location tracking</a> for you. If you ask it to get a file and the drive+or file server is not accessible, it will let you know what it needs to get+it:</p>++<pre><code># git annex get video/hackity_hack_and_kaxxt.mov+get video/_why_hackity_hack_and_kaxxt.mov (not available)+  Unable to access these remotes: usbdrive, server+  Try making some of these repositories available:+    5863d8c0-d9a9-11df-adb2-af51e6559a49  -- my home file server+    58d84e8a-d9ae-11df-a1aa-ab9aa8c00826  -- portable USB drive+    ca20064c-dbb5-11df-b2fe-002170d25c55  -- backup SATA drive+failed+# sudo mount /media/usb+# git annex get video/hackity_hack_and_kaxxt.mov+get video/hackity_hack_and_kaxxt.mov (from usbdrive...) ok+</code></pre>++<h2><a name="index8h2"></a><a href="./walkthrough/removing_files.html">removing files</a></h2>+<p>You can always drop files safely. Git-annex checks that some other annex+has the file before removing it.</p>++<pre><code># git annex drop iso/debian.iso+drop iso/Debian_5.0.iso ok+</code></pre>++<h2><a name="index9h2"></a><a href="./walkthrough/removing_files:_When_things_go_wrong.html">removing files: When things go wrong</a></h2>+<p>Before dropping a file, git-annex wants to be able to look at other+remotes, and verify that they still have a file. After all, it could+have been dropped from them too. If the remotes are not mounted/available,+you'll see something like this.</p>++<pre><code># git annex drop important_file other.iso+drop important_file (unsafe)+  Could only verify the existence of 0 out of 1 necessary copies+  Unable to access these remotes: usbdrive+  Try making some of these repositories available:+    58d84e8a-d9ae-11df-a1aa-ab9aa8c00826  -- portable USB drive+    ca20064c-dbb5-11df-b2fe-002170d25c55  -- backup SATA drive+  (Use --force to override this check, or adjust annex.numcopies.)+failed+drop other.iso (unsafe)+  Could only verify the existence of 0 out of 1 necessary copies+      No other repository is known to contain the file.+  (Use --force to override this check, or adjust annex.numcopies.)+failed+</code></pre>++<p>Here you might --force it to drop <code>important_file</code> if you <a href="./trust.html">trust</a> your backup.+But <code>other.iso</code> looks to have never been copied to anywhere else, so if+it's something you want to hold onto, you'd need to transfer it to+some other repository before dropping it.</p>++<h2><a name="index10h2"></a><a href="./walkthrough/modifying_annexed_files.html">modifying annexed files</a></h2>+<p>Normally, the content of files in the annex is prevented from being modified.+(Unless your repository is using <a href="./direct_mode.html">direct mode</a>.)</p>++<p>That's a good thing, because it might be the only copy, you wouldn't+want to lose it in a fumblefingered mistake.</p>++<pre><code># echo oops &gt; my_cool_big_file+bash: my_cool_big_file: Permission denied+</code></pre>++<p>In order to modify a file, it should first be unlocked.</p>++<pre><code># git annex unlock my_cool_big_file+unlock my_cool_big_file (copying...) ok+</code></pre>++<p>That replaces the symlink that normally points at its content with a copy+of the content. You can then modify the file like any regular file. Because+it is a regular file.</p>++<p>(If you decide you don't need to modify the file after all, or want to discard+modifications, just use <code>git annex lock</code>.)</p>++<p>When you <code>git commit</code>, git-annex's pre-commit hook will automatically+notice that you are committing an unlocked file, and add its new content+to the annex. The file will be replaced with a symlink to the new content,+and this symlink is what gets committed to git in the end.</p>++<pre><code># echo "now smaller, but even cooler" &gt; my_cool_big_file+# git commit my_cool_big_file -m "changed an annexed file"+add my_cool_big_file ok+[master 64cda67] changed an annexed file+ 1 files changed, 1 insertions(+), 1 deletions(-)+</code></pre>++<p>There is one problem with using <code>git commit</code> like this: Git wants to first+stage the entire contents of the file in its index. That can be slow for+big files (sorta why git-annex exists in the first place). So, the+automatic handling on commit is a nice safety feature, since it prevents+the file content being accidentally committed into git. But when working with+big files, it's faster to explicitly add them to the annex yourself+before committing.</p>++<pre><code># echo "now smaller, but even cooler yet" &gt; my_cool_big_file+# git annex add my_cool_big_file+add my_cool_big_file ok+# git commit my_cool_big_file -m "changed an annexed file"+</code></pre>++<h2><a name="index11h2"></a><a href="./walkthrough/using_ssh_remotes.html">using ssh remotes</a></h2>+<p>So far in this walkthrough, git-annex has been used with a remote+repository on a USB drive. But it can also be used with a git remote+that is truely remote, a host accessed by ssh.</p>++<p>Say you have a desktop on the same network as your laptop and want+to clone the laptop's annex to it:</p>++<pre><code># git clone ssh://mylaptop/home/me/annex ~/annex+# cd ~/annex+# git annex init "my desktop"+</code></pre>++<p>Now you can get files and they will be transferred (using <code>rsync</code> via <code>ssh</code>):</p>++<pre><code># git annex get my_cool_big_file+get my_cool_big_file (getting UUID for origin...) (from origin...)+SHA256-s86050597--6ae2688bc533437766a48aa19f2c06be14d1bab9c70b468af445d4f07b65f41e  100% 2159     2.1KB/s   00:00+ok+</code></pre>++<p>When you drop files, git-annex will ssh over to the remote and make+sure the file's content is still there before removing it locally:</p>++<pre><code># git annex drop my_cool_big_file+drop my_cool_big_file (checking origin..) ok+</code></pre>++<p>Note that normally git-annex prefers to use non-ssh remotes, like+a USB drive, before ssh remotes. They are assumed to be faster/cheaper to+access, if available. There is a annex-cost setting you can configure in+<code>.git/config</code> to adjust which repositories it prefers. See+<a href="./git-annex.html">the man page</a> for details.</p>++<p>Also, note that you need full shell access for this to work --+git-annex needs to be able to ssh in and run commands. Or at least,+your shell needs to be able to run the <a href="./git-annex-shell.html">git-annex-shell</a> command.</p>++<h2><a name="index12h2"></a><a href="./walkthrough/moving_file_content_between_repositories.html">moving file content between repositories</a></h2>+<p>Often you will want to move some file contents from a repository to some+other one. For example, your laptop's disk is getting full; time to move+some files to an external disk before moving another file from a file+server to your laptop. Doing that by hand (by using <code>git annex get</code> and+<code>git annex drop</code>) is possible, but a bit of a pain. <code>git annex move</code>+makes it very easy.</p>++<pre><code># git annex move my_cool_big_file --to usbdrive+move my_cool_big_file (to usbdrive...) ok+# git annex move video/hackity_hack_and_kaxxt.mov --from fileserver+move video/hackity_hack_and_kaxxt.mov (from fileserver...)+SHA256-s86050597--6ae2688bc533437766a48aa19f2c06be14d1bab9c70b468af445d4f07b65f41e   100%   82MB 199.1KB/s   07:02+ok+</code></pre>++<h2><a name="index13h2"></a><a href="./walkthrough/unused_data.html">unused data</a></h2>+<p>It's possible for data to accumulate in the annex that no files in any+branch point to anymore. One way it can happen is if you <code>git rm</code> a file+without first calling <code>git annex drop</code>. And, when you modify an annexed+file, the old content of the file remains in the annex. Another way is when+migrating between key-value <a href="./backends.html">backends</a>.</p>++<p>This might be historical data you want to preserve, so git-annex defaults to+preserving it. So from time to time, you may want to check for such data and+eliminate it to save space.</p>++<pre><code># git annex unused+unused . (checking for unused data...) +  Some annexed data is no longer used by any files in the repository.+    NUMBER  KEY+    1       SHA256-s86050597--6ae2688bc533437766a48aa19f2c06be14d1bab9c70b468af445d4f07b65f41e+    2       SHA1-s14--f1358ec1873d57350e3dc62054dc232bc93c2bd1+  (To see where data was previously used, try: git log --stat -S'KEY')+  (To remove unwanted data: git-annex dropunused NUMBER)+ok+</code></pre>++<p>After running <code>git annex unused</code>, you can follow the instructions to examine+the history of files that used the data, and if you decide you don't need that+data anymore, you can easily remove it:</p>++<pre><code># git annex dropunused 1+dropunused 1 ok+</code></pre>++<p>Hint: To drop a lot of unused data, use a command like this:</p>++<pre><code># git annex dropunused 1-1000+</code></pre>++<h2><a name="index14h2"></a><a href="./walkthrough/fsck:_verifying_your_data.html">fsck: verifying your data</a></h2>+<p>You can use the fsck subcommand to check for problems in your data. What+can be checked depends on the key-value <a href="./backends.html">backend</a> you've used+for the data. For example, when you use the SHA1 backend, fsck will verify+that the checksums of your files are good. Fsck also checks that the+annex.numcopies setting is satisfied for all files.</p>++<pre><code># git annex fsck+fsck some_file (checksum...) ok+fsck my_cool_big_file (checksum...) ok+...+</code></pre>++<p>You can also specify the files to check.  This is particularly useful if+you're using sha1 and don't want to spend a long time checksumming everything.</p>++<pre><code># git annex fsck my_cool_big_file+fsck my_cool_big_file (checksum...) ok+</code></pre>++<h2><a name="index15h2"></a><a href="./walkthrough/fsck:_when_things_go_wrong.html">fsck: when things go wrong</a></h2>+<p>Fsck never deletes possibly bad data; instead it will be moved to+<code>.git/annex/bad/</code> for you to recover. Here is a sample of what fsck+might say about a badly messed up annex:</p>++<pre><code># git annex fsck+fsck my_cool_big_file (checksum...)+git-annex: Bad file content; moved to .git/annex/bad/SHA1:7da006579dd64330eb2456001fd01948430572f2+git-annex: ** No known copies exist of my_cool_big_file+failed+fsck important_file+git-annex: Only 1 of 2 copies exist. Run git annex get somewhere else to back it up.+failed+git-annex: 2 failed+</code></pre>++<h2><a name="index16h2"></a><a href="./walkthrough/backups.html">backups</a></h2>+<p>git-annex can be configured to require more than one copy of a file exists,+as a simple backup for your data. This is controlled by the "annex.numcopies"+setting, which defaults to 1 copy. Let's change that to require 2 copies,+and send a copy of every file to a USB drive.</p>++<pre><code># echo "* annex.numcopies=2" &gt;&gt; .gitattributes+# git annex copy . --to usbdrive+</code></pre>++<p>Now when we try to <code>git annex drop</code> a file, it will verify that it+knows of 2 other repositories that have a copy before removing its+content from the current repository.</p>++<p>You can also vary the number of copies needed, depending on the file name.+So, if you want 3 copies of all your flac files, but only 1 copy of oggs:</p>++<pre><code># echo "*.ogg annex.numcopies=1" &gt;&gt; .gitattributes+# echo "*.flac annex.numcopies=3" &gt;&gt; .gitattributes+</code></pre>++<p>Or, you might want to make a directory for important stuff, and configure+it so anything put in there is backed up more thoroughly:</p>++<pre><code># mkdir important_stuff+# echo "* annex.numcopies=3" &gt; important_stuff/.gitattributes+</code></pre>++<p>For more details about the numcopies setting, see <a href="./copies.html">copies</a>.</p>++<h2><a name="index17h2"></a><a href="./walkthrough/automatically_managing_content.html">automatically managing content</a></h2>+<p>Once you have multiple repositories, and have perhaps configured numcopies,+any given file can have many more copies than is needed, or perhaps fewer+than you would like. How to manage this?</p>++<p>The whereis subcommand can be used to see how many copies of a file are known,+but then you have to decide what to get or drop. In this example, there+are perhaps not enough copies of the first file, and too many of the second+file.</p>++<pre><code># cd /media/usbdrive+# git annex whereis+whereis my_cool_big_file (1 copy)+    0c443de8-e644-11df-acbf-f7cd7ca6210d  -- laptop+whereis other_file (3 copies)+    0c443de8-e644-11df-acbf-f7cd7ca6210d  -- laptop+    62b39bbe-4149-11e0-af01-bb89245a1e61  -- here (usb drive)+    7570b02e-15e9-11e0-adf0-9f3f94cb2eaa  -- backup drive+</code></pre>++<p>What would be handy is some automated versions of get and drop, that only+gets a file if there are not yet enough copies of it, or only drops a file+if there are too many copies. Well, these exist, just use the --auto option.</p>++<pre><code># git annex get --auto --numcopies=2+get my_cool_big_file (from laptop...) ok+# git annex drop --auto --numcopies=2+drop other_file ok+</code></pre>++<p>With two quick commands, git-annex was able to decide for you how to+work toward having two copies of your files.</p>++<pre><code># git annex whereis+whereis my_cool_big_file (2 copies)+    0c443de8-e644-11df-acbf-f7cd7ca6210d  -- laptop+    62b39bbe-4149-11e0-af01-bb89245a1e61  -- here (usb drive)+whereis other_file (2 copies)+    0c443de8-e644-11df-acbf-f7cd7ca6210d  -- laptop+    7570b02e-15e9-11e0-adf0-9f3f94cb2eaa  -- backup drive+</code></pre>++<p>The --auto option can also be used with the copy command,+again this lets git-annex decide whether to actually copy content.</p>++<p>The above shows how to use --auto to manage content based on the number+of copies. It's also possible to configure, on a per-repository basis,+which content is desired. Then --auto also takes that into account+see <a href="./preferred_content.html">preferred content</a> for details.</p>++<h2><a name="index18h2"></a><a href="./walkthrough/more.html">more</a></h2>+<p>So ends the walkthrough. By now you should be able to use git-annex.</p>++<p>Want more? See <a href="./tips.html">tips</a> for lots more features and advice.</p>+++++++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="./distributed_version_control.html">distributed version control</a>++<a href="./how_it_works.html">how it works</a>++<a href="./install/Android.html">install/Android</a>++<a href="./sidebar.html">sidebar</a>++<a href="./summary.html">summary</a>++<a href="./tips/centralized_git_repository_tutorial.html">tips/centralized git repository tutorial</a>++<a href="./tips/using_git_annex_with_no_fixed_hostname_and_optimising_ssh.html">tips/using git annex with no fixed hostname and optimising ssh</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Fri Sep 28 01:45:57 2012</span>+<!-- Created <span class="date">Fri Sep 28 01:45:57 2012</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/walkthrough/adding_files.html view
@@ -0,0 +1,132 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>adding files</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../walkthrough.html">walkthrough</a>/ ++</span>+<span class="title">+adding files++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<pre><code># cd ~/annex+# cp /tmp/big_file .+# cp /tmp/debian.iso .+# git annex add .+add big_file (checksum...) ok+add debian.iso (checksum...) ok+# git commit -a -m added+</code></pre>++<p>When you add a file to the annex and commit it, only a symlink to+the annexed content is committed. The content itself is stored in+git-annex's backend.</p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">++++++++++++<div class="pagedate">+Last edited <span class="date">Fri Sep 28 01:45:57 2012</span>+<!-- Created <span class="date">Fri Sep 28 01:45:57 2012</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/walkthrough/backups.html view
@@ -0,0 +1,148 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>backups</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../walkthrough.html">walkthrough</a>/ ++</span>+<span class="title">+backups++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>git-annex can be configured to require more than one copy of a file exists,+as a simple backup for your data. This is controlled by the "annex.numcopies"+setting, which defaults to 1 copy. Let's change that to require 2 copies,+and send a copy of every file to a USB drive.</p>++<pre><code># echo "* annex.numcopies=2" &gt;&gt; .gitattributes+# git annex copy . --to usbdrive+</code></pre>++<p>Now when we try to <code>git annex drop</code> a file, it will verify that it+knows of 2 other repositories that have a copy before removing its+content from the current repository.</p>++<p>You can also vary the number of copies needed, depending on the file name.+So, if you want 3 copies of all your flac files, but only 1 copy of oggs:</p>++<pre><code># echo "*.ogg annex.numcopies=1" &gt;&gt; .gitattributes+# echo "*.flac annex.numcopies=3" &gt;&gt; .gitattributes+</code></pre>++<p>Or, you might want to make a directory for important stuff, and configure+it so anything put in there is backed up more thoroughly:</p>++<pre><code># mkdir important_stuff+# echo "* annex.numcopies=3" &gt; important_stuff/.gitattributes+</code></pre>++<p>For more details about the numcopies setting, see <a href="../copies.html">copies</a>.</p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">++++++++++++<div class="pagedate">+Last edited <span class="date">Fri Sep 28 01:45:57 2012</span>+<!-- Created <span class="date">Fri Sep 28 01:45:57 2012</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/walkthrough/more.html view
@@ -0,0 +1,123 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>more</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../walkthrough.html">walkthrough</a>/ ++</span>+<span class="title">+more++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>So ends the walkthrough. By now you should be able to use git-annex.</p>++<p>Want more? See <a href="../tips.html">tips</a> for lots more features and advice.</p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">++++++++++++<div class="pagedate">+Last edited <span class="date">Fri Sep 28 01:45:57 2012</span>+<!-- Created <span class="date">Fri Sep 28 01:45:57 2012</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/walkthrough/syncing.html view
@@ -0,0 +1,146 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>syncing</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../walkthrough.html">walkthrough</a>/ ++</span>+<span class="title">+syncing++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>Notice that in the <a href="./getting_file_content.html">previous example</a>, you had to+git fetch and merge from laptop first. This lets git-annex know what has+changed in laptop, and so it knows about the files present there and can+get them.</p>++<p>If you have a lot of repositories to keep in sync, manually fetching and+merging from them can become tedious. To automate it there is a handy+sync command, which also even commits your changes for you.</p>++<pre><code># cd /media/usb/annex+# git annex sync+commit+nothing to commit (working directory clean)+ok+pull laptop+ok+push laptop+ok+</code></pre>++<p>After you run sync, the repository will be updated with all changes made to+its remotes, and any changes in the repository will be pushed out to its+remotes, where a sync will get them. This is especially useful when using+git in a distributed fashion, without a+<a href="../tips/centralized_git_repository_tutorial.html">central bare repository</a>. See+<a href="../sync.html">sync</a> for details.</p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">++++++++++++<div class="pagedate">+Last edited <span class="date">Fri Sep 28 01:45:57 2012</span>+<!-- Created <span class="date">Fri Sep 28 01:45:57 2012</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/walkthrough/unused_data.html view
@@ -0,0 +1,205 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>unused data</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../walkthrough.html">walkthrough</a>/ ++</span>+<span class="title">+unused data++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>It's possible for data to accumulate in the annex that no files in any+branch point to anymore. One way it can happen is if you <code>git rm</code> a file+without first calling <code>git annex drop</code>. And, when you modify an annexed+file, the old content of the file remains in the annex. Another way is when+migrating between key-value <a href="../backends.html">backends</a>.</p>++<p>This might be historical data you want to preserve, so git-annex defaults to+preserving it. So from time to time, you may want to check for such data and+eliminate it to save space.</p>++<pre><code># git annex unused+unused . (checking for unused data...) +  Some annexed data is no longer used by any files in the repository.+    NUMBER  KEY+    1       SHA256-s86050597--6ae2688bc533437766a48aa19f2c06be14d1bab9c70b468af445d4f07b65f41e+    2       SHA1-s14--f1358ec1873d57350e3dc62054dc232bc93c2bd1+  (To see where data was previously used, try: git log --stat -S'KEY')+  (To remove unwanted data: git-annex dropunused NUMBER)+ok+</code></pre>++<p>After running <code>git annex unused</code>, you can follow the instructions to examine+the history of files that used the data, and if you decide you don't need that+data anymore, you can easily remove it:</p>++<pre><code># git annex dropunused 1+dropunused 1 ok+</code></pre>++<p>Hint: To drop a lot of unused data, use a command like this:</p>++<pre><code># git annex dropunused 1-1000+</code></pre>++</div>++++<div id="comments">+<div  class="feedlink">+++</div>+<div class="comment" id="comment-edbc8f4d58de3e553706acdb6c8a53bb">++++<div class="comment-subject">++<a href="/walkthrough/unused_data.html#comment-edbc8f4d58de3e553706acdb6c8a53bb">finding data that isn&#x27;t unused, but should be.</a>++</div>++<div class="inlinecontent">+<p>Sometimes links to annexed data still exists on some branch, when it was supposed to be dropped. Here is how I found these; perhaps there is a simpler way.</p>++<pre><code>% git annex find --format '${key}\n' | sort &gt; /tmp/known-keys+% find .git/annex/objects -type f -exec basename {} \; | sort  &gt; /tmp/local-keys+% comm -23 /tmp/local-keys /tmp/known-keys+</code></pre>++<p>to look for what branch these are on, try</p>++<pre><code>% git log --stat --all -S$key+</code></pre>++<p>for one of the keys output above. In my case it was the same remote branch keeping them all alive.</p>++<p><em>EDIT</em> sort key lists to make comm work properly</p>+++</div>++<div class="comment-header">++Comment by++<span class="author" title="Signed in">++<a href="?page=bremner&amp;do=goto">bremner</a>++</span>+++&mdash; <span class="date">Wed Oct 17 16:32:11 2012</span>+</div>++++<div style="clear: both"></div>+</div>+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">++++++++++++<div class="pagedate">+Last edited <span class="date">Fri Sep 28 01:45:57 2012</span>+<!-- Created <span class="date">Fri Sep 28 01:45:57 2012</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/doc/git-annex/html/walkthrough/using_bup.html view
@@ -0,0 +1,164 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">++<head>++<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<title>using bup</title>++<link rel="stylesheet" href="../style.css" type="text/css" />++<link rel="stylesheet" href="../local.css" type="text/css" />+++++++</head>+<body>++<div class="page">++<div class="pageheader">+<div class="header">+<span>+<span class="parentlinks">++<a href="../index.html">git-annex</a>/ ++<a href="../walkthrough.html">walkthrough</a>/ ++</span>+<span class="title">+using bup++</span>+</span>++</div>++++++++</div>+++<div class="sidebar">+<p><img src="../logo_small.png" width="150" height="115" class="img" /></p>++<ul>+<li><a href="../install.html">install</a></li>+<li><a href="../assistant.html">assistant</a></li>+<li><a href="../walkthrough.html">walkthrough</a></li>+<li><a href="../tips.html">tips</a></li>+<li><span class="createlink">bugs</span></li>+<li><span class="createlink">todo</span></li>+<li><span class="createlink">forum</span></li>+<li><a href="../comments.html">comments</a></li>+<li><a href="../contact.html">contact</a></li>+<li><a href="http://flattr.com/thing/84843/git-annex"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" /></a></li>+</ul>+++</div>+++<div id="pagebody">++<div id="content">+<p>Another <a href="../special_remotes.html">special remote</a> that git-annex can use is+a <a href="../special_remotes/bup.html">bup</a> repository. Bup stores large file contents+in a git repository of its own, with deduplication. Combined with+git-annex, you can have git on both the frontend and the backend.</p>++<p>Here's how to create a bup remote, and describe it.</p>++<p>[[!template <span class="error">Error: failed to process template <span class="createlink">note</span> </span>]]</p>++<pre><code># git annex initremote mybup type=bup encryption=none buprepo=example.com:/big/mybup+initremote bup (bup init)+Initialized empty Git repository in /big/mybup/+ok+# git annex describe mybup "my bup repository at example.com"+describe mybup ok+</code></pre>++<p>Now the remote can be used like any other remote.</p>++<pre><code># git annex move my_cool_big_file --to mybup+move my_cool_big_file (to mybup...)+Receiving index from server: 1100/1100, done.+ok+</code></pre>++<p>Note that, unlike other remotes, bup does not really support removing+content from its git repositories. This is a feature. :)</p>++<pre><code># git annex move my_cool_big_file --from mybup+move my_cool_big_file (from mybup...)+  content cannot be removed from bup remote+failed+git-annex: 1 failed+</code></pre>++<p>See <a href="../special_remotes/bup.html">bup</a> for details.</p>++</div>++++<div id="comments">+++++<div class="addcomment">Comments on this page are closed.</div>++</div>++++</div>++<div id="footer" class="pagefooter">++<div id="pageinfo">+++++++<div id="backlinks">+Links:++<a href="../special_remotes/bup.html">special remotes/bup</a>+++</div>+++++++<div class="pagedate">+Last edited <span class="date">Fri Sep 28 01:45:57 2012</span>+<!-- Created <span class="date">Fri Sep 28 01:45:57 2012</span> -->+</div>++</div>+++<!-- from git-annex -->+</div>++</div>++</body>+</html>
+ debian/git-annex/usr/share/man/man1/git-annex-shell.1.gz view

binary file changed (absent → 1383 bytes)

+ debian/git-annex/usr/share/man/man1/git-annex.1.gz view

binary file changed (absent → 12639 bytes)

+ doc/assistant/comment_1_f2c4857b7b000e005f0c19279db14eaf._comment view
@@ -0,0 +1,8 @@+[[!comment format=mdwn+ username="https://www.google.com/accounts/o8/id?id=AItOawkYrMBMTCEFUKskhWGD-1pzcw2ITshsi_8"+ nickname="Robert"+ subject="Annex on OS X 10.6"+ date="2013-06-04T23:10:03Z"+ content="""+I really hope they can get annex working on os x 10.6.  This is a great effort.  Thanks +"""]]
doc/assistant/release_notes.mdwn view
@@ -3,6 +3,9 @@ This is a bugfix release, featuring significant XMPP improvements and more robustness thanks to automated fuzz testing. Recommended upgrade. +This version changes its XMPP protocol, so it will fail to sync with older+git-annex versions over XMPP.+ ## version 4.20130521  This is a bugfix release. Recommended upgrade.
+ doc/bugs/4.20130601_xmpp_sync_error.mdwn view
@@ -0,0 +1,125 @@+4.20130601 xmpp sync error.++setup: A debian machine, with indirect fresh annex, android galaxy s3 with a+fresh direct annex, both running ga-20130601.++steps:+- Start assistant on both, add jabber account to both.+- Add box.com account on desktop with no encryption, (now correctly shows up on android, wasn't the case with 20130521).+- Add hello.txt on desktop repo, filename is now visible on android, but content is not.+- Add greeting.txt on desktop, nothing shows up on android, content still missing for hello.txt+- Webapp shows uploading messages, but no errors.+- Manually checking box.com confirms that files have been uploaded.++debian desktop daemon.log:++    [2013-06-02 17:57:03 CEST] main: starting assistant version 4.20130601+    (scanning...) [2013-06-02 17:57:03 CEST] Watcher: Performing startup scan+    (started...) [2013-06-02 17:57:52 CEST] XMPPClient: Pairing with myJabberAccount in progress+    [2013-06-02 17:57:53 CEST] XMPPReceivePack: Syncing with myJabberAccount +    [2013-06-02 17:58:03 CEST] XMPPClient: Pairing with myJabberAccount in progress+    [2013-06-02 17:58:52 CEST] main: Syncing with box.com +    warning: Not updating non-default fetch respec+	+	Please update the configuration manually if necessary.+    fatal: The remote end hung up unexpectedly+    [2013-06-02 17:59:53 CEST] XMPPReceivePack: Syncing with myJabberAccount +    [2013-06-02 18:00:02 CEST] Committer: Adding hello.txt++    (testing WebDAV server...)+    add hello.txt (checksum...) [2013-06-02 18:00:02 CEST] Committer: Committing changes to git+    [2013-06-02 18:00:02 CEST] XMPPSendPack: Syncing with myJabberAccount +    Already up-to-date.+    [2013-06-02 18:00:03 CEST] Committer: Committing changes to git+    fatal: The remote end hung up unexpectedly+    fatal: The remote end hung up unexpectedly+    [2013-06-02 18:00:03 CEST] XMPPSendPack: Syncing with myJabberAccount ++    +100%          1.0 B/s 0s+                        +[2013-06-02 18:00:19 CEST] Transferrer: Uploaded hello.txt+    fatal: The remote end hung up unexpectedly+    [2013-06-02 18:01:53 CEST] XMPPReceivePack: Syncing with myJabberAccount +    fatal: The remote end hung up unexpectedly+    [2013-06-02 18:02:04 CEST] XMPPSendPack: Syncing with myJabberAccount +    fatal: The remote end hung up unexpectedly+    [2013-06-02 18:03:53 CEST] XMPPReceivePack: Syncing with myJabberAccount +    fatal: The remote end hung up unexpectedly+    [2013-06-02 18:05:10 CEST] Committer: Adding greeting.txt+    ok+    (Recording state in git...)+    (Recording state in git...)++    (Recording state in git...)+    add greeting.txt (checksum...) [2013-06-02 18:05:10 CEST] Committer: Committing changes to git+    [2013-06-02 18:05:10 CEST] XMPPSendPack: Syncing with myJabberAccount +    Already up-to-date.+    [2013-06-02 18:05:11 CEST] Committer: Committing changes to git++    +100%          9.0 B/s 0s+                        +[2013-06-02 18:05:24 CEST] Transferrer: Uploaded greeting.txt+    fatal: The remote end hung up unexpectedly+    [2013-06-02 18:06:13 CEST] XMPPReceivePack: Syncing with myJabberAccount +    ok+    (Recording state in git...)+    (Recording state in git...)++    (Recording state in git...)+    fatal: The remote end hung up unexpectedly++Thanks as always.+++Android daemon.log:+    [2013-06-02 17:53:07 CEST] main: starting assistant version 4.20130601-g7483ca4+    (scanning...) [2013-06-02 17:53:07 CEST] Watcher: Performing startup scan+    (started...) [2013-06-02 17:57:51 CEST] XMPPClient: Pairing with myJabberAccount in progress+    [2013-06-02 17:57:52 CEST] XMPPSendPack: Syncing with myJabberAccount +    Already up-to-date.+    [2013-06-02 17:58:00 CEST] XMPPSendPack: Unable to download files from your other devices. +    [2013-06-02 17:58:00 CEST] XMPPSendPack: Syncing with myJabberAccount +    [2013-06-02 17:58:02 CEST] XMPPClient: Pairing with myJabberAccount in progress+    [2013-06-02 17:58:07 CEST] XMPPSendPack: Unable to download files from your other devices. +    [2013-06-02 17:58:07 CEST] XMPPSendPack: Syncing with myJabberAccount +    [2013-06-02 17:58:15 CEST] XMPPSendPack: Unable to download files from your other devices. +    [2013-06-02 18:00:02 CEST] XMPPReceivePack: Syncing with myJabberAccount +    [2013-06-02 18:00:03 CEST] XMPPReceivePack: Unable to download files from your other devices. +    [2013-06-02 18:00:04 CEST] XMPPReceivePack: Syncing with myJabberAccount +    Merge made by the 'recursive' strategy.+     hello.txt | 1 ++     1 file changed, 1 insertion(+)+     create mode 120000 hello.txt+    [2013-06-02 18:00:05 CEST] Committer: Committing changes to git+    [2013-06-02 18:00:06 CEST] XMPPSendPack: Syncing with myJabberAccount +    Already up-to-date.+    [2013-06-02 18:00:14 CEST] XMPPSendPack: Unable to download files from your other devices. +    [2013-06-02 18:00:14 CEST] XMPPSendPack: Syncing with myJabberAccount +    [2013-06-02 18:00:25 CEST] XMPPSendPack: Unable to download files from your other devices. +    [2013-06-02 18:02:03 CEST] Committer: Committing changes to git+    fatal: The remote end hung up unexpectedly+    [2013-06-02 18:02:04 CEST] XMPPReceivePack: Unable to download files from your other devices. +    [2013-06-02 18:02:04 CEST] XMPPSendPack: Syncing with myJabberAccount +    [2013-06-02 18:02:04 CEST] XMPPReceivePack: Syncing with myJabberAccount +    [2013-06-02 18:02:13 CEST] XMPPSendPack: Unable to download files from your other devices. +    [2013-06-02 18:02:15 CEST] XMPPSendPack: Syncing with myJabberAccount +    [2013-06-02 18:02:24 CEST] XMPPSendPack: Unable to download files from your other devices. +    fatal: The remote end hung up unexpectedly+    [2013-06-02 18:04:04 CEST] XMPPReceivePack: Unable to download files from your other devices. +    [2013-06-02 18:05:10 CEST] XMPPReceivePack: Syncing with myJabberAccount +    [2013-06-02 18:06:12 CEST] Committer: Committing changes to git+    [2013-06-02 18:06:13 CEST] XMPPSendPack: Syncing with myJabberAccount +    [2013-06-02 18:06:21 CEST] XMPPSendPack: Unable to download files from your other devices. +    [2013-06-02 18:06:21 CEST] XMPPSendPack: Syncing with myJabberAccount +    [2013-06-02 18:06:29 CEST] XMPPSendPack: Unable to download files from your other devices. +    fatal: The remote end hung up unexpectedly+    [2013-06-02 18:07:10 CEST] XMPPReceivePack: Unable to download files from your other devices. +++thanks++> Since this seems clearly a lack of box.com being configured +> to be used on the Android, I'm closing the bug: [[done]]. +> If I'm wrong, write back, and I'll reopen ;) --[[Joey]]
+ doc/bugs/Can__39__t_rename___34__here__34___repository.mdwn view
@@ -0,0 +1,32 @@+### Please describe the problem.+Trying to rename the "here" repository fails++### What steps will reproduce the problem?+* Start git-annex webapp in the console (for the first time, or remove old annex directory + .config/git-annex)+* In the browser window that opens click "Make repository"+* The "here" repository should show up in the dashboard+* Go to settings and select edit+* Change the repository name (e.g. to here2) and click save changes+* You should be back at the dashboard and the repository name is still "here"+++### What version of git-annex are you using? On what operating system?+* git-annex version: 4.20130601+* build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP DNS+* built using cabal+* on Ubuntu 13.04 32bit++### 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++[2013-06-12 22:22:57 CEST] main: starting assistant version 4.20130601+(scanning...) [2013-06-12 22:22:57 CEST] Watcher: Performing startup scan+(started...) ++# End of transcript or log.+"""]]++> Made text field for this repository disabled. The current repository has no remote name to edit. [[done]] --[[Joey]]
+ doc/bugs/Deasn__39__t_clean_up_ssh_keys_after_removing_remote_repo.mdwn view
@@ -0,0 +1,18 @@+### Please describe the problem.+I created a remote repo on ssh server with the same git-annex version, no personal ssh keys for the repo (password authentication). But I put ~ in front of the repo name so it created in different place than I wanted. I deleted it from assistant and then deleted the remote repo dir. When I added it with the correct path again it always asks for server password (it has some old annex pub key in authorized_keys, but not the new one; it might have been prompted for the password also with the initial repo). During the whole thing it failed to connect a few times due to wrong password or me realizing too late that it asks for yet another one and it generated keys few times, but ultimately didn't put the last one in remote's authorized_keys.++### What steps will reproduce the problem?+Create, delete and create again a new repo on remote ssh server with password auth.++### What version of git-annex are you using? On what operating system?+git-annex 4.20130601 Gentoo amd64++### 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+++# End of transcript or log.+"""]]
+ doc/bugs/Fails_to_create_remote_repo_if_no_global_email_set.mdwn view
@@ -0,0 +1,53 @@+### Please describe the problem.+Trying to create repo on ssh server failed because git didn't know my email.++There were other issues I encountered:++ - While connecting to the server assistant says that there will be a password prompt, but doesn't tell that one should expect it to appear in the terminal.++ - When creating keys it says that I will be prompted for key password again, but it asks for password to remote server (I understood it wanted a password for its new key pair).. there is no telling for what those password prompts in terminal are for++ - It actually requires password for remote server multiple times before it starts to use its own keys++ - When failed to test the server or create the repo there the "Retry" button doesn't work (does nothing)++ - Maybe it should strip leading ~ from repo name?++ - Local pairing with annex 3.20121112ubuntu4 from Ubuntu 13.04  sort of works, but not quite.. it syncs the files, but assistant on Ubuntu doesn't show the name for repo on Gentoo (matching versions are important?)++ - When pairing it doesn't check if localhost has running sshd++ - I think that was the reason why progress bars were showing pending transfers even after the status message about syncing was green after starting sshd (synced, already up-to-date)++### What steps will reproduce the problem?+Create repo on remote ssh server without global git settings.++### What version of git-annex are you using? On what operating system?+git-annex-4.20130601, Gentoo amd64++### 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+Initialized empty shared Git repository in /home/reinis/~/Annex/Lit/+init  +*** Please tell me who you are.++Run++  git config --global user.email "you@example.com"+  git config --global user.name "Your Name"++to set your account's default identity.+Omit --global to set the identity only in this repository.++fatal: unable to auto-detect email address (got 'reinis@RD-HC.(none)')++git-annex: user error (git ["--git-dir=/home/me/~/Annex/Lit","commit-tree","4b825dc642cb6eb9a060e54bf8d69288fbee4904"] efailed+xited 128)+git-annex: init: 1 failed+++# End of transcript or log.+"""]]
+ doc/bugs/GPG_problem_on_Mac.mdwn view
@@ -0,0 +1,31 @@+### Please describe the problem.+Adding a box.com repository fails with an Internal server error and the message "user error (gpg ["--quiet","--trust-model","always","--batch","--passphrase-fd","48","--symmetric","--force-mdc"] exited 2)"++Looking at the logfile it seems like git-annex is looking for gpg (gpg-agent) in /usr/local/MacGPG2/bin/. On my system it is in /usr/local/bin (installed using homebrew). I do not have the directory /usr/local/MacGPG2/.++Not sure if what the git-annex philosophy is: detect the location of such external programs or ship them together with git-annex.++### What steps will reproduce the problem?+Add a box.com repository (I assume every repository type that uses gpg will fail in the same way) on a Mac.+++### What version of git-annex are you using? On what operating system?+* git-annex version 4.20130626-g2dd6f84 (from https://downloads.kitenet.net/git-annex/OSX/current/10.8.2_Mountain_Lion/)+* Mac OS 10.8.4++### 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++(Recording state in git...)++(encryption setup) (shared cipher) (testing WebDAV server...)+(gpg) gpg: error running `/usr/local/MacGPG2/bin/gpg-agent': probably not installed+gpg: DBG: running `/usr/local/MacGPG2/bin/gpg-agent' for testing failed: Configuration error+gpg: can't connect to the agent: IPC connect call failed+gpg: problem with the agent: No agent running+27/Jun/2013:13:41:37 +0200 [Error#yesod-core] user error (gpg ["--quiet","--trust-model","always","--batch","--passphrase-fd","21","--symmetric","--force-mdc"] exited 2) @(yesod-core-1.1.8.3:Yesod.Internal.Core ./Yesod/Internal/Core.hs:550:5)+# End of transcript or log.+"""]]
doc/bugs/Glacier_remote_uploads_duplicates.mdwn view
@@ -29,3 +29,8 @@ If the problem is as I think it is, always applying `--trust-glacier` should prevent the problem from occurring in most cases, since git-annex will run "checkpresent" and glacier-cli will confirm that the archive exists.  To fix the problem after it has occurred, it should be sufficient to delete duplicates using glacier-cli, since they _should_ be identical to each other. Some enhancement of the `glacier-cli archive list` command would help here.++Update 10 June 2013: I've pushed a `glacier-cli` update and helper script in commit `b68835`. This adds a `--force-ids` option to `glacier archive list`, with which the helper script `glacier-list-duplicates.sh` uses to identify duplicates that can be removed. If you're affected by this issue, I suggest that you use this helper to identify and fix your problem by removing the duplicates. Please do so carefully by checking that the output of the helper is correct before you use it to delete the duplicates. See the comments at the top of the helper script for usage information.++> [[fixed|done]], at least for the only well-working case for glacier, where+> only one repository can access glacier directly. --[[Joey]]
+ doc/bugs/Hanging_on_install_on_Mountain_lion.mdwn view
@@ -0,0 +1,26 @@+### Please describe the problem.++In trying to install git-annex on my mac OSX Mountain Lion, the program is hanging when I open the program.++### What steps will reproduce the problem?++Open the DMG, drag the app to applications folder, double-click on the application. Web browser opens with a localhost url. The webpage says "Starting webapp..." and doesn't go anywhere. Initialization seems to fail and I need to force quit the application.++### What version of git-annex are you using? On what operating system?++I'm not totally sure (since it hangs and I can't check a version number, but since I just downloaded it now and the homepage says the latest version is "version 4.20130621" which was released 2 days and 13 hours ago, I assume that is it. ++I'm using OSX 10.8.4.+++### 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+++# End of transcript or log.+"""]]++> Fixed root cause. [[done]] --[[Joey]]
+ doc/bugs/Hangs_on_creating_repository_when_using_--listen.mdwn view
@@ -0,0 +1,46 @@+### Please describe the problem.+When using the git-annex webapp with the --listen paramter it as usual asks one to create a new repository on first startup. Selecting a repository location here and clicking "Make repository" button leads to a never ending loading browser and some git zombies. ++### What steps will reproduce the problem?+Two machines needed++1. On machine one: git-annex webapp --listen=\<machine1-public-ip\>:34561 (you can choose another port as well)+2. On machine two: use a browser to go to the url the last step gave you+3. Click on make repository+++### What version of git-annex are you using? On what operating system?+* git-annex version: 4.20130601+* build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP DNS+* built using cabal+* on Ubuntu 13.04 32bit+++### 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++[2013-06-12 21:59:37 CEST] main: starting assistant version 4.20130601+WebApp crashed: unable to bind to local socket+[2013-06-12 21:59:37 CEST] WebApp: warning WebApp crashed: unable to bind to local socket++  dbus failed; falling back to mtab polling (ClientError {clientErrorMessage = "runClient: unable to determine DBUS address", clientErrorFatal = True})++  No known network monitor available through dbus; falling back to polling+(scanning...) [2013-06-12 21:59:37 CEST] Watcher: Performing startup scan+(started...) +++# End of transcript or log.+"""]]++> The problem is that, when a port is specified, it is used for each web+> server started, and the process of making a new repository unavoidably+> requires it to start a second web server instance. This would also affect+> switching between existing repositories in the webapp. I don't see+> any way to make it not crash here, except for ignoring the port it was told+> to use when something else is already listening there. --[[Joey]] ++[[!tag /design/assistant]]
doc/bugs/Incorrect_version_on_64_Standalone_Build.mdwn view
@@ -1,4 +1,4 @@-    $ wget http://downloads.kitenet.net/git-annex/linux/current/git-annex-standalone-amd64.tar.gz+    $ wget https://downloads.kitenet.net/git-annex/linux/current/git-annex-standalone-amd64.tar.gz     $ tar xvzf git-annex-standalone-amd64.tar.gz     $ cd git-annex.linux     $ ./git-annex version
+ doc/bugs/Internal_Server_Error_unknown_UUID__59___cannot_modify.mdwn view
@@ -0,0 +1,24 @@+### Please describe the problem.+I was trying to use "Local Computer" option to sync up two machines on my local network. I was having some firewall issues and it failed on one machine.+It still created a repository without a name in the web ui and i get that Error unknown UUID when trying to edit or delete it.++### What steps will reproduce the problem?+Machine A initiates pairing. Machine B accepts pairing. Machine A has a firewall blocking outgoing connections.+Machine B times out. Machine A accepts outgoing connections for vnetd. Machine A starts syncing with Machine B.+Machine B gets files but have a broken web ui.+++### What version of git-annex are you using? On what operating system?++4.20130601-g2b6c3f2+OSX 10.7.5 on both Machine A and B++### 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+++# End of transcript or log.+"""]]
+ doc/bugs/Missing_repo_uuid_after_local_pairing_with_older_annex.mdwn view
@@ -0,0 +1,26 @@+### Please describe the problem.+I paired my repo running on Gentoo (git-annex 4.20130601) with Ubuntu 13.04 (git-annex 3.10121112ubuntu4). The repo on Ubuntu doesn't have uuid for the Gentoo remote, so:++- There is no name in assistan's repo settings for it++- Trying to access its settings gives Internal server error: Unknown UUID+15/Jun/2013:12:39:10 +0300 [Error#yesod-core] Unknown UUID @(yesod-core-1.1.8.3:Yesod.Internal.Core ./Yesod/Internal/Core.hs:550:5)++- In dashboard on Ubuntu all changes stay queued forever (although the syncing seems to work)++### What steps will reproduce the problem?+Pair local computers with different annex versions.++### What version of git-annex are you using? On what operating system?+Gentoo (git-annex 4.20130601)+Ubuntu 13.04 (git-annex 3.10121112ubuntu4)++### 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+++# End of transcript or log.+"""]]
+ doc/bugs/Problems_with_syncing_gnucash.mdwn view
@@ -0,0 +1,568 @@+### Please describe the problem.+I am trying to sync gnucash between my server and my notebook. Both devices are connected via VPN to provide bidirectional SSH connectivity. After adding some data in gnucash the logfiles get synced properly but the changes to the gnucash.gnucash file are not recognized. Touching the file afterwards causes git-annex to immediately transfer the file.++### What steps will reproduce the problem?++Store your gnucash configuration in a git-annex repository. Add some transactions and wait for git-annex to sync your *.gnucash file.++### What version of git-annex are you using? On what operating system?++server and notebook -> Ubuntu 12.04.2 LTS:+[[!format sh """+florz@server:~$ git-annex version+git-annex version: 4.20130601+build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP DNS+"""]]++### Please provide any additional information below.++before opening gnucash:+[[!format sh """+florz@notebook:~$ stat annex-sync/gnucash/gnucash.gnucash+  Datei: »annex-sync/gnucash/gnucash.gnucash“+  Größe: 113902         Blöcke: 240        EA Block: 4096   Normale Datei+Gerät: 15h/21d  Inode: 2974371     Verknüpfungen: 1+Zugriff: (0600/-rw-------)  Uid: ( 1000/   florz)   Gid: ( 1000/   florz)+Zugriff    : 2013-06-22 19:32:37.974073365 +0200+Modifiziert: 2013-06-22 19:32:37.846073367 +0200+Geändert   : 2013-06-22 19:32:37.970073365 +0200+ Geburt    : -++florz@server:~$ stat annex-sync/gnucash/gnucash.gnucash+  Datei: »annex-sync/gnucash/gnucash.gnucash“+  Größe: 113902         Blöcke: 224        EA Block: 4096   Normale Datei+Gerät: fc00h/64512d     Inode: 401737579   Verknüpfungen: 1+Zugriff: (0600/-rw-------)  Uid: ( 1000/   florz)   Gid: ( 1000/   florz)+Zugriff    : 2013-06-22 19:40:24.148876398 +0200+Modifiziert: 2013-06-22 19:24:18.000000000 +0200+Geändert   : 2013-06-22 19:24:26.817865369 +0200+ Geburt    : -+"""]]++after doing some changes in gnucash:+[[!format sh """+florz@notebook:~$ stat annex-sync/gnucash/gnucash.gnucash+  Datei: »annex-sync/gnucash/gnucash.gnucash“+  Größe: 114039         Blöcke: 240        EA Block: 4096   Normale Datei+Gerät: 15h/21d  Inode: 2974990     Verknüpfungen: 1+Zugriff: (0600/-rw-------)  Uid: ( 1000/   florz)   Gid: ( 1000/   florz)+Zugriff    : 2013-06-22 19:52:12.226049268 +0200+Modifiziert: 2013-06-22 19:52:12.342049265 +0200+Geändert   : 2013-06-22 19:52:12.342049265 +0200+ Geburt    : -++florz@server:~$ stat annex-sync/gnucash/gnucash.gnucash+  Datei: »annex-sync/gnucash/gnucash.gnucash“+  Größe: 113902         Blöcke: 224        EA Block: 4096   Normale Datei+Gerät: fc00h/64512d     Inode: 401737579   Verknüpfungen: 1+Zugriff: (0600/-rw-------)  Uid: ( 1000/   florz)   Gid: ( 1000/   florz)+Zugriff    : 2013-06-22 19:40:24.148876398 +0200+Modifiziert: 2013-06-22 19:24:18.000000000 +0200+Geändert   : 2013-06-22 19:24:26.817865369 +0200+ Geburt    : -++# after some time -> still no transfer++florz@server:~$ stat annex-sync/gnucash/gnucash.gnucash+  Datei: »annex-sync/gnucash/gnucash.gnucash“+  Größe: 113902         Blöcke: 224        EA Block: 4096   Normale Datei+Gerät: fc00h/64512d     Inode: 401737579   Verknüpfungen: 1+Zugriff: (0600/-rw-------)  Uid: ( 1000/   florz)   Gid: ( 1000/   florz)+Zugriff    : 2013-06-22 19:40:24.148876398 +0200+Modifiziert: 2013-06-22 19:24:18.000000000 +0200+Geändert   : 2013-06-22 19:24:26.817865369 +0200+ Geburt    : -+"""]]++doing a touch on the file:+[[!format sh """+florz@notebook:~$ touch annex-sync/gnucash/gnucash.gnucash+florz@notebook:~$ stat annex-sync/gnucash/gnucash.gnucash+  Datei: »annex-sync/gnucash/gnucash.gnucash“+  Größe: 114039         Blöcke: 240        EA Block: 4096   Normale Datei+Gerät: 15h/21d  Inode: 2974990     Verknüpfungen: 1+Zugriff: (0600/-rw-------)  Uid: ( 1000/   florz)   Gid: ( 1000/   florz)+Zugriff    : 2013-06-22 19:54:27.222046497 +0200+Modifiziert: 2013-06-22 19:54:27.070046501 +0200+Geändert   : 2013-06-22 19:54:27.214046498 +0200+ Geburt    : -++#it syncs immediately++florz@server:~$ stat annex-sync/gnucash/gnucash.gnucash+  Datei: »annex-sync/gnucash/gnucash.gnucash“+  Größe: 114039         Blöcke: 224        EA Block: 4096   Normale Datei+Gerät: fc00h/64512d     Inode: 401737638   Verknüpfungen: 1+Zugriff: (0600/-rw-------)  Uid: ( 1000/   florz)   Gid: ( 1000/   florz)+Zugriff    : 2013-06-22 19:54:35.307056482 +0200+Modifiziert: 2013-06-22 19:54:27.000000000 +0200+Geändert   : 2013-06-22 19:54:34.787072264 +0200+ Geburt    : -+"""]]++on my notebook:+[[!format sh """+Everything up-to-date+Everything up-to-date+Everything up-to-date+[2013-06-22 19:52:12 CEST] Watcher: file deleted gnucash/gnucash.gnucash.tmp-rFzA3U+[2013-06-22 19:52:12 CEST] Committer: committing 1 changes+[2013-06-22 19:52:12 CEST] Committer: Committing changes to git+[2013-06-22 19:52:12 CEST] feed: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","update-index","-z","--index-info"]+[2013-06-22 19:52:12 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","commit","--allow-empty-message","--no-edit","-m","","--quiet","--no-verify"]+[2013-06-22 19:52:12 CEST] Pusher: Syncing with server192.168.2.2, home192.168.1.3 +[2013-06-22 19:52:12 CEST] Watcher: add direct gnucash/gnucash.gnucash.20130622195200.log+[2013-06-22 19:52:12 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","symbolic-ref","HEAD"]+[2013-06-22 19:52:12 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","refs/heads/master"]+[2013-06-22 19:52:12 CEST] Pusher: pushing to [Remote { name ="server192.168.2.2" },Remote { name ="home192.168.1.3" }]+[2013-06-22 19:52:12 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","branch","-f","synced/master"]+[2013-06-22 19:52:12 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","push","home192.168.1.3","git-annex:synced/git-annex","master:synced/master"]+[2013-06-22 19:52:12 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","push","server192.168.2.2","git-annex:synced/git-annex","master:synced/master"]+[2013-06-22 19:52:13 CEST] read: lsof ["-F0can","+d","/home/florz/annex-sync/.git/annex/tmp/"]+[2013-06-22 19:52:13 CEST] Committer: Adding gnucash.g..95200.log+ok+(Recording state in git...)+(Recording state in git...)++++(Recording state in git...)+add gnucash/gnucash.gnucash.20130622195200.log (checksum...) [2013-06-22 19:52:13 CEST] chat: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","hash-object","-t","blob","-w","--stdin"]+[2013-06-22 19:52:13 CEST] Committer: committing 1 changes+[2013-06-22 19:52:13 CEST] Committer: Committing changes to git+[2013-06-22 19:52:13 CEST] feed: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","update-index","-z","--index-info"]+[2013-06-22 19:52:13 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","commit","--allow-empty-message","--no-edit","-m","","--quiet","--no-verify"]+[2013-06-22 19:52:13 CEST] Committer: queued Upload UUID "dc591dd7-2446-45c6-84dc-55bdf79e7512" gnucash/gnucash.gnucash.20130622195200.log Nothing : new file created+[2013-06-22 19:52:13 CEST] Transferrer: Transferring: Upload UUID "dc591dd7-2446-45c6-84dc-55bdf79e7512" gnucash/gnucash.gnucash.20130622195200.log Nothing+[2013-06-22 19:52:13 CEST] Committer: queued Upload UUID "84bab1ab-238f-4602-953a-a297aab6da44" gnucash/gnucash.gnucash.20130622195200.log Nothing : new file created+[2013-06-22 19:52:13 CEST] call: /home/florz/bin/git-annex ["transferkeys","--readfd","29","--writefd","27"]+[2013-06-22 19:52:13 CEST] TransferWatcher: transfer starting: Upload UUID "dc591dd7-2446-45c6-84dc-55bdf79e7512" gnucash/gnucash.gnucash.20130622195200.log Nothing+[2013-06-22 19:52:14 CEST] Watcher: changed direct .gnucash/books/gnucash.gnucash.gcm+[2013-06-22 19:52:14 CEST] Watcher: file deleted gnucash/gnucash.gnucash.7f0101.29284.LNK+[2013-06-22 19:52:14 CEST] Watcher: file deleted gnucash/gnucash.gnucash.LCK+[2013-06-22 19:52:14 CEST] Watcher: changed direct .gnucash/accelerator-map+[2013-06-22 19:52:14 CEST] Watcher: changed direct .gnucash/expressions-2.0+[2013-06-22 19:52:14 CEST] Watcher: changed direct .gnucash/stylesheets-2.0+[2013-06-22 19:52:14 CEST] Watcher: add direct gnucash/gnucash.gnucash.20130622195212.log+[2013-06-22 19:52:14 CEST] read: lsof ["-F0can","+d","/home/florz/annex-sync/.git/annex/tmp/"]+[2013-06-22 19:52:14 CEST] Committer: Adding 5 files+ok+(Recording state in git...)+add .gnucash/books/gnucash.gnucash.gcm (checksum...) [2013-06-22 19:52:15 CEST] chat: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","hash-object","-t","blob","-w","--stdin"]+ok+add .gnucash/accelerator-map (checksum...) [2013-06-22 19:52:15 CEST] chat: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","hash-object","-t","blob","-w","--stdin"]+ok+add .gnucash/expressions-2.0 (checksum...) [2013-06-22 19:52:15 CEST] chat: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","hash-object","-t","blob","-w","--stdin"]+ok+add .gnucash/stylesheets-2.0 (checksum...) [2013-06-22 19:52:15 CEST] chat: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","hash-object","-t","blob","-w","--stdin"]+ok+add gnucash/gnucash.gnucash.20130622195212.log (checksum...) [2013-06-22 19:52:15 CEST] chat: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","hash-object","-t","blob","-w","--stdin"]+[2013-06-22 19:52:15 CEST] Committer: committing 7 changes+[2013-06-22 19:52:15 CEST] Committer: Committing changes to git+[2013-06-22 19:52:15 CEST] feed: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","update-index","-z","--index-info"]+To ssh://florz@192.168.1.3/home/florz/annex-sync/+   7d4c30d..1954c7f  master -> synced/master+[2013-06-22 19:52:15 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","commit","--allow-empty-message","--no-edit","-m","","--quiet","--no-verify"]+[2013-06-22 19:52:15 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","symbolic-ref","HEAD"]+[2013-06-22 19:52:15 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","refs/heads/master"]+[2013-06-22 19:52:15 CEST] Merger: merging refs/remotes/home192.168.1.3/synced/master into refs/heads/master+[2013-06-22 19:52:15 CEST] Committer: queued Upload UUID "dc591dd7-2446-45c6-84dc-55bdf79e7512" gnucash/gnucash.gnucash.20130622195212.log Nothing : new file created+[2013-06-22 19:52:15 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","symbolic-ref","HEAD"]+[2013-06-22 19:52:15 CEST] Committer: queued Upload UUID "84bab1ab-238f-4602-953a-a297aab6da44" gnucash/gnucash.gnucash.20130622195212.log Nothing : new file created+[2013-06-22 19:52:15 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","refs/heads/master"]+[2013-06-22 19:52:15 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/master"]+[2013-06-22 19:52:15 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync/.git/annex/merge/","merge","--no-edit","refs/remotes/home192.168.1.3/synced/master"]+Already up-to-date.+[2013-06-22 19:52:15 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/master"]+[2013-06-22 19:52:15 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","diff-tree","-z","--raw","--no-renames","-l0","-r","e1cb6c3b8bc0c851e6dab51271a4cde04815c50c","e1cb6c3b8bc0c851e6dab51271a4cde04815c50c"]+To ssh://florz@192.168.2.2/home/florz/annex-sync/+   7d4c30d..e1cb6c3  master -> synced/master+[2013-06-22 19:52:16 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","symbolic-ref","HEAD"]+[2013-06-22 19:52:16 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","refs/heads/master"]+[2013-06-22 19:52:16 CEST] Merger: merging refs/remotes/server192.168.2.2/synced/master into refs/heads/master+[2013-06-22 19:52:16 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","symbolic-ref","HEAD"]+[2013-06-22 19:52:16 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","refs/heads/master"]+[2013-06-22 19:52:16 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/master"]+[2013-06-22 19:52:16 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync/.git/annex/merge/","merge","--no-edit","refs/remotes/server192.168.2.2/synced/master"]+Already up-to-date.+[2013-06-22 19:52:16 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/master"]+[2013-06-22 19:52:16 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","diff-tree","-z","--raw","--no-renames","-l0","-r","e1cb6c3b8bc0c851e6dab51271a4cde04815c50c","e1cb6c3b8bc0c851e6dab51271a4cde04815c50c"]++gnucash.gnucash.20130622195200.log++         778 100%    0.00kB/s    0:00:00  +         778 100%    0.00kB/s    0:00:00 (xfer#1, to-check=0/1)+[2013-06-22 19:52:17 CEST] TransferWatcher: transfer starting: Upload UUID "dc591dd7-2446-45c6-84dc-55bdf79e7512" gnucash/gnucash.gnucash.20130622195200.log Just 778++sent 876 bytes  received 31 bytes  201.56 bytes/sec+total size is 778  speedup is 0.86+[2013-06-22 19:52:17 CEST] TransferWatcher: transfer finishing: Transfer {transferDirection = Upload, transferUUID = UUID "dc591dd7-2446-45c6-84dc-55bdf79e7512", transferKey = Key {keyName = "8b8aa5c2cfe4466c6b897f7987246021468033301a696e2db0070386f7d0f3fd.log", keyBackendName = "SHA256E", keySize = Just 778, keyMtime = Nothing}}+[2013-06-22 19:52:17 CEST] Transferrer: Uploaded gnucash.g..95200.log+[2013-06-22 19:52:17 CEST] Transferrer: Transferring: Upload UUID "84bab1ab-238f-4602-953a-a297aab6da44" gnucash/gnucash.gnucash.20130622195212.log Nothing+[2013-06-22 19:52:17 CEST] TransferWatcher: transfer starting: Upload UUID "84bab1ab-238f-4602-953a-a297aab6da44" gnucash/gnucash.gnucash.20130622195212.log Nothing+[2013-06-22 19:52:18 CEST] Pusher: Syncing with server192.168.2.2, home192.168.1.3 +[2013-06-22 19:52:18 CEST] chat: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","hash-object","-w","--stdin-paths"]+[2013-06-22 19:52:18 CEST] feed: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","update-index","-z","--index-info"]+[2013-06-22 19:52:18 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]+[2013-06-22 19:52:18 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","write-tree"]+[2013-06-22 19:52:18 CEST] chat: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","commit-tree","f2463d30e73fec86e14c9df4bcae5e568398a503","-p","refs/heads/git-annex"]+[2013-06-22 19:52:18 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","update-ref","refs/heads/git-annex","776258f91d4245ffe13117a771dc8c7723867c1a"]+[2013-06-22 19:52:18 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","symbolic-ref","HEAD"]+[2013-06-22 19:52:18 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","refs/heads/master"]+[2013-06-22 19:52:18 CEST] Pusher: pushing to [Remote { name ="server192.168.2.2" },Remote { name ="home192.168.1.3" }]+[2013-06-22 19:52:18 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","git-annex"]+[2013-06-22 19:52:18 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","branch","-f","synced/master"]+[2013-06-22 19:52:18 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]+[2013-06-22 19:52:18 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","push","server192.168.2.2","git-annex:synced/git-annex","master:synced/master"]+[2013-06-22 19:52:18 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","push","home192.168.1.3","git-annex:synced/git-annex","master:synced/master"]+[2013-06-22 19:52:18 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..776258f91d4245ffe13117a771dc8c7723867c1a","--oneline","-n1"]+[2013-06-22 19:52:18 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..e7d4504abea59b0b59659908ba771783acc6cd55","--oneline","-n1"]+[2013-06-22 19:52:18 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..69a00fc4a2079b3a87725cc0e3e8b8a1e3a9ae20","--oneline","-n1"]+[2013-06-22 19:52:18 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..3c87a082e3b5340597dc59b9d5963b191f24a936","--oneline","-n1"]+[2013-06-22 19:52:18 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","ls-tree","-z","--","refs/heads/git-annex","uuid.log","remote.log","trust.log","group.log","preferred-content.log"]+[2013-06-22 19:52:18 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","symbolic-ref","HEAD"]+[2013-06-22 19:52:18 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","refs/heads/master"]+[2013-06-22 19:52:18 CEST] Merger: merging refs/heads/synced/master into refs/heads/master+[2013-06-22 19:52:18 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","symbolic-ref","HEAD"]+[2013-06-22 19:52:18 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","refs/heads/master"]+[2013-06-22 19:52:18 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/master"]+[2013-06-22 19:52:18 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync/.git/annex/merge/","merge","--no-edit","refs/heads/synced/master"]+Already up-to-date.+[2013-06-22 19:52:18 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/master"]+[2013-06-22 19:52:18 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","diff-tree","-z","--raw","--no-renames","-l0","-r","e1cb6c3b8bc0c851e6dab51271a4cde04815c50c","e1cb6c3b8bc0c851e6dab51271a4cde04815c50c"]++gnucash.gnucash.20130622195212.log++         411 100%    0.00kB/s    0:00:00  +         411 100%    0.00kB/s    0:00:00 (xfer#1, to-check=0/1)+[2013-06-22 19:52:20 CEST] TransferWatcher: transfer starting: Upload UUID "84bab1ab-238f-4602-953a-a297aab6da44" gnucash/gnucash.gnucash.20130622195212.log Just 411++sent 509 bytes  received 31 bytes  154.29 bytes/sec+total size is 411  speedup is 0.76+[2013-06-22 19:52:20 CEST] Transferrer: Uploaded gnucash.g..95212.log+[2013-06-22 19:52:20 CEST] TransferWatcher: transfer finishing: Transfer {transferDirection = Upload, transferUUID = UUID "84bab1ab-238f-4602-953a-a297aab6da44", transferKey = Key {keyName = "36e8842e91f7577d12992724c8f52586e9ea7cb0234312dc5544ea4dc6f6c39a.log", keyBackendName = "SHA256E", keySize = Just 411, keyMtime = Nothing}}+[2013-06-22 19:52:20 CEST] Transferrer: Transferring: Upload UUID "dc591dd7-2446-45c6-84dc-55bdf79e7512" gnucash/gnucash.gnucash.20130622195212.log Nothing+[2013-06-22 19:52:20 CEST] TransferWatcher: transfer starting: Upload UUID "dc591dd7-2446-45c6-84dc-55bdf79e7512" gnucash/gnucash.gnucash.20130622195212.log Nothing+To ssh://florz@192.168.1.3/home/florz/annex-sync/+   e7d4504..776258f  git-annex -> synced/git-annex+[2013-06-22 19:52:21 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","git-annex"]+[2013-06-22 19:52:21 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]+[2013-06-22 19:52:21 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..776258f91d4245ffe13117a771dc8c7723867c1a","--oneline","-n1"]+[2013-06-22 19:52:21 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..e7d4504abea59b0b59659908ba771783acc6cd55","--oneline","-n1"]+[2013-06-22 19:52:21 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..69a00fc4a2079b3a87725cc0e3e8b8a1e3a9ae20","--oneline","-n1"]+[2013-06-22 19:52:21 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..3c87a082e3b5340597dc59b9d5963b191f24a936","--oneline","-n1"]+[2013-06-22 19:52:21 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","symbolic-ref","HEAD"]+[2013-06-22 19:52:21 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","refs/heads/master"]+[2013-06-22 19:52:21 CEST] Merger: merging refs/remotes/home192.168.1.3/synced/master into refs/heads/master+[2013-06-22 19:52:21 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","symbolic-ref","HEAD"]+[2013-06-22 19:52:21 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","refs/heads/master"]+[2013-06-22 19:52:21 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/master"]+[2013-06-22 19:52:21 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync/.git/annex/merge/","merge","--no-edit","refs/remotes/home192.168.1.3/synced/master"]+Already up-to-date.+[2013-06-22 19:52:21 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/master"]+[2013-06-22 19:52:21 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","diff-tree","-z","--raw","--no-renames","-l0","-r","e1cb6c3b8bc0c851e6dab51271a4cde04815c50c","e1cb6c3b8bc0c851e6dab51271a4cde04815c50c"]++gnucash.gnucash.20130622195212.log++         411 100%    0.00kB/s    0:00:00  +         411 100%    0.00kB/s    0:00:00 (xfer#1, to-check=0/1)+[2013-06-22 19:52:21 CEST] TransferWatcher: transfer starting: Upload UUID "dc591dd7-2446-45c6-84dc-55bdf79e7512" gnucash/gnucash.gnucash.20130622195212.log Just 411++sent 509 bytes  received 31 bytes  360.00 bytes/sec+total size is 411  speedup is 0.76+[2013-06-22 19:52:22 CEST] Transferrer: Uploaded gnucash.g..95212.log+[2013-06-22 19:52:22 CEST] TransferWatcher: transfer finishing: Transfer {transferDirection = Upload, transferUUID = UUID "dc591dd7-2446-45c6-84dc-55bdf79e7512", transferKey = Key {keyName = "36e8842e91f7577d12992724c8f52586e9ea7cb0234312dc5544ea4dc6f6c39a.log", keyBackendName = "SHA256E", keySize = Just 411, keyMtime = Nothing}}+[2013-06-22 19:52:22 CEST] Transferrer: Transferring: Upload UUID "84bab1ab-238f-4602-953a-a297aab6da44" gnucash/gnucash.gnucash.20130622195200.log Nothing+[2013-06-22 19:52:22 CEST] TransferWatcher: transfer starting: Upload UUID "84bab1ab-238f-4602-953a-a297aab6da44" gnucash/gnucash.gnucash.20130622195200.log Nothing+To ssh://florz@192.168.2.2/home/florz/annex-sync/+   e7d4504..776258f  git-annex -> synced/git-annex+[2013-06-22 19:52:22 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","git-annex"]+[2013-06-22 19:52:22 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]+[2013-06-22 19:52:22 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..776258f91d4245ffe13117a771dc8c7723867c1a","--oneline","-n1"]+[2013-06-22 19:52:22 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..e7d4504abea59b0b59659908ba771783acc6cd55","--oneline","-n1"]+[2013-06-22 19:52:22 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..69a00fc4a2079b3a87725cc0e3e8b8a1e3a9ae20","--oneline","-n1"]+[2013-06-22 19:52:22 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..3c87a082e3b5340597dc59b9d5963b191f24a936","--oneline","-n1"]+git-annex-shell: key is already present in annex+rsync: connection unexpectedly closed (0 bytes received so far) [sender]+rsync error: error in rsync protocol data stream (code 12) at io.c(605) [sender=3.0.9]+[2013-06-22 19:52:22 CEST] TransferWatcher: transfer finishing: Transfer {transferDirection = Upload, transferUUID = UUID "84bab1ab-238f-4602-953a-a297aab6da44", transferKey = Key {keyName = "8b8aa5c2cfe4466c6b897f7987246021468033301a696e2db0070386f7d0f3fd.log", keyBackendName = "SHA256E", keySize = Just 778, keyMtime = Nothing}}+git-annex-shell: key is already present in annex+rsync: connection unexpectedly closed (0 bytes received so far) [sender]+rsync error: error in rsync protocol data stream (code 12) at io.c(605) [sender=3.0.9]+[2013-06-22 19:52:24 CEST] Pusher: Syncing with server192.168.2.2, home192.168.1.3 +[2013-06-22 19:52:24 CEST] chat: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","hash-object","-w","--stdin-paths"]+[2013-06-22 19:52:24 CEST] feed: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","update-index","-z","--index-info"]+[2013-06-22 19:52:24 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]+[2013-06-22 19:52:24 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","write-tree"]+[2013-06-22 19:52:24 CEST] chat: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","commit-tree","1641422d48162f533f80693486d7c5a1208b9fcf","-p","refs/heads/git-annex"]+[2013-06-22 19:52:24 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","update-ref","refs/heads/git-annex","48cfe2eb07d63d4a59c237994eb07896c92ef1c4"]+[2013-06-22 19:52:24 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","symbolic-ref","HEAD"]+[2013-06-22 19:52:24 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","refs/heads/master"]+[2013-06-22 19:52:24 CEST] Pusher: pushing to [Remote { name ="server192.168.2.2" },Remote { name ="home192.168.1.3" }]+[2013-06-22 19:52:24 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","git-annex"]+[2013-06-22 19:52:24 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","branch","-f","synced/master"]+[2013-06-22 19:52:24 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]+[2013-06-22 19:52:24 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","push","server192.168.2.2","git-annex:synced/git-annex","master:synced/master"]+[2013-06-22 19:52:24 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","push","home192.168.1.3","git-annex:synced/git-annex","master:synced/master"]+[2013-06-22 19:52:24 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..48cfe2eb07d63d4a59c237994eb07896c92ef1c4","--oneline","-n1"]+[2013-06-22 19:52:24 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..e7d4504abea59b0b59659908ba771783acc6cd55","--oneline","-n1"]+[2013-06-22 19:52:24 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..69a00fc4a2079b3a87725cc0e3e8b8a1e3a9ae20","--oneline","-n1"]+[2013-06-22 19:52:24 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..776258f91d4245ffe13117a771dc8c7723867c1a","--oneline","-n1"]+[2013-06-22 19:52:24 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..3c87a082e3b5340597dc59b9d5963b191f24a936","--oneline","-n1"]+[2013-06-22 19:52:25 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","git-annex"]+[2013-06-22 19:52:25 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]+[2013-06-22 19:52:25 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..48cfe2eb07d63d4a59c237994eb07896c92ef1c4","--oneline","-n1"]+[2013-06-22 19:52:25 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..df87e3bef80902abc6d48ce0fbfe3432c790cd21","--oneline","-n1"]+[2013-06-22 19:52:25 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..69a00fc4a2079b3a87725cc0e3e8b8a1e3a9ae20","--oneline","-n1"]+[2013-06-22 19:52:25 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..776258f91d4245ffe13117a771dc8c7723867c1a","--oneline","-n1"]+[2013-06-22 19:52:25 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..3c87a082e3b5340597dc59b9d5963b191f24a936","--oneline","-n1"]+[2013-06-22 19:52:25 CEST] feed: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","update-index","-z","--index-info"]+[2013-06-22 19:52:25 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","diff-index","--raw","-z","-r","--no-renames","-l0","--cached","df87e3bef80902abc6d48ce0fbfe3432c790cd21"]+[2013-06-22 19:52:25 CEST] chat: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","hash-object","-t","blob","-w","--stdin"]+[2013-06-22 19:52:25 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","df87e3bef80902abc6d48ce0fbfe3432c790cd21..refs/heads/git-annex","--oneline","-n1"]+[2013-06-22 19:52:25 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","write-tree"]+[2013-06-22 19:52:25 CEST] chat: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","commit-tree","5bf44cd143b2c35a44e609e083af23093eb02028","-p","refs/heads/git-annex","-p","df87e3bef80902abc6d48ce0fbfe3432c790cd21"]+[2013-06-22 19:52:25 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","update-ref","refs/heads/git-annex","4cd264f192611f5a0d76e54d31329921a650f896"]+[2013-06-22 19:52:25 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","git-annex"]+[2013-06-22 19:52:25 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]+[2013-06-22 19:52:25 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..4cd264f192611f5a0d76e54d31329921a650f896","--oneline","-n1"]+[2013-06-22 19:52:25 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..df87e3bef80902abc6d48ce0fbfe3432c790cd21","--oneline","-n1"]+[2013-06-22 19:52:25 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..69a00fc4a2079b3a87725cc0e3e8b8a1e3a9ae20","--oneline","-n1"]+[2013-06-22 19:52:25 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..776258f91d4245ffe13117a771dc8c7723867c1a","--oneline","-n1"]+[2013-06-22 19:52:25 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..3c87a082e3b5340597dc59b9d5963b191f24a936","--oneline","-n1"]+To ssh://florz@192.168.1.3/home/florz/annex-sync/+   df87e3b..4cd264f  git-annex -> synced/git-annex+[2013-06-22 19:52:26 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","git-annex"]+[2013-06-22 19:52:26 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]+[2013-06-22 19:52:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..4cd264f192611f5a0d76e54d31329921a650f896","--oneline","-n1"]+[2013-06-22 19:52:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..df87e3bef80902abc6d48ce0fbfe3432c790cd21","--oneline","-n1"]+[2013-06-22 19:52:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..69a00fc4a2079b3a87725cc0e3e8b8a1e3a9ae20","--oneline","-n1"]+[2013-06-22 19:52:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..776258f91d4245ffe13117a771dc8c7723867c1a","--oneline","-n1"]+[2013-06-22 19:52:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..3c87a082e3b5340597dc59b9d5963b191f24a936","--oneline","-n1"]+To ssh://florz@192.168.2.2/home/florz/annex-sync/+   776258f..4cd264f  git-annex -> synced/git-annex+[2013-06-22 19:52:28 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","git-annex"]+[2013-06-22 19:52:28 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]+[2013-06-22 19:52:28 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..4cd264f192611f5a0d76e54d31329921a650f896","--oneline","-n1"]+[2013-06-22 19:52:28 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..df87e3bef80902abc6d48ce0fbfe3432c790cd21","--oneline","-n1"]+[2013-06-22 19:52:28 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..69a00fc4a2079b3a87725cc0e3e8b8a1e3a9ae20","--oneline","-n1"]+[2013-06-22 19:52:28 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..3c87a082e3b5340597dc59b9d5963b191f24a936","--oneline","-n1"]+[2013-06-22 19:53:18 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","ls-tree","-z","--","refs/heads/git-annex","uuid.log","remote.log","trust.log","group.log","preferred-content.log"]+[2013-06-22 19:54:27 CEST] Watcher: changed direct gnucash/gnucash.gnucash+[2013-06-22 19:54:27 CEST] read: lsof ["-F0can","+d","/home/florz/annex-sync/.git/annex/tmp/"]+[2013-06-22 19:54:27 CEST] Committer: Adding gnucash.gnucash+ok+(Recording state in git...)+++(Recording state in git...)+++(Recording state in git...)+(merging synced/git-annex into git-annex...)+(Recording state in git...)+add gnucash/gnucash.gnucash (checksum...) [2013-06-22 19:54:27 CEST] read: sha256sum ["/home/florz/annex-sync/.git/annex/tmp/gnucash25536.gnucash"]+[2013-06-22 19:54:27 CEST] chat: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","hash-object","-t","blob","-w","--stdin"]+[2013-06-22 19:54:27 CEST] Committer: committing 1 changes+[2013-06-22 19:54:27 CEST] Committer: Committing changes to git+[2013-06-22 19:54:27 CEST] feed: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","update-index","-z","--index-info"]+[2013-06-22 19:54:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","commit","--allow-empty-message","--no-edit","-m","","--quiet","--no-verify"]+[2013-06-22 19:54:27 CEST] Committer: queued Upload UUID "dc591dd7-2446-45c6-84dc-55bdf79e7512" gnucash/gnucash.gnucash Nothing : new file created+[2013-06-22 19:54:27 CEST] Pusher: Syncing with server192.168.2.2, home192.168.1.3 +[2013-06-22 19:54:27 CEST] Transferrer: Transferring: Upload UUID "dc591dd7-2446-45c6-84dc-55bdf79e7512" gnucash/gnucash.gnucash Nothing+[2013-06-22 19:54:27 CEST] Committer: queued Upload UUID "84bab1ab-238f-4602-953a-a297aab6da44" gnucash/gnucash.gnucash Nothing : new file created+[2013-06-22 19:54:27 CEST] chat: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","hash-object","-w","--stdin-paths"]+[2013-06-22 19:54:27 CEST] feed: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","update-index","-z","--index-info"]+[2013-06-22 19:54:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]+[2013-06-22 19:54:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","write-tree"]+[2013-06-22 19:54:27 CEST] chat: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","commit-tree","4c81716cf1a0e0df472ffb43770ac8a27ca45420","-p","refs/heads/git-annex"]+[2013-06-22 19:54:27 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","update-ref","refs/heads/git-annex","e9e2f951a5c1c645447ccc565bc3def9caeff93c"]+[2013-06-22 19:54:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","symbolic-ref","HEAD"]+[2013-06-22 19:54:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","refs/heads/master"]+[2013-06-22 19:54:27 CEST] Pusher: pushing to [Remote { name ="server192.168.2.2" },Remote { name ="home192.168.1.3" }]+[2013-06-22 19:54:27 CEST] TransferWatcher: transfer starting: Upload UUID "dc591dd7-2446-45c6-84dc-55bdf79e7512" gnucash/gnucash.gnucash Nothing+[2013-06-22 19:54:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","git-annex"]+[2013-06-22 19:54:27 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","branch","-f","synced/master"]+[2013-06-22 19:54:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]+[2013-06-22 19:54:27 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","push","server192.168.2.2","git-annex:synced/git-annex","master:synced/master"]+[2013-06-22 19:54:27 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","push","home192.168.1.3","git-annex:synced/git-annex","master:synced/master"]+[2013-06-22 19:54:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..e9e2f951a5c1c645447ccc565bc3def9caeff93c","--oneline","-n1"]+[2013-06-22 19:54:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..df87e3bef80902abc6d48ce0fbfe3432c790cd21","--oneline","-n1"]+[2013-06-22 19:54:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..69a00fc4a2079b3a87725cc0e3e8b8a1e3a9ae20","--oneline","-n1"]+[2013-06-22 19:54:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..4cd264f192611f5a0d76e54d31329921a650f896","--oneline","-n1"]+[2013-06-22 19:54:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..3c87a082e3b5340597dc59b9d5963b191f24a936","--oneline","-n1"]+[2013-06-22 19:54:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","ls-tree","-z","--","refs/heads/git-annex","uuid.log","remote.log","trust.log","group.log","preferred-content.log"]+[2013-06-22 19:54:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","symbolic-ref","HEAD"]+[2013-06-22 19:54:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","refs/heads/master"]+[2013-06-22 19:54:27 CEST] Merger: merging refs/heads/synced/master into refs/heads/master+[2013-06-22 19:54:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","symbolic-ref","HEAD"]+[2013-06-22 19:54:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","refs/heads/master"]+[2013-06-22 19:54:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/master"]+[2013-06-22 19:54:27 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync/.git/annex/merge/","merge","--no-edit","refs/heads/synced/master"]+Already up-to-date.+[2013-06-22 19:54:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/master"]+[2013-06-22 19:54:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","diff-tree","-z","--raw","--no-renames","-l0","-r","e41ffae310ed2a50058b2f963decde4f9bc10a14","e41ffae310ed2a50058b2f963decde4f9bc10a14"]++++gnucash.gnucash++       32768  28%    0.00kB/s    0:00:00  [2+      114039 100%   15.50MB/s    0:00:00 (xfer#1, to-check=0/1)+013-06-22 19:54:28 CEST] TransferWatcher: transfer starting: Upload UUID "dc591dd7-2446-45c6-84dc-55bdf79e7512" gnucash/gnucash.gnucash Just 32768+[2013-06-22 19:54:28 CEST] TransferWatcher: transfer starting: Upload UUID "dc591dd7-2446-45c6-84dc-55bdf79e7512" gnucash/gnucash.gnucash Just 114039+To ssh://florz@192.168.1.3/home/florz/annex-sync/+   4cd264f..e9e2f95  git-annex -> synced/git-annex+   e1cb6c3..e41ffae  master -> synced/master+[2013-06-22 19:54:33 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","git-annex"]+[2013-06-22 19:54:33 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]+[2013-06-22 19:54:33 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..e9e2f951a5c1c645447ccc565bc3def9caeff93c","--oneline","-n1"]+[2013-06-22 19:54:33 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..df87e3bef80902abc6d48ce0fbfe3432c790cd21","--oneline","-n1"]+[2013-06-22 19:54:33 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..69a00fc4a2079b3a87725cc0e3e8b8a1e3a9ae20","--oneline","-n1"]+[2013-06-22 19:54:33 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..4cd264f192611f5a0d76e54d31329921a650f896","--oneline","-n1"]+[2013-06-22 19:54:33 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..3c87a082e3b5340597dc59b9d5963b191f24a936","--oneline","-n1"]+[2013-06-22 19:54:33 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","symbolic-ref","HEAD"]+[2013-06-22 19:54:33 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","refs/heads/master"]+[2013-06-22 19:54:33 CEST] Merger: merging refs/remotes/home192.168.1.3/synced/master into refs/heads/master+[2013-06-22 19:54:33 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","symbolic-ref","HEAD"]+[2013-06-22 19:54:33 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","refs/heads/master"]+[2013-06-22 19:54:33 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/master"]+[2013-06-22 19:54:33 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync/.git/annex/merge/","merge","--no-edit","refs/remotes/home192.168.1.3/synced/master"]+Already up-to-date.+[2013-06-22 19:54:33 CEST] read: git ["--git-dir=/home/florz/ann+sent 114130 bytes  received 31 bytes  20756.55 bytes/sec+total size is 114039  espeedup is 1.00+x-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/master"]+[2013-06-22 19:54:33 CEST] Transferrer: Uploaded gnucash.gnucash+[2013-06-22 19:54:33 CEST] TransferWatcher: transfer finishing: Transfer {transferDirection = Upload, transferUUID = UUID "dc591dd7-2446-45c6-84dc-55bdf79e7512", transferKey = Key {keyName = "91ec950e4004863219ea33f1398ea4308e0969267c207272e046858ede8bf9d9", keyBackendName = "SHA256E", keySize = Just 114039, keyMtime = Nothing}}+[2013-06-22 19:54:33 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","diff-tree","-z","--raw","--no-renames","-l0","-r","e41ffae310ed2a50058b2f963decde4f9bc10a14","e41ffae310ed2a50058b2f963decde4f9bc10a14"]+[2013-06-22 19:54:33 CEST] Transferrer: Transferring: Upload UUID "84bab1ab-238f-4602-953a-a297aab6da44" gnucash/gnucash.gnucash Nothing+[2013-06-22 19:54:33 CEST] TransferWatcher: transfer starting: Upload UUID "84bab1ab-238f-4602-953a-a297aab6da44" gnucash/gnucash.gnucash Nothing++gnucash.gnucash++       32768  28%    0.00kB/s    0:00:00  +      114039 100%   19.38MB/s    0:00:00 (xfer#1, to-check=0/1)+[2013-06-22 19:54:33 CEST] TransferWatcher: transfer starting: Upload UUID "84bab1ab-238f-4602-953a-a297aab6da44" gnucash/gnucash.gnucash Just 32768+[2013-06-22 19:54:33 CEST] TransferWatcher: transfer starting: Upload UUID "84bab1ab-238f-4602-953a-a297aab6da44" gnucash/gnucash.gnucash Just 114039+To ssh://florz@192.168.2.2/home/florz/annex-sync/+   4cd264f..e9e2f95  git-annex -> synced/git-annex+   e1cb6c3..e41ffae  master -> synced/master+[2013-06-22 19:54:34 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","git-annex"]+[2013-06-22 19:54:34 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]+[2013-06-22 19:54:34 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..e9e2f951a5c1c645447ccc565bc3def9caeff93c","--oneline","-n1"]+[2013-06-22 19:54:34 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..df87e3bef80902abc6d48ce0fbfe3432c790cd21","--oneline","-n1"]+[2013-06-22 19:54:34 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..69a00fc4a2079b3a87725cc0e3e8b8a1e3a9ae20","--oneline","-n1"]+[2013-06-22 19:54:34 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..3c87a082e3b5340597dc59b9d5963b191f24a936","--oneline","-n1"]+[2013-06-22 19:54:34 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","symbolic-ref","HEAD"]+[2013-06-22 19:54:34 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","refs/heads/master"]+[2013-06-22 19:54:34 CEST] Merger: merging refs/remotes/server192.168.2.2/synced/master into refs/heads/master+[2013-06-22 19:54:34 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","symbolic-ref","HEAD"]+[2013-06-22 19:54:34 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","refs/heads/master"]+[2013-06-22 19:54:34 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/master"]+[2013-06-22 19:54:34 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync/.git/annex/merge/","merge","--no-edit","refs/remotes/server192.168.2.2/synced/master"]+Already up-to-date.+[2013-06-22 19:54:34 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/master"]+[2013-06-22 19:54:34 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","diff-tree","-z","--raw","--no-renames","-l0","-r","e41ffae310ed2a50058b2f963decde4f9bc10a14","e41ffae310ed2a50058b2f963decde4f9bc10a14"]++sent 114130 bytes  received 31 bytes  45664.40 bytes/sec+total size is 114039  speedup is 1.00+[2013-06-22 19:54:35 CEST] Transferrer: Uploaded gnucash.gnucash+[2013-06-22 19:54:35 CEST] TransferWatcher: transfer finishing: Transfer {transferDirection = Upload, transferUUID = UUID "84bab1ab-238f-4602-953a-a297aab6da44", transferKey = Key {keyName = "91ec950e4004863219ea33f1398ea4308e0969267c207272e046858ede8bf9d9", keyBackendName = "SHA256E", keySize = Just 114039, keyMtime = Nothing}}+[2013-06-22 19:54:36 CEST] Pusher: Syncing with server192.168.2.2, home192.168.1.3 +[2013-06-22 19:54:36 CEST] chat: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","hash-object","-w","--stdin-paths"]+[2013-06-22 19:54:36 CEST] feed: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","update-index","-z","--index-info"]+[2013-06-22 19:54:36 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]+[2013-06-22 19:54:36 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","write-tree"]+[2013-06-22 19:54:36 CEST] chat: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","commit-tree","fb43dcef4baa4b928faec6622a4f7889125c6c0a","-p","refs/heads/git-annex"]+[2013-06-22 19:54:36 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","update-ref","refs/heads/git-annex","b74b3402e31d7394815733811b9668b00cc51aa9"]+[2013-06-22 19:54:36 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","symbolic-ref","HEAD"]+[2013-06-22 19:54:36 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","refs/heads/master"]+[2013-06-22 19:54:36 CEST] Pusher: pushing to [Remote { name ="server192.168.2.2" },Remote { name ="home192.168.1.3" }]+[2013-06-22 19:54:36 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","git-annex"]+[2013-06-22 19:54:36 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","branch","-f","synced/master"]+[2013-06-22 19:54:36 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]+[2013-06-22 19:54:36 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","push","server192.168.2.2","git-annex:synced/git-annex","master:synced/master"]+[2013-06-22 19:54:36 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","push","home192.168.1.3","git-annex:synced/git-annex","master:synced/master"]+[2013-06-22 19:54:36 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..b74b3402e31d7394815733811b9668b00cc51aa9","--oneline","-n1"]+[2013-06-22 19:54:36 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..df87e3bef80902abc6d48ce0fbfe3432c790cd21","--oneline","-n1"]+[2013-06-22 19:54:36 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..69a00fc4a2079b3a87725cc0e3e8b8a1e3a9ae20","--oneline","-n1"]+[2013-06-22 19:54:36 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..e9e2f951a5c1c645447ccc565bc3def9caeff93c","--oneline","-n1"]+[2013-06-22 19:54:36 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..3c87a082e3b5340597dc59b9d5963b191f24a936","--oneline","-n1"]+[2013-06-22 19:54:39 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","git-annex"]+[2013-06-22 19:54:39 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]+[2013-06-22 19:54:39 CEST] read: git ["--gitTo ssh://florz@192.168.1.3/home/florz/annex-sync/+- ! [rejected]        dgit-annex -> synced/git-annexi (r=/non-fast-forwardh)o+me/florz/aerror: failed to push some refs to 'ssh://florz@192.168.1.3/home/florz/annex-sync/'+nTo prevent you from losing history, non-fast-forward updates were rejected+Merge the remote changes (e.g. 'git pull') before pushing again.  See the+'Note about fast-forwards' section of 'git push --help' for details.+nex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..b74b3402e31d7394815733811b9668b00cc51aa9","--oneline","-n1"]+[2013-06-22 19:54:39 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..89e2137442dfdb06facbaba3079873d90c7af281","--oneline","-n1"]+[2013-06-22 19:54:39 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..69a00fc4a2079b3a87725cc0e3e8b8a1e3a9ae20","--oneline","-n1"]+[2013-06-22 19:54:39 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..e9e2f951a5c1c645447ccc565bc3def9caeff93c","--oneline","-n1"]+[2013-06-22 19:54:39 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..3c87a082e3b5340597dc59b9d5963b191f24a936","--oneline","-n1"]+[2013-06-22 19:54:39 CEST] feed: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","update-index","-z","--index-info"]+[2013-06-22 19:54:39 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","diff-index","--raw","-z","-r","--no-renames","-l0","--cached","89e2137442dfdb06facbaba3079873d90c7af281"]+[2013-06-22 19:54:39 CEST] chat: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","hash-object","-t","blob","-w","--stdin"]+[2013-06-22 19:54:39 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","89e2137442dfdb06facbaba3079873d90c7af281..refs/heads/git-annex","--oneline","-n1"]+[2013-06-22 19:54:39 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","write-tree"]+[2013-06-22 19:54:39 CEST] chat: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","commit-tree","f175a05b82160942363f46bf1af3e7af1660dfa1","-p","refs/heads/git-annex","-p","89e2137442dfdb06facbaba3079873d90c7af281"]+[2013-06-22 19:54:39 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","update-ref","refs/heads/git-annex","fabac4b203dce9e812b4637f7e95375b15a3f739"]+[2013-06-22 19:54:39 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","git-annex"]+[2013-06-22 19:54:39 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]+[2013-06-22 19:54:39 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..fabac4b203dce9e812b4637f7e95375b15a3f739","--oneline","-n1"]+[2013-06-22 19:54:39 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..89e2137442dfdb06facbaba3079873d90c7af281","--oneline","-n1"]+[2013-06-22 19:54:39 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..69a00fc4a2079b3a87725cc0e3e8b8a1e3a9ae20","--oneline","-n1"]+[2013-06-22 19:54:39 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..e9e2f951a5c1c645447ccc565bc3def9caeff93c","--oneline","-n1"]+[2013-06-22 19:54:39 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..3c87a082e3b5340597dc59b9d5963b191f24a936","--oneline","-n1"]+To ssh://florz@192.168.2.2/home/florz/annex-sync/+   e9e2f95..fabac4b  git-annex -> synced/git-annex+[2013-06-22 19:54:40 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","git-annex"]+[2013-06-22 19:54:40 CEST] Pusher: trying manual pull to resolve failed pushes+[2013-06-22 19:54:40 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]+[2013-06-22 19:54:40 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..fabac4b203dce9e812b4637f7e95375b15a3f739","--oneline","-n1"]+[2013-06-22 19:54:40 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..89e2137442dfdb06facbaba3079873d90c7af281","--oneline","-n1"]+[2013-06-22 19:54:40 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..69a00fc4a2079b3a87725cc0e3e8b8a1e3a9ae20","--oneline","-n1"]+[2013-06-22 19:54:40 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..e9e2f951a5c1c645447ccc565bc3def9caeff93c","--oneline","-n1"]+[2013-06-22 19:54:40 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..3c87a082e3b5340597dc59b9d5963b191f24a936","--oneline","-n1"]+[2013-06-22 19:54:40 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","fetch","home192.168.1.3"]+From ssh://192.168.1.3/home/florz/annex-sync+   e9e2f95..89e2137  synced/git-annex -> home192.168.1.3/synced/git-annex+[2013-06-22 19:54:42 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","git-annex"]+[2013-06-22 19:54:42 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]+[2013-06-22 19:54:42 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..fabac4b203dce9e812b4637f7e95375b15a3f739","--oneline","-n1"]+[2013-06-22 19:54:42 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..89e2137442dfdb06facbaba3079873d90c7af281","--oneline","-n1"]+[2013-06-22 19:54:42 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..69a00fc4a2079b3a87725cc0e3e8b8a1e3a9ae20","--oneline","-n1"]+[2013-06-22 19:54:43 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..3c87a082e3b5340597dc59b9d5963b191f24a936","--oneline","-n1"]+[2013-06-22 19:54:43 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","git-annex"]+[2013-06-22 19:54:43 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]+[2013-06-22 19:54:43 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..fabac4b203dce9e812b4637f7e95375b15a3f739","--oneline","-n1"]+[2013-06-22 19:54:43 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..89e2137442dfdb06facbaba3079873d90c7af281","--oneline","-n1"]+[2013-06-22 19:54:43 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..69a00fc4a2079b3a87725cc0e3e8b8a1e3a9ae20","--oneline","-n1"]+[2013-06-22 19:54:43 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..3c87a082e3b5340597dc59b9d5963b191f24a936","--oneline","-n1"]+[2013-06-22 19:54:43 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--verify","-q","refs/remotes/home192.168.1.3/master"]+[2013-06-22 19:54:43 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/master..refs/remotes/home192.168.1.3/master","--oneline","-n1"]+[2013-06-22 19:54:43 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--verify","-q","refs/remotes/home192.168.1.3/synced/master"]+[2013-06-22 19:54:43 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/synced/master..refs/remotes/home192.168.1.3/synced/master","--oneline","-n1"]+[2013-06-22 19:54:43 CEST] Pusher: pushing to [Remote { name ="home192.168.1.3" }]+[2013-06-22 19:54:43 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","branch","-f","synced/master"]+[2013-06-22 19:54:43 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","push","home192.168.1.3","git-annex:synced/git-annex","master:synced/master"]+[2013-06-22 19:54:45 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","git-annex"]+[2013-06-22 19:54:45 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]+[2013-06-22 19:54:45 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..fabac4b203dce9e812b4637f7e95375b15a3f739","--oneline","-n1"]+[2013-06-22 19:54:45 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..69a00fc4a2079b3a87725cc0e3e8b8a1e3a9ae20","--oneline","-n1"]+[2013-06-22 19:54:45 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..89e2137442dfdb06facbaba3079873d90c7af281","--oneline","-n1"]+[2013-06-22 19:54:45 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..3c87a082e3b5340597dc59b9d5963b191f24a936","--oneline","-n1"]+Everything up-to-date+[2013-06-22 19:54:46 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","git-annex"]+[2013-06-22 19:54:46 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]+[2013-06-22 19:54:47 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..fabac4b203dce9e812b4637f7e95375b15a3f739","--oneline","-n1"]+[2013-06-22 19:54:47 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..69a00fc4a2079b3a87725cc0e3e8b8a1e3a9ae20","--oneline","-n1"]+[2013-06-22 19:54:47 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..3c87a082e3b5340597dc59b9d5963b191f24a936","--oneline","-n1"]+"""]]++[[!tag /design/assistant]]+[[!meta title="hard link to open file which is then deleted"]]++> I have fixed this bug. [[done]] --[[Joey]]
+ doc/bugs/Should_ignore_.thumbnails__47___on_android.mdwn view
@@ -0,0 +1,28 @@+### Please describe the problem.++When creating a Camera repository on android, the .thumbnails/ directory (containing useless crushed JPGs and even more useless oodles of thumbnail metadata databases) is annexed. This leads to confusion (assistant tries to annex database and thumbnails in modification) and waste (uploading/annexing unusable/unneeded metadata).++### What steps will reproduce the problem?++Install git-annex on Android and choose the defaults for a camera repository.+++### What version of git-annex are you using? On what operating system?++4.20130601, Android 4.2.2+++### 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+++# End of transcript or log.+"""]]++> I've [[done]] this, however the .gitignore file it writes will+> not actually be used by the assistant until it gets support+> for querying gitignore settings from git. There is already a+> bug tracking that, and it's in process. --[[Joey]] 
doc/bugs/True_backup_support.mdwn view
@@ -3,3 +3,5 @@ As I understand it, git-annex doesn't solve this problem for me because it only stores file *contents* in S3/Glacier.  A restore-from-nothing requires both the file contents and also the file names and metadata, which git-annex doesn't store in S3.  I'm still feeling my way around git-annex, but I think it will probably be sufficient for my purposes to set up a cron job to push my annex to github.  But I think it would be helpful if git-annex could take care of this automatically.++> Based on the comments, this is [[done]] --[[Joey]]
+ doc/bugs/Unable_to_add_files_on_Android_due_to_weird_rename_error.mdwn view
@@ -0,0 +1,37 @@+### Please describe the problem.++I am receiving a weird error when trying to add a file into a git annex repo on Android. I can't explain how it got into this state, and I can't figure out how to fix it.++### What steps will reproduce the problem?++See the output below - I'm happy to run any debugging commands that are required.++### What version of git-annex are you using? On what operating system?++ASUS Transformer Infinity Android Tablet, Android 4.2.1.++[[!format sh """+git-annex version: 4.20130601-g7483ca4+build flags: Assistant Webapp Testsuite S3 WebDAV Inotify XMPP DNS+local repository version: 3+default repository version: 3+supported repository versions: 3 4+upgrade supported from repository versions: 0 1 2+"""]]+++### Please provide any additional information below.++[[!format sh """+u0_a141@android:/sdcard/git-annex.home/Documents $ git annex add Music/MobileSheets/The\ New\ Real\ Book\ 1/New\ Real\ Book\ 1\ Eb_19.pdf+add Music/MobileSheets/The New Real Book 1/New Real Book 1 Eb_19.pdf (checksum...) unknown option -- reflink=auto+git-annex: /storage/emulated/legacy/git-annex.home/Documents/.git/annex/tmp/New Real Book 1 Eb15137.pdf: rename: does not exist (No such file or directory)+failed+git-annex: add: 1 failed+1|u0_a141@android:/sdcard/git-annex.home/Documents $ ls -la .git/annex/tmp/+drwxrwxr-x    2 root     sdcard_r      4096 Jun 14 13:42 .+drwxrwxr-x    6 root     sdcard_r      4096 Jun 14 13:35 ..+u0_a141@android:/sdcard/git-annex.home/Documents $+"""]]++> Should be [[fixed|done]] --[[Joey]]
doc/bugs/Unable_to_sync_a_second_machine_through_Box.mdwn view
@@ -37,3 +37,10 @@ It's great to see that git annex might make a box.com account useful for automatic upload and sync... looking forward to getting it to work on both sides! Thanks for making this!  [[!tag /design/assistant moreinfo]]++> The robustness of the XMPP support has massively improved since this bug+> report was filed. Since no more information is forthcoming, I consider+> this bug [[done]].+>+> (Incidentially, this bug got me to santize all information logged about+> XMPP protocol, including the names/emails of buddies..) --[[Joey]]
doc/bugs/Use_a_git_repository_on_the_server_don__39__t_work.mdwn view
@@ -12,3 +12,38 @@ Please provide any additional information below. git and git-annex are available on the Remote Server +> While this bug report was about a server that did not get git-annex-shell+> installed in PATH (something trivially fixed by `apt-get install+> git-annex`), the comments below would like to turn this into a bug report about +> the error message "unknown UUID; cannot modify". All right then..+> --[[Joey]]+> +> This can occur if a ssh key is locked down to use directory A, and a+> new repo is added in directory B which uses the same ssh key. Things will+> then fail when git-annex-shell rejects the attept to use directory B, and+> this results in the webapp displaying an internal server error of+> "unknown UUID; cannot modify" since NoUUID is retreived for the repo.+> +> In fact, I already dealt with this+> once in 79561774450c8abf7c2cb42b08575a3ca27010dc; it used to not use +> the directory name at all as part of the mangled hostname. Most of the +> "me too" responses" predate that fix.+> +> Now, this can only happen+> if the mangled hostname for directory A and B is the same. One way this can+> happen is if the directories are "annex" and "~/annex". In other words,+> I suspect that users are entering "annex" once, and "~/annex" another+> time, when setting up what they intend to be the same repo. Perhaps the+> first time something else fails (like the original problem of+> git-annex-shell not being in path), or they want to set it up again,+> and the next time the subtly different directory is entered.+> +> To fix this,+> `mangleSshHostName` would need to be changed to generate different mangled+> hostnames in all cases. Currently, it skips non-alpha-numeric+> characters in the directory. [[done]] --[[Joey]]+> --[[Joey]] +> +> Additionally, just entering a path starting with "~/" would cause this+> error, since the webapp tacks on "/~/" to make a relative path absolute.+> I've also fixed that. [[done]] --[[Joey]]
+ doc/bugs/Windows_build_test_failures.mdwn view
@@ -0,0 +1,1230 @@+Given that others can build+run OK I wonder if this is a build environment setup problem rather than a code issue. +This might be two bugs, but I rather suspect the fix to one is the fix to the other.++### Please describe the problem.+Some tests fail with:+ssh: Could not resolve hostname C: no address associated with name++then if you try and do a copy to/from an ssh remote then it fails with simply 'copy: 1 failed'++### What steps will reproduce the problem?++For the tests, simply sh standalone/windows/build.sh++For the other, I'm using a modified version of the other windows user's script, the set -x'd output is:++<pre>++ git-annex version+git-annex version: 4.20130621-g36258de^M+build flags: Pairing Testsuite S3 WebDAV DNS^M++ ssh gitremote sh testrepo.sh+git-annex version: 4.20130621-g36258de+build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP DNS+Initialized empty Git repository in /media/backup/git/repo.git/+init origin ok+(Recording state in git...)+commit+ok+git-annex: no branch is checked out++ rm -rf repo++ git init repo+Initialized empty Git repository in c:/Users/Oliver/repo/.git/++ cd repo++ git-annex init+init  ^M+  Detected a crippled filesystem.^M+^M+  Enabling direct mode.^M+^M+  Detected a filesystem without fifo support.^M+^M+  Disabling ssh connection caching.^M+ok^M+(Recording state in git...)^M++ git remote add origin ssh://git@remote/~/repo.git++ echo hello++ git-annex add .+add foo.txt (checksum...) ok^M+(Recording state in git...)^M++ git commit -m .+[master (root-commit) f34a076] .+ 1 file changed, 1 insertion(+)+ create mode 120000 foo.txt++ git-annex sync+commit  ^M+ok^M+pull origin warning: no common commits+From ssh://remote/~/repo+ * [new branch]      git-annex  -> origin/git-annex+^M+ok^M+(merging origin/git-annex into git-annex...)^M+(Recording state in git...)^M+push origin To ssh://git@remote/~/repo.git+ * [new branch]      git-annex -> synced/git-annex+ * [new branch]      master -> synced/master+^M+ok^M++ git-annex copy --to origin+copy foo.txt (checking origin...) (to origin...) ^M+failed^M+git-annex.exe: copy: 1 failed+</pre>++++++### What version of git-annex are you using? On what operating system?+Windows (8 x64):+git-annex version: 4.20130621-g36258de+build flags: Pairing Testsuite S3 WebDAV DNS+Linux (debian wheezy i386):+git-annex version: 4.20130621-g36258de+build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP DNS++other versions+git-bash: git(1.8.0.msysgit.0),ssh(ssh 4.6p1, ssl 0.9.8e 23 feb 2007)+msys: git(none) ssh(ssh 5.4p1, ssl 1.0.0 29 Mar 2010)+cygwin: git(1.7.9) ssh(none)++### 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++build.log:++ set -e++ HP='/c/Program Files (x86)/Haskell Platform/2012.4.0.0'++ FLAGS='-Webapp -Assistant -XMPP'++ PATH='/c/Program Files (x86)/Haskell Platform/2012.4.0.0/bin:/c/Program Files (x86)/Haskell Platform/2012.4.0.0/lib/extralibs/bin:/c/Program Files (x86)/NSIS:/home/Oliver/bin:.:/usr/local/bin:/mingw/bin:/bin:/c/Program Files (x86)/Haskell/bin:/c/Program Files (x86)/Haskell Platform/2013.2.0.0/lib/extralibs/bin:/c/Program Files (x86)/Haskell Platform/2013.2.0.0/bin:/c/Program Files (x86)/AMD APP/bin/x86_64:/c/Program Files (x86)/AMD APP/bin/x86:/c/Windows/system32:/c/Windows:/c/Windows/System32/Wbem:/c/Windows/System32/WindowsPowerShell/v1.0/:/c/Program Files (x86)/ATI Technologies/ATI.ACE/Core-Static:/c/Program Files (x86)/Windows Kits/8.0/Windows Performance Toolkit/:/c/Program Files/Microsoft/Web Platform Installer/:/c/Program Files (x86)/Haskell Platform/2013.2.0.0/mingw/bin:/c/Users/Oliver/AppData/Roaming/cabal/bin'++ rm -f git-annex-installer.exe++ cabal update+Downloading the latest package list from hackage.haskell.org++ rm -rf MissingH-1.2.0.0++ cabal unpack MissingH+Unpacking to MissingH-1.2.0.0\++ cd MissingH-1.2.0.0++ withcyg patch -p1++ PATH='/c/Program Files (x86)/Haskell Platform/2012.4.0.0/bin:/c/Program Files (x86)/Haskell Platform/2012.4.0.0/lib/extralibs/bin:/c/Program Files (x86)/NSIS:/home/Oliver/bin:.:/usr/local/bin:/mingw/bin:/bin:/c/Program Files (x86)/Haskell/bin:/c/Program Files (x86)/Haskell Platform/2013.2.0.0/lib/extralibs/bin:/c/Program Files (x86)/Haskell Platform/2013.2.0.0/bin:/c/Program Files (x86)/AMD APP/bin/x86_64:/c/Program Files (x86)/AMD APP/bin/x86:/c/Windows/system32:/c/Windows:/c/Windows/System32/Wbem:/c/Windows/System32/WindowsPowerShell/v1.0/:/c/Program Files (x86)/ATI Technologies/ATI.ACE/Core-Static:/c/Program Files (x86)/Windows Kits/8.0/Windows Performance Toolkit/:/c/Program Files/Microsoft/Web Platform Installer/:/c/Program Files (x86)/Haskell Platform/2013.2.0.0/mingw/bin:/c/Users/Oliver/AppData/Roaming/cabal/bin:/c/cygwin/bin'++ patch -p1+patching file src/System/IO/WindowsCompat.hs+Hunk #1 succeeded at 119 (offset -1 lines).+Hunk #2 succeeded at 132 (offset -1 lines).++ cabal install+Resolving dependencies...+In order, the following would be installed:+MissingH-1.2.0.0 (reinstall)+cabal.exe: The following packages are likely to be broken by the reinstalls:+hS3-0.5.7+Use --force-reinstalls if you want to install anyway.++ true++ cd ..++ cabal install --only-dependencies '-f-Webapp -Assistant -XMPP'+Resolving dependencies...+All the requested packages are already installed:+Use --reinstall if you want to reinstall anyway.++ '[' -e last-incremental-failed ']'++ touch last-incremental-failed++ withcyg cabal configure '-f-Webapp -Assistant -XMPP'++ PATH='/c/Program Files (x86)/Haskell Platform/2012.4.0.0/bin:/c/Program Files (x86)/Haskell Platform/2012.4.0.0/lib/extralibs/bin:/c/Program Files (x86)/NSIS:/home/Oliver/bin:.:/usr/local/bin:/mingw/bin:/bin:/c/Program Files (x86)/Haskell/bin:/c/Program Files (x86)/Haskell Platform/2013.2.0.0/lib/extralibs/bin:/c/Program Files (x86)/Haskell Platform/2013.2.0.0/bin:/c/Program Files (x86)/AMD APP/bin/x86_64:/c/Program Files (x86)/AMD APP/bin/x86:/c/Windows/system32:/c/Windows:/c/Windows/System32/Wbem:/c/Windows/System32/WindowsPowerShell/v1.0/:/c/Program Files (x86)/ATI Technologies/ATI.ACE/Core-Static:/c/Program Files (x86)/Windows Kits/8.0/Windows Performance Toolkit/:/c/Program Files/Microsoft/Web Platform Installer/:/c/Program Files (x86)/Haskell Platform/2013.2.0.0/mingw/bin:/c/Users/Oliver/AppData/Roaming/cabal/bin:/c/cygwin/bin'++ cabal configure '-f-Webapp -Assistant -XMPP'+Resolving dependencies...+[ 1 of 24] Compiling Utility.Applicative ( Utility\Applicative.hs, dist\setup\Utility\Applicative.o )+[ 2 of 24] Compiling Utility.PartialPrelude ( Utility\PartialPrelude.hs, dist\setup\Utility\PartialPrelude.o )+[ 3 of 24] Compiling Utility.FileSystemEncoding ( Utility\FileSystemEncoding.hs, dist\setup\Utility\FileSystemEncoding.o )+[ 4 of 24] Compiling Utility.Exception ( Utility\Exception.hs, dist\setup\Utility\Exception.o )+[ 5 of 24] Compiling Utility.Misc     ( Utility\Misc.hs, dist\setup\Utility\Misc.o )+[ 6 of 24] Compiling Utility.Process  ( Utility\Process.hs, dist\setup\Utility\Process.o )+[ 7 of 24] Compiling Utility.Env      ( Utility\Env.hs, dist\setup\Utility\Env.o )+[ 8 of 24] Compiling Utility.UserInfo ( Utility\UserInfo.hs, dist\setup\Utility\UserInfo.o )+[ 9 of 24] Compiling Utility.OSX      ( Utility\OSX.hs, dist\setup\Utility\OSX.o )+[10 of 24] Compiling Utility.Tmp      ( Utility\Tmp.hs, dist\setup\Utility\Tmp.o )+[11 of 24] Compiling Utility.Monad    ( Utility\Monad.hs, dist\setup\Utility\Monad.o )+[12 of 24] Compiling Utility.Path     ( Utility\Path.hs, dist\setup\Utility\Path.o )+[13 of 24] Compiling Utility.FreeDesktop ( Utility\FreeDesktop.hs, dist\setup\Utility\FreeDesktop.o )+[16 of 24] Compiling Utility.SafeCommand ( Utility\SafeCommand.hs, dist\setup\Utility\SafeCommand.o )+[17 of 24] Compiling Utility.ExternalSHA ( Utility\ExternalSHA.hs, dist\setup\Utility\ExternalSHA.o )+[18 of 24] Compiling Utility.Directory ( Utility\Directory.hs, dist\setup\Utility\Directory.o )+Linking .\dist\setup\setup.exe ...+  checking version... 4.20130621-g36258de+  checking git... yes+  checking git version... 1.7.9+  checking cp -a... yes+  checking cp -p... yes+  checking cp --reflink=auto... no+  checking xargs -0... yes+  checking rsync... yes+  checking curl... no+  checking wget... yes+  checking bup... no+  checking gpg... not available+  checking lsof... not available+  checking ssh connection caching... no+  checking sha1... sha1sum+  checking sha256... sha256sum+  checking sha512... sha512sum+  checking sha224... sha224sum+  checking sha384... sha384sum+Configuring git-annex-4.20130601...++ withcyg cabal build++ PATH='/c/Program Files (x86)/Haskell Platform/2012.4.0.0/bin:/c/Program Files (x86)/Haskell Platform/2012.4.0.0/lib/extralibs/bin:/c/Program Files (x86)/NSIS:/home/Oliver/bin:.:/usr/local/bin:/mingw/bin:/bin:/c/Program Files (x86)/Haskell/bin:/c/Program Files (x86)/Haskell Platform/2013.2.0.0/lib/extralibs/bin:/c/Program Files (x86)/Haskell Platform/2013.2.0.0/bin:/c/Program Files (x86)/AMD APP/bin/x86_64:/c/Program Files (x86)/AMD APP/bin/x86:/c/Windows/system32:/c/Windows:/c/Windows/System32/Wbem:/c/Windows/System32/WindowsPowerShell/v1.0/:/c/Program Files (x86)/ATI Technologies/ATI.ACE/Core-Static:/c/Program Files (x86)/Windows Kits/8.0/Windows Performance Toolkit/:/c/Program Files/Microsoft/Web Platform Installer/:/c/Program Files (x86)/Haskell Platform/2013.2.0.0/mingw/bin:/c/Users/Oliver/AppData/Roaming/cabal/bin:/c/cygwin/bin'++ cabal build+Building git-annex-4.20130601...+Preprocessing executable 'git-annex' for git-annex-4.20130601...+Touch.hsc:117:2: warning: #warning "utimensat and lutimes not available; building without symlink timestamp preservation support"+Touch.hsc: In function 'main':+Touch.hsc:117:2: warning: #warning "utimensat and lutimes not available; building without symlink timestamp preservation support"+Touch.hsc:117:2: warning: #warning "utimensat and lutimes not available; building without symlink timestamp preservation support"+In file included from Mounts.hsc:23:0:+Utility/libmounts.h:17:3: warning: #warning mounts listing code not available for this OS++Utility\libdiskfree.c:36:3:+     warning: #warning free space checking code not available for this OS++In file included from Utility\libmounts.c:35:0: ++Utility\libmounts.h:17:3:+     warning: #warning mounts listing code not available for this OS+[  1 of 217] Compiling Utility.Dot      ( Utility\Dot.hs, dist\build\git-annex\git-annex-tmp\Utility\Dot.o )+[  2 of 217] Compiling BuildFlags       ( BuildFlags.hs, dist\build\git-annex\git-annex-tmp\BuildFlags.o )+[  3 of 217] Compiling Utility.Percentage ( Utility\Percentage.hs, dist\build\git-annex\git-annex-tmp\Utility\Percentage.o )+[  4 of 217] Compiling Utility.Base64   ( Utility\Base64.hs, dist\build\git-annex\git-annex-tmp\Utility\Base64.o )+[  5 of 217] Compiling Utility.JSONStream ( Utility\JSONStream.hs, dist\build\git-annex\git-annex-tmp\Utility\JSONStream.o )+[  6 of 217] Compiling Git.Types        ( Git\Types.hs, dist\build\git-annex\git-annex-tmp\Git\Types.o )+[  7 of 217] Compiling Utility.DataUnits ( Utility\DataUnits.hs, dist\build\git-annex\git-annex-tmp\Utility\DataUnits.o )+[  8 of 217] Compiling Types.FileMatcher ( Types\FileMatcher.hs, dist\build\git-annex\git-annex-tmp\Types\FileMatcher.o )+[  9 of 217] Compiling Types.BranchState ( Types\BranchState.hs, dist\build\git-annex\git-annex-tmp\Types\BranchState.o )+[ 10 of 217] Compiling Messages.JSON    ( Messages\JSON.hs, dist\build\git-annex\git-annex-tmp\Messages\JSON.o )+[ 11 of 217] Compiling Types.UUID       ( Types\UUID.hs, dist\build\git-annex\git-annex-tmp\Types\UUID.o )+[ 12 of 217] Compiling Types.Group      ( Types\Group.hs, dist\build\git-annex\git-annex-tmp\Types\Group.o )+[ 13 of 217] Compiling Utility.Shell    ( Utility\Shell.hs, dist\build\git-annex\git-annex-tmp\Utility\Shell.o )+[ 14 of 217] Compiling Utility.QuickCheck ( Utility\QuickCheck.hs, dist\build\git-annex\git-annex-tmp\Utility\QuickCheck.o )+[ 15 of 217] Compiling Utility.PartialPrelude ( Utility\PartialPrelude.hs, dist\build\git-annex\git-annex-tmp\Utility\PartialPrelude.o )+[ 16 of 217] Compiling Utility.HumanTime ( Utility\HumanTime.hs, dist\build\git-annex\git-annex-tmp\Utility\HumanTime.o )+[ 17 of 217] Compiling Utility.FileSystemEncoding ( Utility\FileSystemEncoding.hs, dist\build\git-annex\git-annex-tmp\Utility\FileSystemEncoding.o )+[ 18 of 217] Compiling Utility.Touch    ( dist\build\git-annex\git-annex-tmp\Utility\Touch.hs, dist\build\git-annex\git-annex-tmp\Utility\Touch.o )++UtilityTouch.hsc:17:1: Warning:+    The import of `Utility.FileSystemEncoding' is redundant+      except perhaps to import instances from `Utility.FileSystemEncoding'+    To import instances alone, use: import Utility.FileSystemEncoding()++UtilityTouch.hsc:19:1: Warning:+    The import of `Foreign' is redundant+      except perhaps to import instances from `Foreign'+    To import instances alone, use: import Foreign()++UtilityTouch.hsc:21:1: Warning:+    The import of `Control.Monad' is redundant+      except perhaps to import instances from `Control.Monad'+    To import instances alone, use: import Control.Monad()+[ 19 of 217] Compiling Utility.Applicative ( Utility\Applicative.hs, dist\build\git-annex\git-annex-tmp\Utility\Applicative.o )+[ 20 of 217] Compiling Utility.Monad    ( Utility\Monad.hs, dist\build\git-annex\git-annex-tmp\Utility\Monad.o )+[ 21 of 217] Compiling Utility.Exception ( Utility\Exception.hs, dist\build\git-annex\git-annex-tmp\Utility\Exception.o )+[ 22 of 217] Compiling Utility.Tmp      ( Utility\Tmp.hs, dist\build\git-annex\git-annex-tmp\Utility\Tmp.o )+[ 23 of 217] Compiling Utility.Env      ( Utility\Env.hs, dist\build\git-annex\git-annex-tmp\Utility\Env.o )+[ 24 of 217] Compiling Utility.UserInfo ( Utility\UserInfo.hs, dist\build\git-annex\git-annex-tmp\Utility\UserInfo.o )+[ 25 of 217] Compiling Utility.Misc     ( Utility\Misc.hs, dist\build\git-annex\git-annex-tmp\Utility\Misc.o )++Utility\Misc.hs:22:1: Warning:+    The import of `Utility.Exception' is redundant+      except perhaps to import instances from `Utility.Exception'+    To import instances alone, use: import Utility.Exception()+[ 26 of 217] Compiling Utility.Process  ( Utility\Process.hs, dist\build\git-annex\git-annex-tmp\Utility\Process.o )++Utility\Process.hs:44:1: Warning:+    The import of `Data.Maybe' is redundant+      except perhaps to import instances from `Data.Maybe'+    To import instances alone, use: import Data.Maybe()+[ 27 of 217] Compiling Utility.Network  ( Utility\Network.hs, dist\build\git-annex\git-annex-tmp\Utility\Network.o )+[ 28 of 217] Compiling Utility.Verifiable ( Utility\Verifiable.hs, dist\build\git-annex\git-annex-tmp\Utility\Verifiable.o )+[ 29 of 217] Compiling Utility.Format   ( Utility\Format.hs, dist\build\git-annex\git-annex-tmp\Utility\Format.o )+[ 30 of 217] Compiling Build.SysConfig  ( Build\SysConfig.hs, dist\build\git-annex\git-annex-tmp\Build\SysConfig.o )+[ 31 of 217] Compiling Utility.Path     ( Utility\Path.hs, dist\build\git-annex\git-annex-tmp\Utility\Path.o )+[ 32 of 217] Compiling Config.Cost      ( Config\Cost.hs, dist\build\git-annex\git-annex-tmp\Config\Cost.o )+[ 33 of 217] Compiling Types.Messages   ( Types\Messages.hs, dist\build\git-annex\git-annex-tmp\Types\Messages.o )+[ 34 of 217] Compiling Types.TrustLevel ( Types\TrustLevel.hs, dist\build\git-annex\git-annex-tmp\Types\TrustLevel.o )+[ 35 of 217] Compiling Utility.SafeCommand ( Utility\SafeCommand.hs, dist\build\git-annex\git-annex-tmp\Utility\SafeCommand.o )+[ 36 of 217] Compiling Utility.Directory ( Utility\Directory.hs, dist\build\git-annex\git-annex-tmp\Utility\Directory.o )+[ 37 of 217] Compiling Utility.ExternalSHA ( Utility\ExternalSHA.hs, dist\build\git-annex\git-annex-tmp\Utility\ExternalSHA.o )+[ 38 of 217] Compiling Common           ( Common.hs, dist\build\git-annex\git-annex-tmp\Common.o )+[ 39 of 217] Compiling Git.Filename     ( Git\Filename.hs, dist\build\git-annex\git-annex-tmp\Git\Filename.o )+[ 40 of 217] Compiling Logs.UUIDBased   ( Logs\UUIDBased.hs, dist\build\git-annex\git-annex-tmp\Logs\UUIDBased.o )+[ 41 of 217] Compiling Types.Key        ( Types\Key.hs, dist\build\git-annex\git-annex-tmp\Types\Key.o )+[ 42 of 217] Compiling Utility.FileMode ( Utility\FileMode.hs, dist\build\git-annex\git-annex-tmp\Utility\FileMode.o )+[ 43 of 217] Compiling Git              ( Git.hs, dist\build\git-annex\git-annex-tmp\Git.o )++Git.hs:41:1: Warning:+    The import of `Utility.FileMode' is redundant+      except perhaps to import instances from `Utility.FileMode'+    To import instances alone, use: import Utility.FileMode()+[ 44 of 217] Compiling Utility.InodeCache ( Utility\InodeCache.hs, dist\build\git-annex\git-annex-tmp\Utility\InodeCache.o )+[ 45 of 217] Compiling Types.KeySource  ( Types\KeySource.hs, dist\build\git-annex\git-annex-tmp\Types\KeySource.o )+[ 46 of 217] Compiling Types.Backend    ( Types\Backend.hs, dist\build\git-annex\git-annex-tmp\Types\Backend.o )+[ 47 of 217] Compiling Utility.Gpg      ( Utility\Gpg.hs, dist\build\git-annex\git-annex-tmp\Utility\Gpg.o )++Utility\Gpg.hs:12:1: Warning:+    The import of `System.Posix.Types' is redundant+      except perhaps to import instances from `System.Posix.Types'+    To import instances alone, use: import System.Posix.Types()++Utility\Gpg.hs:14:1: Warning:+    The import of `Control.Concurrent' is redundant+      except perhaps to import instances from `Control.Concurrent'+    To import instances alone, use: import Control.Concurrent()++Utility\Gpg.hs:15:1: Warning:+    The import of `Control.Exception' is redundant+      except perhaps to import instances from `Control.Exception'+    To import instances alone, use: import Control.Exception()++Utility\Gpg.hs:16:1: Warning:+    The import of `System.Path' is redundant+      except perhaps to import instances from `System.Path'+    To import instances alone, use: import System.Path()++Utility\Gpg.hs:19:1: Warning:+    The import of `Utility.Env' is redundant+      except perhaps to import instances from `Utility.Env'+    To import instances alone, use: import Utility.Env()+[ 48 of 217] Compiling Types.Crypto     ( Types\Crypto.hs, dist\build\git-annex\git-annex-tmp\Types\Crypto.o )+[ 49 of 217] Compiling Utility.Matcher  ( Utility\Matcher.hs, dist\build\git-annex\git-annex-tmp\Utility\Matcher.o )+[ 50 of 217] Compiling Utility.Metered  ( Utility\Metered.hs, dist\build\git-annex\git-annex-tmp\Utility\Metered.o )+[ 51 of 217] Compiling Git.FilePath     ( Git\FilePath.hs, dist\build\git-annex\git-annex-tmp\Git\FilePath.o )+[ 52 of 217] Compiling Git.Url          ( Git\Url.hs, dist\build\git-annex\git-annex-tmp\Git\Url.o )+[ 53 of 217] Compiling Git.Construct    ( Git\Construct.hs, dist\build\git-annex\git-annex-tmp\Git\Construct.o )+[ 54 of 217] Compiling Git.Config       ( Git\Config.hs, dist\build\git-annex\git-annex-tmp\Git\Config.o )+[ 55 of 217] Compiling Git.CurrentRepo  ( Git\CurrentRepo.hs, dist\build\git-annex\git-annex-tmp\Git\CurrentRepo.o )++Git\CurrentRepo.hs:16:1: Warning:+    The import of `Utility.Env' is redundant+      except perhaps to import instances from `Utility.Env'+    To import instances alone, use: import Utility.Env()++Git\CurrentRepo.hs:43:17: Warning: Defined but not used: `s'+[ 56 of 217] Compiling Git.SharedRepository ( Git\SharedRepository.hs, dist\build\git-annex\git-annex-tmp\Git\SharedRepository.o )+[ 57 of 217] Compiling Types.GitConfig  ( Types\GitConfig.hs, dist\build\git-annex\git-annex-tmp\Types\GitConfig.o )+[ 58 of 217] Compiling Types.Remote     ( Types\Remote.hs, dist\build\git-annex\git-annex-tmp\Types\Remote.o )+[ 59 of 217] Compiling Types.StandardGroups ( Types\StandardGroups.hs, dist\build\git-annex\git-annex-tmp\Types\StandardGroups.o )+[ 60 of 217] Compiling Utility.Gpg.Types ( Utility\Gpg\Types.hs, dist\build\git-annex\git-annex-tmp\Utility\Gpg\Types.o )+[ 61 of 217] Compiling Git.Sha          ( Git\Sha.hs, dist\build\git-annex\git-annex-tmp\Git\Sha.o )+[ 62 of 217] Compiling Utility.CoProcess ( Utility\CoProcess.hs, dist\build\git-annex\git-annex-tmp\Utility\CoProcess.o )+[ 63 of 217] Compiling Git.Command      ( Git\Command.hs, dist\build\git-annex\git-annex-tmp\Git\Command.o )+[ 64 of 217] Compiling Git.LsFiles      ( Git\LsFiles.hs, dist\build\git-annex\git-annex-tmp\Git\LsFiles.o )+[ 65 of 217] Compiling Git.CatFile      ( Git\CatFile.hs, dist\build\git-annex\git-annex-tmp\Git\CatFile.o )+[ 66 of 217] Compiling Git.UpdateIndex  ( Git\UpdateIndex.hs, dist\build\git-annex\git-annex-tmp\Git\UpdateIndex.o )+[ 67 of 217] Compiling Git.Queue        ( Git\Queue.hs, dist\build\git-annex\git-annex-tmp\Git\Queue.o )+[ 68 of 217] Compiling Git.Version      ( Git\Version.hs, dist\build\git-annex\git-annex-tmp\Git\Version.o )+[ 69 of 217] Compiling Git.CheckAttr    ( Git\CheckAttr.hs, dist\build\git-annex\git-annex-tmp\Git\CheckAttr.o )+[ 70 of 217] Compiling Annex            ( Annex.hs, dist\build\git-annex\git-annex-tmp\Annex.o )+[ 71 of 217] Compiling Types.Option     ( Types\Option.hs, dist\build\git-annex\git-annex-tmp\Types\Option.o )+[ 72 of 217] Compiling Types            ( Types.hs, dist\build\git-annex\git-annex-tmp\Types.o )+[ 73 of 217] Compiling Locations        ( Locations.hs, dist\build\git-annex\git-annex-tmp\Locations.o )+[ 74 of 217] Compiling Messages         ( Messages.hs, dist\build\git-annex\git-annex-tmp\Messages.o )+[ 75 of 217] Compiling Common.Annex     ( Common\Annex.hs, dist\build\git-annex\git-annex-tmp\Common\Annex.o )+[ 76 of 217] Compiling Crypto           ( Crypto.hs, dist\build\git-annex\git-annex-tmp\Crypto.o )+[ 77 of 217] Compiling Annex.CatFile    ( Annex\CatFile.hs, dist\build\git-annex\git-annex-tmp\Annex\CatFile.o )+[ 78 of 217] Compiling Backend.SHA      ( Backend\SHA.hs, dist\build\git-annex\git-annex-tmp\Backend\SHA.o )+[ 79 of 217] Compiling Backend.WORM     ( Backend\WORM.hs, dist\build\git-annex\git-annex-tmp\Backend\WORM.o )+[ 80 of 217] Compiling Backend.URL      ( Backend\URL.hs, dist\build\git-annex\git-annex-tmp\Backend\URL.o )+[ 81 of 217] Compiling Annex.Exception  ( Annex\Exception.hs, dist\build\git-annex\git-annex-tmp\Annex\Exception.o )+[ 82 of 217] Compiling Remote.Helper.Special ( Remote\Helper\Special.hs, dist\build\git-annex\git-annex-tmp\Remote\Helper\Special.o )+[ 83 of 217] Compiling Remote.Helper.Chunked ( Remote\Helper\Chunked.hs, dist\build\git-annex\git-annex-tmp\Remote\Helper\Chunked.o )+[ 84 of 217] Compiling Annex.Environment ( Annex\Environment.hs, dist\build\git-annex\git-annex-tmp\Annex\Environment.o )++Annex\Environment.hs:13:1: Warning:+    The import of `Utility.Env' is redundant+      except perhaps to import instances from `Utility.Env'+    To import instances alone, use: import Utility.Env()++Annex\Environment.hs:14:1: Warning:+    The import of `Utility.UserInfo' is redundant+      except perhaps to import instances from `Utility.UserInfo'+    To import instances alone, use: import Utility.UserInfo()+[ 85 of 217] Compiling Types.Command    ( Types\Command.hs, dist\build\git-annex\git-annex-tmp\Types\Command.o )+[ 86 of 217] Compiling Usage            ( Usage.hs, dist\build\git-annex\git-annex-tmp\Usage.o )+[ 87 of 217] Compiling Annex.Queue      ( Annex\Queue.hs, dist\build\git-annex\git-annex-tmp\Annex\Queue.o )+[ 88 of 217] Compiling Annex.BranchState ( Annex\BranchState.hs, dist\build\git-annex\git-annex-tmp\Annex\BranchState.o )+[ 89 of 217] Compiling Remote.Helper.Encryptable ( Remote\Helper\Encryptable.hs, dist\build\git-annex\git-annex-tmp\Remote\Helper\Encryptable.o )+[ 90 of 217] Compiling Fields           ( Fields.hs, dist\build\git-annex\git-annex-tmp\Fields.o )+[ 91 of 217] Compiling Annex.CheckAttr  ( Annex\CheckAttr.hs, dist\build\git-annex\git-annex-tmp\Annex\CheckAttr.o )+[ 92 of 217] Compiling Git.HashObject   ( Git\HashObject.hs, dist\build\git-annex\git-annex-tmp\Git\HashObject.o )+[ 93 of 217] Compiling Annex.Link       ( Annex\Link.hs, dist\build\git-annex\git-annex-tmp\Annex\Link.o )+[ 94 of 217] Compiling Utility.CopyFile ( Utility\CopyFile.hs, dist\build\git-annex\git-annex-tmp\Utility\CopyFile.o )+[ 95 of 217] Compiling Git.Ref          ( Git\Ref.hs, dist\build\git-annex\git-annex-tmp\Git\Ref.o )+[ 96 of 217] Compiling Git.Branch       ( Git\Branch.hs, dist\build\git-annex\git-annex-tmp\Git\Branch.o )+[ 97 of 217] Compiling Git.UnionMerge   ( Git\UnionMerge.hs, dist\build\git-annex\git-annex-tmp\Git\UnionMerge.o )+[ 98 of 217] Compiling Git.Merge        ( Git\Merge.hs, dist\build\git-annex\git-annex-tmp\Git\Merge.o )+[ 99 of 217] Compiling Git.DiffTree     ( Git\DiffTree.hs, dist\build\git-annex\git-annex-tmp\Git\DiffTree.o )+[100 of 217] Compiling Utility.DiskFree ( Utility\DiskFree.hs, dist\build\git-annex\git-annex-tmp\Utility\DiskFree.o )+[101 of 217] Compiling Utility.Url      ( Utility\Url.hs, dist\build\git-annex\git-annex-tmp\Utility\Url.o )+[102 of 217] Compiling Utility.Rsync    ( Utility\Rsync.hs, dist\build\git-annex\git-annex-tmp\Utility\Rsync.o )+[103 of 217] Compiling Utility.LogFile  ( Utility\LogFile.hs, dist\build\git-annex\git-annex-tmp\Utility\LogFile.o )++Utility\LogFile.hs:67:1: Warning:+    Top-level binding with no type signature:+      redir :: forall t t1 t2. t -> t1 -> t2+[104 of 217] Compiling Utility.Daemon   ( Utility\Daemon.hs, dist\build\git-annex\git-annex-tmp\Utility\Daemon.o )++Utility\Daemon.hs:13:1: Warning:+    The import of `Utility.LogFile' is redundant+      except perhaps to import instances from `Utility.LogFile'+    To import instances alone, use: import Utility.LogFile()++Utility\Daemon.hs:19:1: Warning:+    The import of `System.Posix.Types' is redundant+      except perhaps to import instances from `System.Posix.Types'+    To import instances alone, use: import System.Posix.Types()+[105 of 217] Compiling Git.AutoCorrect  ( Git\AutoCorrect.hs, dist\build\git-annex\git-annex-tmp\Git\AutoCorrect.o )+[106 of 217] Compiling Utility.ThreadScheduler ( Utility\ThreadScheduler.hs, dist\build\git-annex\git-annex-tmp\Utility\ThreadScheduler.o )+[107 of 217] Compiling Git.LsTree       ( Git\LsTree.hs, dist\build\git-annex\git-annex-tmp\Git\LsTree.o )+[108 of 217] Compiling Config           ( Config.hs, dist\build\git-annex\git-annex-tmp\Config.o )+[109 of 217] Compiling Annex.UUID       ( Annex\UUID.hs, dist\build\git-annex\git-annex-tmp\Annex\UUID.o )+[110 of 217] Compiling Backend          ( Backend.hs, dist\build\git-annex\git-annex-tmp\Backend.o )+[111 of 217] Compiling Annex.Version    ( Annex\Version.hs, dist\build\git-annex\git-annex-tmp\Annex\Version.o )+[112 of 217] Compiling Annex.Perms      ( Annex\Perms.hs, dist\build\git-annex\git-annex-tmp\Annex\Perms.o )+[113 of 217] Compiling Logs.Transfer    ( Logs\Transfer.hs, dist\build\git-annex\git-annex-tmp\Logs\Transfer.o )++Logs\Transfer.hs:126:20: Warning: Defined but not used: `mode'++Logs\Transfer.hs:146:29: Warning: Defined but not used: `fd'+[114 of 217] Compiling Annex.ReplaceFile ( Annex\ReplaceFile.hs, dist\build\git-annex\git-annex-tmp\Annex\ReplaceFile.o )+[115 of 217] Compiling Annex.Journal    ( Annex\Journal.hs, dist\build\git-annex\git-annex-tmp\Annex\Journal.o )++Annex\Journal.hs:89:23: Warning: Defined but not used: `mode'+[116 of 217] Compiling Annex.Branch     ( Annex\Branch.hs, dist\build\git-annex\git-annex-tmp\Annex\Branch.o )+[117 of 217] Compiling Logs.Remote      ( Logs\Remote.hs, dist\build\git-annex\git-annex-tmp\Logs\Remote.o )+[118 of 217] Compiling Logs.Presence    ( Logs\Presence.hs, dist\build\git-annex\git-annex-tmp\Logs\Presence.o )+[119 of 217] Compiling Logs.UUID        ( Logs\UUID.hs, dist\build\git-annex\git-annex-tmp\Logs\UUID.o )+[120 of 217] Compiling Logs.Location    ( Logs\Location.hs, dist\build\git-annex\git-annex-tmp\Logs\Location.o )+[121 of 217] Compiling Annex.Content.Direct ( Annex\Content\Direct.hs, dist\build\git-annex\git-annex-tmp\Annex\Content\Direct.o )+[122 of 217] Compiling Annex.Content    ( Annex\Content.hs, dist\build\git-annex\git-annex-tmp\Annex\Content.o )++Annex\Content.hs:50:1: Warning:+    The import of `Annex.Exception' is redundant+      except perhaps to import instances from `Annex.Exception'+    To import instances alone, use: import Annex.Exception()++Annex\Content.hs:89:21: Warning: Defined but not used: `f'++Annex\Content.hs:96:21: Warning: Defined but not used: `h'++Annex\Content.hs:106:9: Warning: Defined but not used: `is_locked'++Annex\Content.hs:113:13: Warning: Defined but not used: `key'+[123 of 217] Compiling Annex.Direct     ( Annex\Direct.hs, dist\build\git-annex\git-annex-tmp\Annex\Direct.o )+[124 of 217] Compiling Init             ( Init.hs, dist\build\git-annex\git-annex-tmp\Init.o )++Init.hs:29:1: Warning:+    The import of `Utility.UserInfo' is redundant+      except perhaps to import instances from `Utility.UserInfo'+    To import instances alone, use: import Utility.UserInfo()++Init.hs:31:1: Warning:+    The import of `Utility.FileMode' is redundant+      except perhaps to import instances from `Utility.FileMode'+    To import instances alone, use: import Utility.FileMode()+[125 of 217] Compiling Logs.Web         ( Logs\Web.hs, dist\build\git-annex\git-annex-tmp\Logs\Web.o )+[126 of 217] Compiling Logs.Group       ( Logs\Group.hs, dist\build\git-annex\git-annex-tmp\Logs\Group.o )+[127 of 217] Compiling Upgrade.V2       ( Upgrade\V2.hs, dist\build\git-annex\git-annex-tmp\Upgrade\V2.o )+[128 of 217] Compiling Upgrade          ( Upgrade.hs, dist\build\git-annex\git-annex-tmp\Upgrade.o )+[129 of 217] Compiling Creds            ( Creds.hs, dist\build\git-annex\git-annex-tmp\Creds.o )++Creds.hs:18:1: Warning:+    The import of `Utility.Env' is redundant+      except perhaps to import instances from `Utility.Env'+    To import instances alone, use: import Utility.Env()+[130 of 217] Compiling Remote.Helper.AWS ( Remote\Helper\AWS.hs, dist\build\git-annex\git-annex-tmp\Remote\Helper\AWS.o )+[131 of 217] Compiling Annex.LockPool   ( Annex\LockPool.hs, dist\build\git-annex\git-annex-tmp\Annex\LockPool.o )++Annex\LockPool.hs:17:1: Warning:+    The import of `Annex.Perms' is redundant+      except perhaps to import instances from `Annex.Perms'+    To import instances alone, use: import Annex.Perms()++Annex\LockPool.hs:39:12: Warning: Defined but not used: `fd'+[132 of 217] Compiling Remote.Helper.Hooks ( Remote\Helper\Hooks.hs, dist\build\git-annex\git-annex-tmp\Remote\Helper\Hooks.o )++Remote\Helper\Hooks.hs:18:1: Warning:+    The import of `Annex.Perms' is redundant+      except perhaps to import instances from `Annex.Perms'+    To import instances alone, use: import Annex.Perms()++Remote\Helper\Hooks.hs:74:17: Warning: Defined but not used: `lck'+[133 of 217] Compiling Remote.S3        ( Remote\S3.hs, dist\build\git-annex\git-annex-tmp\Remote\S3.o )+[134 of 217] Compiling Remote.Directory ( Remote\Directory.hs, dist\build\git-annex\git-annex-tmp\Remote\Directory.o )+[135 of 217] Compiling Remote.Web       ( Remote\Web.hs, dist\build\git-annex\git-annex-tmp\Remote\Web.o )+[136 of 217] Compiling Remote.WebDAV    ( Remote\WebDAV.hs, dist\build\git-annex\git-annex-tmp\Remote\WebDAV.o )+[137 of 217] Compiling Remote.Glacier   ( Remote\Glacier.hs, dist\build\git-annex\git-annex-tmp\Remote\Glacier.o )+[138 of 217] Compiling Remote.Hook      ( Remote\Hook.hs, dist\build\git-annex\git-annex-tmp\Remote\Hook.o )+[139 of 217] Compiling Annex.Ssh        ( Annex\Ssh.hs, dist\build\git-annex\git-annex-tmp\Annex\Ssh.o )++Annex\Ssh.hs:21:1: Warning:+    The import of `Annex.Perms' is redundant+      except perhaps to import instances from `Annex.Perms'+    To import instances alone, use: import Annex.Perms()+[140 of 217] Compiling Remote.Rsync     ( Remote\Rsync.hs, dist\build\git-annex\git-annex-tmp\Remote\Rsync.o )+[141 of 217] Compiling Remote.Helper.Ssh ( Remote\Helper\Ssh.hs, dist\build\git-annex\git-annex-tmp\Remote\Helper\Ssh.o )+[142 of 217] Compiling Remote.Git       ( Remote\Git.hs, dist\build\git-annex\git-annex-tmp\Remote\Git.o )++Remote\Git.hs:20:1: Warning:+    The import of `Utility.CopyFile' is redundant+      except perhaps to import instances from `Utility.CopyFile'+    To import instances alone, use: import Utility.CopyFile()++Remote\Git.hs:360:21: Warning: Defined but not used: `r'++Remote\Git.hs:360:23: Warning: Defined but not used: `key'++Remote\Git.hs:360:27: Warning: Defined but not used: `file'+[143 of 217] Compiling Remote.Bup       ( Remote\Bup.hs, dist\build\git-annex\git-annex-tmp\Remote\Bup.o )+[144 of 217] Compiling Remote.List      ( Remote\List.hs, dist\build\git-annex\git-annex-tmp\Remote\List.o )+[145 of 217] Compiling Logs.Trust       ( Logs\Trust.hs, dist\build\git-annex\git-annex-tmp\Logs\Trust.o )+[146 of 217] Compiling Remote           ( Remote.hs, dist\build\git-annex\git-annex-tmp\Remote.o )+[147 of 217] Compiling Limit            ( Limit.hs, dist\build\git-annex\git-annex-tmp\Limit.o )+[148 of 217] Compiling Option           ( Option.hs, dist\build\git-annex\git-annex-tmp\Option.o )+[149 of 217] Compiling Annex.FileMatcher ( Annex\FileMatcher.hs, dist\build\git-annex\git-annex-tmp\Annex\FileMatcher.o )+[150 of 217] Compiling Logs.PreferredContent ( Logs\PreferredContent.hs, dist\build\git-annex\git-annex-tmp\Logs\PreferredContent.o )+[151 of 217] Compiling Annex.Wanted     ( Annex\Wanted.hs, dist\build\git-annex\git-annex-tmp\Annex\Wanted.o )+[152 of 217] Compiling Seek             ( Seek.hs, dist\build\git-annex\git-annex-tmp\Seek.o )+[153 of 217] Compiling Checks           ( Checks.hs, dist\build\git-annex\git-annex-tmp\Checks.o )+[154 of 217] Compiling Command          ( Command.hs, dist\build\git-annex\git-annex-tmp\Command.o )+[155 of 217] Compiling Logs.Unused      ( Logs\Unused.hs, dist\build\git-annex\git-annex-tmp\Logs\Unused.o )+[156 of 217] Compiling CmdLine          ( CmdLine.hs, dist\build\git-annex\git-annex-tmp\CmdLine.o )+[157 of 217] Compiling Command.ConfigList ( Command\ConfigList.hs, dist\build\git-annex\git-annex-tmp\Command\ConfigList.o )+[158 of 217] Compiling Command.InAnnex  ( Command\InAnnex.hs, dist\build\git-annex\git-annex-tmp\Command\InAnnex.o )+[159 of 217] Compiling Command.DropKey  ( Command\DropKey.hs, dist\build\git-annex\git-annex-tmp\Command\DropKey.o )+[160 of 217] Compiling Command.SendKey  ( Command\SendKey.hs, dist\build\git-annex\git-annex-tmp\Command\SendKey.o )+[161 of 217] Compiling Command.RecvKey  ( Command\RecvKey.hs, dist\build\git-annex\git-annex-tmp\Command\RecvKey.o )+[162 of 217] Compiling Command.TransferInfo ( Command\TransferInfo.hs, dist\build\git-annex\git-annex-tmp\Command\TransferInfo.o )+[163 of 217] Compiling Command.Commit   ( Command\Commit.hs, dist\build\git-annex\git-annex-tmp\Command\Commit.o )+[164 of 217] Compiling GitAnnex.Options ( GitAnnex\Options.hs, dist\build\git-annex\git-annex-tmp\GitAnnex\Options.o )+[165 of 217] Compiling Command.Unannex  ( Command\Unannex.hs, dist\build\git-annex\git-annex-tmp\Command\Unannex.o )+[166 of 217] Compiling Command.FromKey  ( Command\FromKey.hs, dist\build\git-annex\git-annex-tmp\Command\FromKey.o )+[167 of 217] Compiling Command.Fix      ( Command\Fix.hs, dist\build\git-annex\git-annex-tmp\Command\Fix.o )+[168 of 217] Compiling Command.Init     ( Command\Init.hs, dist\build\git-annex\git-annex-tmp\Command\Init.o )+[169 of 217] Compiling Command.Describe ( Command\Describe.hs, dist\build\git-annex\git-annex-tmp\Command\Describe.o )+[170 of 217] Compiling Command.InitRemote ( Command\InitRemote.hs, dist\build\git-annex\git-annex-tmp\Command\InitRemote.o )+[171 of 217] Compiling Command.EnableRemote ( Command\EnableRemote.hs, dist\build\git-annex\git-annex-tmp\Command\EnableRemote.o )+[172 of 217] Compiling Command.Unused   ( Command\Unused.hs, dist\build\git-annex\git-annex-tmp\Command\Unused.o )+[173 of 217] Compiling Command.Unlock   ( Command\Unlock.hs, dist\build\git-annex\git-annex-tmp\Command\Unlock.o )+[174 of 217] Compiling Command.Lock     ( Command\Lock.hs, dist\build\git-annex\git-annex-tmp\Command\Lock.o )+[175 of 217] Compiling Command.Find     ( Command\Find.hs, dist\build\git-annex\git-annex-tmp\Command\Find.o )+[176 of 217] Compiling Command.Whereis  ( Command\Whereis.hs, dist\build\git-annex\git-annex-tmp\Command\Whereis.o )+[177 of 217] Compiling Command.Log      ( Command\Log.hs, dist\build\git-annex\git-annex-tmp\Command\Log.o )+[178 of 217] Compiling Command.Merge    ( Command\Merge.hs, dist\build\git-annex\git-annex-tmp\Command\Merge.o )+[179 of 217] Compiling Command.Uninit   ( Command\Uninit.hs, dist\build\git-annex\git-annex-tmp\Command\Uninit.o )+[180 of 217] Compiling Command.Trust    ( Command\Trust.hs, dist\build\git-annex\git-annex-tmp\Command\Trust.o )+[181 of 217] Compiling Command.Untrust  ( Command\Untrust.hs, dist\build\git-annex\git-annex-tmp\Command\Untrust.o )+[182 of 217] Compiling Command.Semitrust ( Command\Semitrust.hs, dist\build\git-annex\git-annex-tmp\Command\Semitrust.o )+[183 of 217] Compiling Command.Dead     ( Command\Dead.hs, dist\build\git-annex\git-annex-tmp\Command\Dead.o )+[184 of 217] Compiling Command.Group    ( Command\Group.hs, dist\build\git-annex\git-annex-tmp\Command\Group.o )+[185 of 217] Compiling Command.Content  ( Command\Content.hs, dist\build\git-annex\git-annex-tmp\Command\Content.o )+[186 of 217] Compiling Command.Ungroup  ( Command\Ungroup.hs, dist\build\git-annex\git-annex-tmp\Command\Ungroup.o )+[187 of 217] Compiling Command.Vicfg    ( Command\Vicfg.hs, dist\build\git-annex\git-annex-tmp\Command\Vicfg.o )+[188 of 217] Compiling Command.RmUrl    ( Command\RmUrl.hs, dist\build\git-annex\git-annex-tmp\Command\RmUrl.o )+[189 of 217] Compiling Command.Map      ( Command\Map.hs, dist\build\git-annex\git-annex-tmp\Command\Map.o )+[190 of 217] Compiling Command.Upgrade  ( Command\Upgrade.hs, dist\build\git-annex\git-annex-tmp\Command\Upgrade.o )+[191 of 217] Compiling Command.Version  ( Command\Version.hs, dist\build\git-annex\git-annex-tmp\Command\Version.o )+[192 of 217] Compiling Command.Test     ( Command\Test.hs, dist\build\git-annex\git-annex-tmp\Command\Test.o )+[193 of 217] Compiling Command.Add      ( Command\Add.hs, dist\build\git-annex\git-annex-tmp\Command\Add.o )+[194 of 217] Compiling Command.ReKey    ( Command\ReKey.hs, dist\build\git-annex\git-annex-tmp\Command\ReKey.o )+[195 of 217] Compiling Command.AddUnused ( Command\AddUnused.hs, dist\build\git-annex\git-annex-tmp\Command\AddUnused.o )+[196 of 217] Compiling Command.PreCommit ( Command\PreCommit.hs, dist\build\git-annex\git-annex-tmp\Command\PreCommit.o )+[197 of 217] Compiling Command.Import   ( Command\Import.hs, dist\build\git-annex\git-annex-tmp\Command\Import.o )+[198 of 217] Compiling Command.Drop     ( Command\Drop.hs, dist\build\git-annex\git-annex-tmp\Command\Drop.o )+[199 of 217] Compiling Command.Move     ( Command\Move.hs, dist\build\git-annex\git-annex-tmp\Command\Move.o )+[200 of 217] Compiling Command.Copy     ( Command\Copy.hs, dist\build\git-annex\git-annex-tmp\Command\Copy.o )+[201 of 217] Compiling Command.Get      ( Command\Get.hs, dist\build\git-annex\git-annex-tmp\Command\Get.o )+[202 of 217] Compiling Command.TransferKey ( Command\TransferKey.hs, dist\build\git-annex\git-annex-tmp\Command\TransferKey.o )+[203 of 217] Compiling Command.DropUnused ( Command\DropUnused.hs, dist\build\git-annex\git-annex-tmp\Command\DropUnused.o )+[204 of 217] Compiling Command.Fsck     ( Command\Fsck.hs, dist\build\git-annex\git-annex-tmp\Command\Fsck.o )+[205 of 217] Compiling Command.Reinject ( Command\Reinject.hs, dist\build\git-annex\git-annex-tmp\Command\Reinject.o )+[206 of 217] Compiling Command.Migrate  ( Command\Migrate.hs, dist\build\git-annex\git-annex-tmp\Command\Migrate.o )+[207 of 217] Compiling Command.Status   ( Command\Status.hs, dist\build\git-annex\git-annex-tmp\Command\Status.o )+[208 of 217] Compiling Command.Sync     ( Command\Sync.hs, dist\build\git-annex\git-annex-tmp\Command\Sync.o )+[209 of 217] Compiling Command.Help     ( Command\Help.hs, dist\build\git-annex\git-annex-tmp\Command\Help.o )+[210 of 217] Compiling Command.AddUrl   ( Command\AddUrl.hs, dist\build\git-annex\git-annex-tmp\Command\AddUrl.o )+[211 of 217] Compiling Command.Direct   ( Command\Direct.hs, dist\build\git-annex\git-annex-tmp\Command\Direct.o )+[212 of 217] Compiling Command.Indirect ( Command\Indirect.hs, dist\build\git-annex\git-annex-tmp\Command\Indirect.o )+[213 of 217] Compiling Command.FuzzTest ( Command\FuzzTest.hs, dist\build\git-annex\git-annex-tmp\Command\FuzzTest.o )+[214 of 217] Compiling Test             ( Test.hs, dist\build\git-annex\git-annex-tmp\Test.o )+[215 of 217] Compiling GitAnnexShell    ( GitAnnexShell.hs, dist\build\git-annex\git-annex-tmp\GitAnnexShell.o )+[216 of 217] Compiling GitAnnex         ( GitAnnex.hs, dist\build\git-annex\git-annex-tmp\GitAnnex.o )+[217 of 217] Compiling Main             ( git-annex.hs, dist\build\git-annex\git-annex-tmp\Main.o )+Linking dist\build\git-annex\git-annex.exe ...++ cabal install nsis+Resolving dependencies...+All the requested packages are already installed:+nsis-0.2.2+Use --reinstall if you want to reinstall anyway.++ ghc --make Build/NullSoftInstaller.hs+[15 of 18] Compiling Build.SysConfig  ( Build\SysConfig.hs, Build\SysConfig.o )+Linking Build\NullSoftInstaller.exe ...++ withcyg Build/NullSoftInstaller.exe++ PATH='/c/Program Files (x86)/Haskell Platform/2012.4.0.0/bin:/c/Program Files (x86)/Haskell Platform/2012.4.0.0/lib/extralibs/bin:/c/Program Files (x86)/NSIS:/home/Oliver/bin:.:/usr/local/bin:/mingw/bin:/bin:/c/Program Files (x86)/Haskell/bin:/c/Program Files (x86)/Haskell Platform/2013.2.0.0/lib/extralibs/bin:/c/Program Files (x86)/Haskell Platform/2013.2.0.0/bin:/c/Program Files (x86)/AMD APP/bin/x86_64:/c/Program Files (x86)/AMD APP/bin/x86:/c/Windows/system32:/c/Windows:/c/Windows/System32/Wbem:/c/Windows/System32/WindowsPowerShell/v1.0/:/c/Program Files (x86)/ATI Technologies/ATI.ACE/Core-Static:/c/Program Files (x86)/Windows Kits/8.0/Windows Performance Toolkit/:/c/Program Files/Microsoft/Web Platform Installer/:/c/Program Files (x86)/Haskell Platform/2013.2.0.0/mingw/bin:/c/Users/Oliver/AppData/Roaming/cabal/bin:/c/cygwin/bin'++ Build/NullSoftInstaller.exe+MakeNSIS v2.46 - Copyright 1995-2009 Contributors+See the file COPYING for license details.+Credits can be found in the Users Manual.++Processing config: +Processing plugin dlls: "c:\Program Files (x86)\NSIS\Plugins\*.dll"+ - AdvSplash::show+ - Banner::destroy+ - Banner::getWindow+ - Banner::show+ - BgImage::AddImage+ - BgImage::AddText+ - BgImage::Clear+ - BgImage::Destroy+ - BgImage::Redraw+ - BgImage::SetBg+ - BgImage::SetReturn+ - BgImage::Sound+ - Dialer::AttemptConnect+ - Dialer::AutodialHangup+ - Dialer::AutodialOnline+ - Dialer::AutodialUnattended+ - Dialer::GetConnectedState+ - InstallOptions::dialog+ - InstallOptions::initDialog+ - InstallOptions::show+ - LangDLL::LangDialog+ - Math::Script+ - NSISdl::download+ - NSISdl::download_quiet+ - Splash::show+ - StartMenu::Init+ - StartMenu::Select+ - StartMenu::Show+ - System::Alloc+ - System::Call+ - System::Copy+ - System::Free+ - System::Get+ - System::Int64Op+ - System::Store+ - TypeLib::GetLibVersion+ - TypeLib::Register+ - TypeLib::UnRegister+ - UserInfo::GetAccountType+ - UserInfo::GetName+ - UserInfo::GetOriginalAccountType+ - VPatch::GetFileCRC32+ - VPatch::GetFileMD5+ - VPatch::vpatchfile+ - nsDialogs::Create+ - nsDialogs::CreateControl+ - nsDialogs::CreateItem+ - nsDialogs::CreateTimer+ - nsDialogs::GetUserData+ - nsDialogs::KillTimer+ - nsDialogs::OnBack+ - nsDialogs::OnChange+ - nsDialogs::OnClick+ - nsDialogs::OnNotify+ - nsDialogs::SelectFileDialog+ - nsDialogs::SelectFolderDialog+ - nsDialogs::SetRTL+ - nsDialogs::SetUserData+ - nsDialogs::Show+ - nsExec::Exec+ - nsExec::ExecToLog+ - nsExec::ExecToStack++!define: "MUI_INSERT_NSISCONF"=""++Changing directory to: "C:\MinGW\msys\1.0\home\Oliver\src\git-annex"++Processing script file: "git-annex.nsi"+!include: "c:\Program Files (x86)\NSIS\Include\MUI2.nsh"+!include: "c:\Program Files (x86)\NSIS\Contrib\Modern UI 2\MUI2.nsh"+NSIS Modern User Interface version 2.0 - Copyright 2002-2009 Joost Verburg (c:\Program Files (x86)\NSIS\Contrib\Modern UI 2\MUI2.nsh:8)+!define: "MUI_INCLUDED"=""+!define: "MUI_SYSVERSION"="2.0"+!define: "MUI_VERBOSE"="3"+!include: closed: "c:\Program Files (x86)\NSIS\Contrib\Modern UI 2\MUI2.nsh"+!include: closed: "c:\Program Files (x86)\NSIS\Include\MUI2.nsh"+Name: "git-annex"+OutFile: "git-annex-installer.exe"+InstallDir: "$PROGRAMFILES\Git\cmd"+!insertmacro: MUI_PAGE_DIRECTORY+!insertmacro: end of MUI_PAGE_DIRECTORY+!insertmacro: MUI_PAGE_LICENSE+!insertmacro: end of MUI_PAGEDECLARATION_LICENSE+!insertmacro: end of MUI_PAGE_LICENSE+!insertmacro: MUI_PAGE_INSTFILES+!insertmacro: end of MUI_PAGE_INSTFILES+!insertmacro: MUI_LANGUAGE+!insertmacro: end of MUI_LANGUAGE+Section: "main" ->(_sec10)+SetOutPath: "$INSTDIR"+File: "git-annex.exe" [compress] 7664822/31704766 bytes+File: "git-annex-licenses.txt" [compress] 60509/237415 bytes+File: "cp.exe" [compress] 62591/116736 bytes+File: "xargs.exe" [compress] 17002/33280 bytes+File: "rsync.exe" [compress] 188346/359424 bytes+File: "ssh.exe" [compress] 157190/320000 bytes+File: "wget.exe" [compress] 155666/349184 bytes+File: "sha1sum.exe" [compress] 20337/39424 bytes+File: "sha256sum.exe" [compress] 18279/37390 bytes+File: "sha512sum.exe" [compress] 30393/92174 bytes+File: "sha224sum.exe" [compress] 18279/37390 bytes+File: "sha384sum.exe" [compress] 30392/92174 bytes+File: "cygwin1.dll" [compress] 1036075/2874639 bytes+File: "cygasn1-8.dll" [compress] 154881/459293 bytes+File: "cygattr-1.dll" [compress] 5460/13838 bytes+File: "cygheimbase-1.dll" [compress] 4441/10781 bytes+File: "cygroken-18.dll" [compress] 26103/52253 bytes+File: "cygcom_err-2.dll" [compress] 3984/9757 bytes+File: "cygheimntlm-0.dll" [compress] 9018/20509 bytes+File: "cygsqlite3-0.dll" [compress] 334366/601629 bytes+File: "cygcrypt-0.dll" [compress] 3352/7182 bytes+File: "cyghx509-5.dll" [compress] 95839/216093 bytes+File: "cygssp-0.dll" [compress] 3377/8206 bytes+File: "cygcrypto-1.0.0.dll" [compress] 652766/1553920 bytes+File: "cygiconv-2.dll" [compress] 738899/1008654 bytes+File: "cyggcc_s-1.dll" [compress] 40241/80910 bytes+File: "cygintl-8.dll" [compress] 17737/35342 bytes+File: "cygwind-0.dll" [compress] 73172/160797 bytes+File: "cyggssapi-3.dll" [compress] 81662/183837 bytes+File: "cygkrb5-26.dll" [compress] 170204/381469 bytes+File: "cygz.dll" [compress] 42634/74269 bytes+WriteUninstaller: "git-annex-uninstall.exe"+SectionEnd+Section: "Uninstall" ->(_sec11)+Delete: /REBOOTOK "$INSTDIR\git-annex.exe"+Delete: /REBOOTOK "$INSTDIR\git-annex-licenses.txt"+Delete: /REBOOTOK "$INSTDIR\git-annex-uninstall.exe"+Delete: /REBOOTOK "$INSTDIR\cp.exe"+Delete: /REBOOTOK "$INSTDIR\xargs.exe"+Delete: /REBOOTOK "$INSTDIR\rsync.exe"+Delete: /REBOOTOK "$INSTDIR\ssh.exe"+Delete: /REBOOTOK "$INSTDIR\wget.exe"+Delete: /REBOOTOK "$INSTDIR\sha1sum.exe"+Delete: /REBOOTOK "$INSTDIR\sha256sum.exe"+Delete: /REBOOTOK "$INSTDIR\sha512sum.exe"+Delete: /REBOOTOK "$INSTDIR\sha224sum.exe"+Delete: /REBOOTOK "$INSTDIR\sha384sum.exe"+Delete: /REBOOTOK "$INSTDIR\cygwin1.dll"+Delete: /REBOOTOK "$INSTDIR\cygasn1-8.dll"+Delete: /REBOOTOK "$INSTDIR\cygattr-1.dll"+Delete: /REBOOTOK "$INSTDIR\cygheimbase-1.dll"+Delete: /REBOOTOK "$INSTDIR\cygroken-18.dll"+Delete: /REBOOTOK "$INSTDIR\cygcom_err-2.dll"+Delete: /REBOOTOK "$INSTDIR\cygheimntlm-0.dll"+Delete: /REBOOTOK "$INSTDIR\cygsqlite3-0.dll"+Delete: /REBOOTOK "$INSTDIR\cygcrypt-0.dll"+Delete: /REBOOTOK "$INSTDIR\cyghx509-5.dll"+Delete: /REBOOTOK "$INSTDIR\cygssp-0.dll"+Delete: /REBOOTOK "$INSTDIR\cygcrypto-1.0.0.dll"+Delete: /REBOOTOK "$INSTDIR\cygiconv-2.dll"+Delete: /REBOOTOK "$INSTDIR\cyggcc_s-1.dll"+Delete: /REBOOTOK "$INSTDIR\cygintl-8.dll"+Delete: /REBOOTOK "$INSTDIR\cygwind-0.dll"+Delete: /REBOOTOK "$INSTDIR\cyggssapi-3.dll"+Delete: /REBOOTOK "$INSTDIR\cygkrb5-26.dll"+Delete: /REBOOTOK "$INSTDIR\cygz.dll"+SectionEnd+Function: ".onInit"+IfFileExists: "$PROGRAMFILES\Git\cmd" ? _lbl3 : 0+MessageBox: 48: "You need git installed to use git-annex. Looking at $PROGRAMFILES\Git\cmd , it seems to not be installed, or may be installed in another location. You can install git from http://git-scm.com/" (on IDOK goto 0)+FunctionEnd++Processed 1 file, writing output:+Processing pages... Done!+Removing unused resources... Done!+Generating language tables... Done!+Generating uninstaller... Done!++Output: "C:\MinGW\msys\1.0\home\Oliver\src\git-annex\git-annex-installer.exe"+Install: 4 pages (256 bytes), 1 section (1048 bytes), 98 instructions (2744 bytes), 133 strings (239643 bytes), 1 language table (278 bytes).+Uninstall: 2 pages (128 bytes), +1 section (1048 bytes), 33 instructions (924 bytes), 72 strings (1154 bytes), 1 language table (194 bytes).++Using zlib compression.++EXE header size:               48640 / 35840 bytes+Install code:                  63270 / 244345 bytes+Install data:               11918141 / 41172867 bytes+Uninstall code+data:           10537 / 14897 bytes+CRC (0x090A4FD3):                  4 / 4 bytes++Total size:                 12040592 / 41467953 bytes (29.0%)++ rm -f last-incremental-failed++ rm -rf .t++ withcyg dist/build/git-annex/git-annex.exe test++ PATH='/c/Program Files (x86)/Haskell Platform/2012.4.0.0/bin:/c/Program Files (x86)/Haskell Platform/2012.4.0.0/lib/extralibs/bin:/c/Program Files (x86)/NSIS:/home/Oliver/bin:.:/usr/local/bin:/mingw/bin:/bin:/c/Program Files (x86)/Haskell/bin:/c/Program Files (x86)/Haskell Platform/2013.2.0.0/lib/extralibs/bin:/c/Program Files (x86)/Haskell Platform/2013.2.0.0/bin:/c/Program Files (x86)/AMD APP/bin/x86_64:/c/Program Files (x86)/AMD APP/bin/x86:/c/Windows/system32:/c/Windows:/c/Windows/System32/Wbem:/c/Windows/System32/WindowsPowerShell/v1.0/:/c/Program Files (x86)/ATI Technologies/ATI.ACE/Core-Static:/c/Program Files (x86)/Windows Kits/8.0/Windows Performance Toolkit/:/c/Program Files/Microsoft/Web Platform Installer/:/c/Program Files (x86)/Haskell Platform/2013.2.0.0/mingw/bin:/c/Users/Oliver/AppData/Roaming/cabal/bin:/c/cygwin/bin'++ dist/build/git-annex/git-annex.exe test+(0 tests)         (1 test)        (2 tests)         (3 tests)         (4 tests)         (5 tests)         (6 tests)         (7 tests)         (8 tests)         (9 tests)         (10 tests)          (11 tests)          (12 tests)          (13 tests)          (14 tests)          (15 tests)          (16 tests)          (17 tests)          (18 tests)          (19 tests)          (20 tests)          (21 tests)          (22 tests)          (23 tests)          (24 tests)          (25 tests)          (26 tests)          (27 tests)          (28 tests)          (29 tests)          (30 tests)          (31 tests)          (32 tests)          (33 tests)          (34 tests)          (35 tests)          (36 tests)          (37 tests)          (38 tests)          (39 tests)          (40 tests)          (41 tests)          (42 tests)          (43 tests)          (44 tests)          (45 tests)          (46 tests)          (47 tests)          (48 tests)          (49 tests)          (50 tests)          (51 tests)          (52 tests)          (53 tests)          (54 tests)          (55 tests)          (56 tests)          (57 tests)          (58 tests)          (59 tests)          (60 tests)          (61 tests)          (62 tests)          (63 tests)          (64 tests)          (65 tests)          (66 tests)          (67 tests)          (68 tests)          (69 tests)          (70 tests)          (71 tests)          (72 tests)          (73 tests)          (74 tests)          (75 tests)          (76 tests)          (77 tests)          (78 tests)          (79 tests)          (80 tests)          (81 tests)          (82 tests)          (83 tests)          (84 tests)          (85 tests)          (86 tests)          (87 tests)          (88 tests)          (89 tests)          (90 tests)          (91 tests)          (92 tests)          (93 tests)          (94 tests)          (95 tests)          (96 tests)          (97 tests)          (98 tests)          (99 tests)          ----------------------------------------------------------------------+First, some automated quick checks of properties ...+----------------------------------------------------------------------+prop_idempotent_deencode_git++++ OK, passed 100 tests.+(0 tests)         (1 test)        (2 tests)         (3 tests)         (4 tests)         (5 tests)         (6 tests)         (7 tests)         (8 tests)         (9 tests)         (10 tests)          (11 tests)          (12 tests)          (13 tests)          (14 tests)          (15 tests)          (16 tests)          (17 tests)          (18 tests)          (19 tests)          (20 tests)          (21 tests)          (22 tests)          (23 tests)          (24 tests)          (25 tests)          (26 tests)          (27 tests)          (28 tests)          (29 tests)          (30 tests)          (31 tests)          (32 tests)          (33 tests)          (34 tests)          (35 tests)          (36 tests)          (37 tests)          (38 tests)          (39 tests)          (40 tests)          (41 tests)          (42 tests)          (43 tests)          (44 tests)          (45 tests)          (46 tests)          (47 tests)          (48 tests)          (49 tests)          (50 tests)          (51 tests)          (52 tests)          (53 tests)          (54 tests)          (55 tests)          (56 tests)          (57 tests)          (58 tests)          (59 tests)          (60 tests)          (61 tests)          (62 tests)          (63 tests)          (64 tests)          (65 tests)          (66 tests)          (67 tests)          (68 tests)          (69 tests)          (70 tests)          (71 tests)          (72 tests)          (73 tests)          (74 tests)          (75 tests)          (76 tests)          (77 tests)          (78 tests)          (79 tests)          (80 tests)          (81 tests)          (82 tests)          (83 tests)          (84 tests)          (85 tests)          (86 tests)          (87 tests)          (88 tests)          (89 tests)          (90 tests)          (91 tests)          (92 tests)          (93 tests)          (94 tests)          (95 tests)          (96 tests)          (97 tests)          (98 tests)          (99 tests)          prop_idempotent_deencode++++ OK, passed 100 tests.+(0 tests)         (1 test)        (2 tests)         (3 tests)         (4 tests)         (5 tests)         (6 tests)         (7 tests)         (8 tests)         (9 tests)         (10 tests)          (11 tests)          (12 tests)          (13 tests)          (14 tests)          (15 tests)          (16 tests)          (17 tests)          (18 tests)          (19 tests)          (20 tests)          (21 tests)          (22 tests)          (23 tests)          (24 tests)          (25 tests)          (26 tests)          (27 tests)          (28 tests)          (29 tests)          (30 tests)          (31 tests)          (32 tests)          (33 tests)          (34 tests)          (35 tests)          (36 tests)          (37 tests)          (38 tests)          (39 tests)          (40 tests)          (41 tests)          (42 tests)          (43 tests)          (44 tests)          (45 tests)          (46 tests)          (47 tests)          (48 tests)          (49 tests)          (50 tests)          (51 tests)          (52 tests)          (53 tests)          (54 tests)          (55 tests)          (56 tests)          (57 tests)          (58 tests)          (59 tests)          (60 tests)          (61 tests)          (62 tests)          (63 tests)          (64 tests)          (65 tests)          (66 tests)          (67 tests)          (68 tests)          (69 tests)          (70 tests)          (71 tests)          (72 tests)          (73 tests)          (74 tests)          (75 tests)          (76 tests)          (77 tests)          (78 tests)          (79 tests)          (80 tests)          (81 tests)          (82 tests)          (83 tests)          (84 tests)          (85 tests)          (86 tests)          (87 tests)          (88 tests)          (89 tests)          (90 tests)          (91 tests)          (92 tests)          (93 tests)          (94 tests)          (95 tests)          (96 tests)          (97 tests)          (98 tests)          (99 tests)          prop_idempotent_fileKey++++ OK, passed 100 tests.+(0 tests)         (1 test)        (2 tests)         (3 tests)         (4 tests)         (5 tests)         (6 tests)         (7 tests)         (8 tests)         (9 tests)         (10 tests)          (11 tests)          (12 tests)          (13 tests)          (14 tests)          (15 tests)          (16 tests)          (17 tests)          (18 tests)          (19 tests)          (20 tests)          (21 tests)          (22 tests)          (23 tests)          (24 tests)          (25 tests)          (26 tests)          (27 tests)          (28 tests)          (29 tests)          (30 tests)          (31 tests)          (32 tests)          (33 tests)          (34 tests)          (35 tests)          (36 tests)          (37 tests)          (38 tests)          (39 tests)          (40 tests)          (41 tests)          (42 tests)          (43 tests)          (44 tests)          (45 tests)          (46 tests)          (47 tests)          (48 tests)          (49 tests)          (50 tests)          (51 tests)          (52 tests)          (53 tests)          (54 tests)          (55 tests)          (56 tests)          (57 tests)          (58 tests)          (59 tests)          (60 tests)          (61 tests)          (62 tests)          (63 tests)          (64 tests)          (65 tests)          (66 tests)          (67 tests)          (68 tests)          (69 tests)          (70 tests)          (71 tests)          (72 tests)          (73 tests)          (74 tests)          (75 tests)          (76 tests)          (77 tests)          (78 tests)          (79 tests)          (80 tests)          (81 tests)          (82 tests)          (83 tests)          (84 tests)          (85 tests)          (86 tests)          (87 tests)          (88 tests)          (89 tests)          (90 tests)          (91 tests)          (92 tests)          (93 tests)          (94 tests)          (95 tests)          (96 tests)          (97 tests)          (98 tests)          (99 tests)          prop_idempotent_key_encode++++ OK, passed 100 tests.+(0 tests)         (1 test)        (2 tests)         (3 tests)         (4 tests)         (5 tests)         (6 tests)         (7 tests)         (8 tests)         (9 tests)         (10 tests)          (11 tests)          (12 tests)          (13 tests)          (14 tests)          (15 tests)          (16 tests)          (17 tests)          (18 tests)          (19 tests)          (20 tests)          (21 tests)          (22 tests)          (23 tests)          (24 tests)          (25 tests)          (26 tests)          (27 tests)          (28 tests)          (29 tests)          (30 tests)          (31 tests)          (32 tests)          (33 tests)          (34 tests)          (35 tests)          (36 tests)          (37 tests)          (38 tests)          (39 tests)          (40 tests)          (41 tests)          (42 tests)          (43 tests)          (44 tests)          (45 tests)          (46 tests)          (47 tests)          (48 tests)          (49 tests)          (50 tests)          (51 tests)          (52 tests)          (53 tests)          (54 tests)          (55 tests)          (56 tests)          (57 tests)          (58 tests)          (59 tests)          (60 tests)          (61 tests)          (62 tests)          (63 tests)          (64 tests)          (65 tests)          (66 tests)          (67 tests)          (68 tests)          (69 tests)          (70 tests)          (71 tests)          (72 tests)          (73 tests)          (74 tests)          (75 tests)          (76 tests)          (77 tests)          (78 tests)          (79 tests)          (80 tests)          (81 tests)          (82 tests)          (83 tests)          (84 tests)          (85 tests)          (86 tests)          (87 tests)          (88 tests)          (89 tests)          (90 tests)          (91 tests)          (92 tests)          (93 tests)          (94 tests)          (95 tests)          (96 tests)          (97 tests)          (98 tests)          (99 tests)          prop_idempotent_shellEscape++++ OK, passed 100 tests.+(0 tests)         (1 test)        (2 tests)         (3 tests)         (4 tests)         (5 tests)         (6 tests)         (7 tests)         (8 tests)         (9 tests)         (10 tests)          (11 tests)          (12 tests)          (13 tests)          (14 tests)          (15 tests)          (16 tests)          (17 tests)          (18 tests)          (19 tests)          (20 tests)          (21 tests)          (22 tests)          (23 tests)          (24 tests)          (25 tests)          (26 tests)          (27 tests)          (28 tests)          (29 tests)          (30 tests)          (31 tests)          (32 tests)          (33 tests)          (34 tests)          (35 tests)          (36 tests)          (37 tests)          (38 tests)          (39 tests)          (40 tests)          (41 tests)          (42 tests)          (43 tests)          (44 tests)          (45 tests)          (46 tests)          (47 tests)          (48 tests)          (49 tests)          (50 tests)          (51 tests)          (52 tests)          (53 tests)          (54 tests)          (55 tests)          (56 tests)          (57 tests)          (58 tests)          (59 tests)          (60 tests)          (61 tests)          (62 tests)          (63 tests)          (64 tests)          (65 tests)          (66 tests)          (67 tests)          (68 tests)          (69 tests)          (70 tests)          (71 tests)          (72 tests)          (73 tests)          (74 tests)          (75 tests)          (76 tests)          (77 tests)          (78 tests)          (79 tests)          (80 tests)          (81 tests)          (82 tests)          (83 tests)          (84 tests)          (85 tests)          (86 tests)          (87 tests)          (88 tests)          (89 tests)          (90 tests)          (91 tests)          (92 tests)          (93 tests)          (94 tests)          (95 tests)          (96 tests)          (97 tests)          (98 tests)          (99 tests)          prop_idempotent_shellEscape_multiword++++ OK, passed 100 tests.+(0 tests)         (1 test)        (2 tests)         (3 tests)         (4 tests)         (5 tests)         (6 tests)         (7 tests)         (8 tests)         (9 tests)         (10 tests)          (11 tests)          (12 tests)          (13 tests)          (14 tests)          (15 tests)          (16 tests)          (17 tests)          (18 tests)          (19 tests)          (20 tests)          (21 tests)          (22 tests)          (23 tests)          (24 tests)          (25 tests)          (26 tests)          (27 tests)          (28 tests)          (29 tests)          (30 tests)          (31 tests)          (32 tests)          (33 tests)          (34 tests)          (35 tests)          (36 tests)          (37 tests)          (38 tests)          (39 tests)          (40 tests)          (41 tests)          (42 tests)          (43 tests)          (44 tests)          (45 tests)          (46 tests)          (47 tests)          (48 tests)          (49 tests)          (50 tests)          (51 tests)          (52 tests)          (53 tests)          (54 tests)          (55 tests)          (56 tests)          (57 tests)          (58 tests)          (59 tests)          (60 tests)          (61 tests)          (62 tests)          (63 tests)          (64 tests)          (65 tests)          (66 tests)          (67 tests)          (68 tests)          (69 tests)          (70 tests)          (71 tests)          (72 tests)          (73 tests)          (74 tests)          (75 tests)          (76 tests)          (77 tests)          (78 tests)          (79 tests)          (80 tests)          (81 tests)          (82 tests)          (83 tests)          (84 tests)          (85 tests)          (86 tests)          (87 tests)          (88 tests)          (89 tests)          (90 tests)          (91 tests)          (92 tests)          (93 tests)          (94 tests)          (95 tests)          (96 tests)          (97 tests)          (98 tests)          (99 tests)          prop_idempotent_configEscape++++ OK, passed 100 tests.+(0 tests)         (1 test)        (2 tests)         (3 tests)         (4 tests)         (5 tests)         (6 tests)         (7 tests)         (8 tests)         (9 tests)         (10 tests)          (11 tests)          (12 tests)          (13 tests)          (14 tests)          (15 tests)          (16 tests)          (17 tests)          (18 tests)          (19 tests)          (20 tests)          (21 tests)          (22 tests)          (23 tests)          (24 tests)          (25 tests)          (26 tests)          (27 tests)          (28 tests)          (29 tests)          (30 tests)          (31 tests)          (32 tests)          (33 tests)          (34 tests)          (35 tests)          (36 tests)          (37 tests)          (38 tests)          (39 tests)          (40 tests)          (41 tests)          (42 tests)          (43 tests)          (44 tests)          (45 tests)          (46 tests)          (47 tests)          (48 tests)          (49 tests)          (50 tests)          (51 tests)          (52 tests)          (53 tests)          (54 tests)          (55 tests)          (56 tests)          (57 tests)          (58 tests)          (59 tests)          (60 tests)          (61 tests)          (62 tests)          (63 tests)          (64 tests)          (65 tests)          (66 tests)          (67 tests)          (68 tests)          (69 tests)          (70 tests)          (71 tests)          (72 tests)          (73 tests)          (74 tests)          (75 tests)          (76 tests)          (77 tests)          (78 tests)          (79 tests)          (80 tests)          (81 tests)          (82 tests)          (83 tests)          (84 tests)          (85 tests)          (86 tests)          (87 tests)          (88 tests)          (89 tests)          (90 tests)          (91 tests)          (92 tests)          (93 tests)          (94 tests)          (95 tests)          (96 tests)          (97 tests)          (98 tests)          (99 tests)          prop_parse_show_Config++++ OK, passed 100 tests.+(0 tests)         (1 test)        (2 tests)         (3 tests)         (4 tests)         (5 tests)         (6 tests)         (7 tests)         (8 tests)         (9 tests)         (10 tests)          (11 tests)          (12 tests)          (13 tests)          (14 tests)          (15 tests)          (16 tests)          (17 tests)          (18 tests)          (19 tests)          (20 tests)          (21 tests)          (22 tests)          (23 tests)          (24 tests)          (25 tests)          (26 tests)          (27 tests)          (28 tests)          (29 tests)          (30 tests)          (31 tests)          (32 tests)          (33 tests)          (34 tests)          (35 tests)          (36 tests)          (37 tests)          (38 tests)          (39 tests)          (40 tests)          (41 tests)          (42 tests)          (43 tests)          (44 tests)          (45 tests)          (46 tests)          (47 tests)          (48 tests)          (49 tests)          (50 tests)          (51 tests)          (52 tests)          (53 tests)          (54 tests)          (55 tests)          (56 tests)          (57 tests)          (58 tests)          (59 tests)          (60 tests)          (61 tests)          (62 tests)          (63 tests)          (64 tests)          (65 tests)          (66 tests)          (67 tests)          (68 tests)          (69 tests)          (70 tests)          (71 tests)          (72 tests)          (73 tests)          (74 tests)          (75 tests)          (76 tests)          (77 tests)          (78 tests)          (79 tests)          (80 tests)          (81 tests)          (82 tests)          (83 tests)          (84 tests)          (85 tests)          (86 tests)          (87 tests)          (88 tests)          (89 tests)          (90 tests)          (91 tests)          (92 tests)          (93 tests)          (94 tests)          (95 tests)          (96 tests)          (97 tests)          (98 tests)          (99 tests)          prop_parentDir_basics++++ OK, passed 100 tests.+(0 tests)         (1 test)        (2 tests)         (3 tests)         (4 tests)         (5 tests)         (6 tests)         (7 tests)         (8 tests)         (9 tests)         (10 tests)          (11 tests)          (12 tests)          (13 tests)          (14 tests)          (15 tests)          (16 tests)          (17 tests)          (18 tests)          (19 tests)          (20 tests)          (21 tests)          (22 tests)          (23 tests)          (24 tests)          (25 tests)          (26 tests)          (27 tests)          (28 tests)          (29 tests)          (30 tests)          (31 tests)          (32 tests)          (33 tests)          (34 tests)          (35 tests)          (36 tests)          (37 tests)          (38 tests)          (39 tests)          (40 tests)          (41 tests)          (42 tests)          (43 tests)          (44 tests)          (45 tests)          (46 tests)          (47 tests)          (48 tests)          (49 tests)          (50 tests)          (51 tests)          (52 tests)          (53 tests)          (54 tests)          (55 tests)          (56 tests)          (57 tests)          (58 tests)          (59 tests)          (60 tests)          (61 tests)          (62 tests)          (63 tests)          (64 tests)          (65 tests)          (66 tests)          (67 tests)          (68 tests)          (69 tests)          (70 tests)          (71 tests)          (72 tests)          (73 tests)          (74 tests)          (75 tests)          (76 tests)          (77 tests)          (78 tests)          (79 tests)          (80 tests)          (81 tests)          (82 tests)          (83 tests)          (84 tests)          (85 tests)          (86 tests)          (87 tests)          (88 tests)          (89 tests)          (90 tests)          (91 tests)          (92 tests)          (93 tests)          (94 tests)          (95 tests)          (96 tests)          (97 tests)          (98 tests)          (99 tests)          prop_relPathDirToFile_basics++++ OK, passed 100 tests.+(0 tests)         prop_relPathDirToFile_regressionTest++++ OK, passed 1 tests.+(0 tests)         prop_cost_sane++++ OK, passed 1 tests.+(0 tests)         prop_matcher_sane++++ OK, passed 1 tests.+(0 tests)         prop_HmacSha1WithCipher_sane++++ OK, passed 1 tests.+(0 tests)         prop_TimeStamp_sane++++ OK, passed 1 tests.+(0 tests)         prop_addLog_sane++++ OK, passed 1 tests.+(0 tests)         (1 test)        (2 tests)         (3 tests)         (4 tests)         (5 tests)         (6 tests)         (7 tests)         (8 tests)         (9 tests)         (10 tests)          (11 tests)          (12 tests)          (13 tests)          (14 tests)          (15 tests)          (16 tests)          (17 tests)          (18 tests)          (19 tests)          (20 tests)          (21 tests)          (22 tests)          (23 tests)          (24 tests)          (25 tests)          (26 tests)          (27 tests)          (28 tests)          (29 tests)          (30 tests)          (31 tests)          (32 tests)          (33 tests)          (34 tests)          (35 tests)          (36 tests)          (37 tests)          (38 tests)          (39 tests)          (40 tests)          (41 tests)          (42 tests)          (43 tests)          (44 tests)          (45 tests)          (46 tests)          (47 tests)          (48 tests)          (49 tests)          (50 tests)          (51 tests)          (52 tests)          (53 tests)          (54 tests)          (55 tests)          (56 tests)          (57 tests)          (58 tests)          (59 tests)          (60 tests)          (61 tests)          (62 tests)          (63 tests)          (64 tests)          (65 tests)          (66 tests)          (67 tests)          (68 tests)          (69 tests)          (70 tests)          (71 tests)          (72 tests)          (73 tests)          (74 tests)          (75 tests)          (76 tests)          (77 tests)          (78 tests)          (79 tests)          (80 tests)          (81 tests)          (82 tests)          (83 tests)          (84 tests)          (85 tests)          (86 tests)          (87 tests)          (88 tests)          (89 tests)          (90 tests)          (91 tests)          (92 tests)          (93 tests)          (94 tests)          (95 tests)          (96 tests)          (97 tests)          (98 tests)          (99 tests)          prop_verifiable_sane++++ OK, passed 100 tests.+(0 tests)         prop_segment_regressionTest++++ OK, passed 1 tests.+(0 tests)         (1 test)        (2 tests)         (3 tests)         (4 tests)         (5 tests)         (6 tests)         (7 tests)         (8 tests)         (9 tests)         (10 tests)          (11 tests)          (12 tests)          (13 tests)          (14 tests)          (15 tests)          (16 tests)          (17 tests)          (18 tests)          (19 tests)          (20 tests)          (21 tests)          (22 tests)          (23 tests)          (24 tests)          (25 tests)          (26 tests)          (27 tests)          (28 tests)          (29 tests)          (30 tests)          (31 tests)          (32 tests)          (33 tests)          (34 tests)          (35 tests)          (36 tests)          (37 tests)          (38 tests)          (39 tests)          (40 tests)          (41 tests)          (42 tests)          (43 tests)          (44 tests)          (45 tests)          (46 tests)          (47 tests)          (48 tests)          (49 tests)          (50 tests)          (51 tests)          (52 tests)          (53 tests)          (54 tests)          (55 tests)          (56 tests)          (57 tests)          (58 tests)          (59 tests)          (60 tests)          (61 tests)          (62 tests)          (63 tests)          (64 tests)          (65 tests)          (66 tests)          (67 tests)          (68 tests)          (69 tests)          (70 tests)          (71 tests)          (72 tests)          (73 tests)          (74 tests)          (75 tests)          (76 tests)          (77 tests)          (78 tests)          (79 tests)          (80 tests)          (81 tests)          (82 tests)          (83 tests)          (84 tests)          (85 tests)          (86 tests)          (87 tests)          (88 tests)          (89 tests)          (90 tests)          (91 tests)          (92 tests)          (93 tests)          (94 tests)          (95 tests)          (96 tests)          (97 tests)          (98 tests)          (99 tests)          prop_read_write_transferinfo++++ OK, passed 100 tests.+(0 tests)         (1 test)        (2 tests)         (3 tests)         (4 tests)         (5 tests)         (6 tests)         (7 tests)         (8 tests)         (9 tests)         (10 tests)          (11 tests)          (12 tests)          (13 tests)          (14 tests)          (15 tests)          (16 tests)          (17 tests)          (18 tests)          (19 tests)          (20 tests)          (21 tests)          (22 tests)          (23 tests)          (24 tests)          (25 tests)          (26 tests)          (27 tests)          (28 tests)          (29 tests)          (30 tests)          (31 tests)          (32 tests)          (33 tests)          (34 tests)          (35 tests)          (36 tests)          (37 tests)          (38 tests)          (39 tests)          (40 tests)          (41 tests)          (42 tests)          (43 tests)          (44 tests)          (45 tests)          (46 tests)          (47 tests)          (48 tests)          (49 tests)          (50 tests)          (51 tests)          (52 tests)          (53 tests)          (54 tests)          (55 tests)          (56 tests)          (57 tests)          (58 tests)          (59 tests)          (60 tests)          (61 tests)          (62 tests)          (63 tests)          (64 tests)          (65 tests)          (66 tests)          (67 tests)          (68 tests)          (69 tests)          (70 tests)          (71 tests)          (72 tests)          (73 tests)          (74 tests)          (75 tests)          (76 tests)          (77 tests)          (78 tests)          (79 tests)          (80 tests)          (81 tests)          (82 tests)          (83 tests)          (84 tests)          (85 tests)          (86 tests)          (87 tests)          (88 tests)          (89 tests)          (90 tests)          (91 tests)          (92 tests)          (93 tests)          (94 tests)          (95 tests)          (96 tests)          (97 tests)          (98 tests)          (99 tests)          prop_read_show_inodecache++++ OK, passed 100 tests.+(0 tests)         (1 test)        (2 tests)         (3 tests)         (4 tests)         (5 tests)         (6 tests)         (7 tests)         (8 tests)         (9 tests)         (10 tests)          (11 tests)          (12 tests)          (13 tests)          (14 tests)          (15 tests)          (16 tests)          (17 tests)          (18 tests)          (19 tests)          (20 tests)          (21 tests)          (22 tests)          (23 tests)          (24 tests)          (25 tests)          (26 tests)          (27 tests)          (28 tests)          (29 tests)          (30 tests)          (31 tests)          (32 tests)          (33 tests)          (34 tests)          (35 tests)          (36 tests)          (37 tests)          (38 tests)          (39 tests)          (40 tests)          (41 tests)          (42 tests)          (43 tests)          (44 tests)          (45 tests)          (46 tests)          (47 tests)          (48 tests)          (49 tests)          (50 tests)          (51 tests)          (52 tests)          (53 tests)          (54 tests)          (55 tests)          (56 tests)          (57 tests)          (58 tests)          (59 tests)          (60 tests)          (61 tests)          (62 tests)          (63 tests)          (64 tests)          (65 tests)          (66 tests)          (67 tests)          (68 tests)          (69 tests)          (70 tests)          (71 tests)          (72 tests)          (73 tests)          (74 tests)          (75 tests)          (76 tests)          (77 tests)          (78 tests)          (79 tests)          (80 tests)          (81 tests)          (82 tests)          (83 tests)          (84 tests)          (85 tests)          (86 tests)          (87 tests)          (88 tests)          (89 tests)          (90 tests)          (91 tests)          (92 tests)          (93 tests)          (94 tests)          (95 tests)          (96 tests)          (97 tests)          (98 tests)          (99 tests)          prop_parse_show_log++++ OK, passed 100 tests.+(0 tests)         prop_read_show_TrustLevel++++ OK, passed 1 tests.+(0 tests)         prop_parse_show_TrustLog++++ OK, passed 1 tests.++Cases: 1  Tried: 0  Errors: 0  Failures: 0init test repo +  Detected a crippled filesystem.++  Disabling core.symlinks.++  Enabling direct mode.++  Detected a filesystem without fifo support.++  Disabling ssh connection caching.+ok+(Recording state in git...)++                                          +Cases: 1  Tried: 1  Errors: 0  Failures: 0++Cases: 3  Tried: 0  Errors: 0  Failures: 0add foo (checksum...) ok+(Recording state in git...)+add sha1foo (checksum...) ok+(Recording state in git...)+add apple ok+(Recording state in git...)++Cases: 3  Tried: 1  Errors: 0  Failures: 0ssh: Could not resolve hostname C: no address associated with name+fatal: The remote end hung up unexpectedly++                                          +### Failure in: git-annex add:1+git clone failed++Cases: 3  Tried: 2  Errors: 0  Failures: 1ssh: Could not resolve hostname C: no address associated with name+fatal: The remote end hung up unexpectedly++                                          +### Failure in: git-annex add:2+git clone failed+Cases: 3  Tried: 3  Errors: 0  Failures: 2++Cases: 1  Tried: 0  Errors: 0  Failures: 0ssh: Could not resolve hostname C: no address associated with name+fatal: The remote end hung up unexpectedly++                                          +### Failure in: git-annex reinject/fromkey+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1++Cases: 2  Tried: 0  Errors: 0  Failures: 0ssh: Could not resolve hostname C: no address associated with name+fatal: The remote end hung up unexpectedly++                                          +### Failure in: git-annex unannex:0:no content+git clone failed++Cases: 2  Tried: 1  Errors: 0  Failures: 1ssh: Could not resolve hostname C: no address associated with name+fatal: The remote end hung up unexpectedly++                                          +### Failure in: git-annex unannex:1:with content+git clone failed+Cases: 2  Tried: 2  Errors: 0  Failures: 2++Cases: 3  Tried: 0  Errors: 0  Failures: 0ssh: Could not resolve hostname C: no address associated with name+fatal: The remote end hung up unexpectedly++                                          +### Failure in: git-annex drop:0:no remotes+git clone failed++Cases: 3  Tried: 1  Errors: 0  Failures: 1ssh: Could not resolve hostname C: no address associated with name+fatal: The remote end hung up unexpectedly++                                          +### Failure in: git-annex drop:1:with remote+git clone failed++Cases: 3  Tried: 2  Errors: 0  Failures: 2ssh: Could not resolve hostname C: no address associated with name+fatal: The remote end hung up unexpectedly++                                          +### Failure in: git-annex drop:2:untrusted remote+git clone failed+Cases: 3  Tried: 3  Errors: 0  Failures: 3++Cases: 1  Tried: 0  Errors: 0  Failures: 0ssh: Could not resolve hostname C: no address associated with name+fatal: The remote end hung up unexpectedly++                                          +### Failure in: git-annex get+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1++Cases: 1  Tried: 0  Errors: 0  Failures: 0ssh: Could not resolve hostname C: no address associated with name+fatal: The remote end hung up unexpectedly++                                          +### Failure in: git-annex move+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1++Cases: 1  Tried: 0  Errors: 0  Failures: 0ssh: Could not resolve hostname C: no address associated with name+fatal: The remote end hung up unexpectedly++                                          +### Failure in: git-annex copy+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1++Cases: 1  Tried: 0  Errors: 0  Failures: 0ssh: Could not resolve hostname C: no address associated with name+fatal: The remote end hung up unexpectedly++                                          +### Failure in: git-annex unlock/lock+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1++Cases: 2  Tried: 0  Errors: 0  Failures: 0ssh: Could not resolve hostname C: no address associated with name+fatal: The remote end hung up unexpectedly++                                          +### Failure in: git-annex edit/commit:0+git clone failed++Cases: 2  Tried: 1  Errors: 0  Failures: 1ssh: Could not resolve hostname C: no address associated with name+fatal: The remote end hung up unexpectedly++                                          +### Failure in: git-annex edit/commit:1+git clone failed+Cases: 2  Tried: 2  Errors: 0  Failures: 2++Cases: 1  Tried: 0  Errors: 0  Failures: 0ssh: Could not resolve hostname C: no address associated with name+fatal: The remote end hung up unexpectedly++                                          +### Failure in: git-annex fix+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1++Cases: 1  Tried: 0  Errors: 0  Failures: 0ssh: Could not resolve hostname C: no address associated with name+fatal: The remote end hung up unexpectedly++                                          +### Failure in: git-annex trust/untrust/semitrust/dead+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1++Cases: 4  Tried: 0  Errors: 0  Failures: 0ssh: Could not resolve hostname C: no address associated with name+fatal: The remote end hung up unexpectedly++                                          +### Failure in: git-annex fsck:0+git clone failed++Cases: 4  Tried: 1  Errors: 0  Failures: 1ssh: Could not resolve hostname C: no address associated with name+fatal: The remote end hung up unexpectedly++                                          +### Failure in: git-annex fsck:1+git clone failed++Cases: 4  Tried: 2  Errors: 0  Failures: 2ssh: Could not resolve hostname C: no address associated with name+fatal: The remote end hung up unexpectedly++                                          +### Failure in: git-annex fsck:2+git clone failed++Cases: 4  Tried: 3  Errors: 0  Failures: 3ssh: Could not resolve hostname C: no address associated with name+fatal: The remote end hung up unexpectedly++                                          +### Failure in: git-annex fsck:3+git clone failed+Cases: 4  Tried: 4  Errors: 0  Failures: 4++Cases: 2  Tried: 0  Errors: 0  Failures: 0ssh: Could not resolve hostname C: no address associated with name+fatal: The remote end hung up unexpectedly++                                          +### Failure in: git-annex migrate:0+git clone failed++Cases: 2  Tried: 1  Errors: 0  Failures: 1ssh: Could not resolve hostname C: no address associated with name+fatal: The remote end hung up unexpectedly++                                          +### Failure in: git-annex migrate:1+git clone failed+Cases: 2  Tried: 2  Errors: 0  Failures: 2++Cases: 1  Tried: 0  Errors: 0  Failures: 0ssh: Could not resolve hostname C: no address associated with name+fatal: The remote end hung up unexpectedly++                                          +### Failure in: git-annex unused/dropunused+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1++Cases: 1  Tried: 0  Errors: 0  Failures: 0ssh: Could not resolve hostname C: no address associated with name+fatal: The remote end hung up unexpectedly++                                          +### Failure in: git-annex describe+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1++Cases: 1  Tried: 0  Errors: 0  Failures: 0ssh: Could not resolve hostname C: no address associated with name+fatal: The remote end hung up unexpectedly++                                          +### Failure in: git-annex find+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1++Cases: 1  Tried: 0  Errors: 0  Failures: 0ssh: Could not resolve hostname C: no address associated with name+fatal: The remote end hung up unexpectedly++                                          +### Failure in: git-annex merge+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1++Cases: 1  Tried: 0  Errors: 0  Failures: 0ssh: Could not resolve hostname C: no address associated with name+fatal: The remote end hung up unexpectedly++                                          +### Failure in: git-annex status+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1++Cases: 1  Tried: 0  Errors: 0  Failures: 0ssh: Could not resolve hostname C: no address associated with name+fatal: The remote end hung up unexpectedly++                                          +### Failure in: git-annex version+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1++Cases: 1  Tried: 0  Errors: 0  Failures: 0ssh: Could not resolve hostname C: no address associated with name+fatal: The remote end hung up unexpectedly++                                          +### Failure in: git-annex sync+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1++Cases: 1  Tried: 0  Errors: 0  Failures: 0ssh: Could not resolve hostname C: no address associated with name+fatal: The remote end hung up unexpectedly++                                          +### Failure in: union merge regression+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1++Cases: 1  Tried: 0  Errors: 0  Failures: 0ssh: Could not resolve hostname C: no address associated with name+fatal: The remote end hung up unexpectedly++                                          +### Failure in: automatic conflict resolution+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1++Cases: 1  Tried: 0  Errors: 0  Failures: 0ssh: Could not resolve hostname C: no address associated with name+fatal: The remote end hung up unexpectedly++                                          +### Failure in: git-annex map+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1++Cases: 1  Tried: 0  Errors: 0  Failures: 0ssh: Could not resolve hostname C: no address associated with name+fatal: The remote end hung up unexpectedly++                                          +### Failure in: git-annex uninit+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1++Cases: 1  Tried: 0  Errors: 0  Failures: 0ssh: Could not resolve hostname C: no address associated with name+fatal: The remote end hung up unexpectedly++                                          +### Failure in: git-annex upgrade+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1++Cases: 1  Tried: 0  Errors: 0  Failures: 0ssh: Could not resolve hostname C: no address associated with name+fatal: The remote end hung up unexpectedly++                                          +### Failure in: git-annex whereis+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1++Cases: 1  Tried: 0  Errors: 0  Failures: 0ssh: Could not resolve hostname C: no address associated with name+fatal: The remote end hung up unexpectedly++                                          +### Failure in: git-annex hook remote+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1++Cases: 1  Tried: 0  Errors: 0  Failures: 0ssh: Could not resolve hostname C: no address associated with name+fatal: The remote end hung up unexpectedly++                                          +### Failure in: git-annex directory remote+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1++Cases: 1  Tried: 0  Errors: 0  Failures: 0ssh: Could not resolve hostname C: no address associated with name+fatal: The remote end hung up unexpectedly++                                          +### Failure in: git-annex rsync remote+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1++Cases: 1  Tried: 0  Errors: 0  Failures: 0ssh: Could not resolve hostname C: no address associated with name+fatal: The remote end hung up unexpectedly++                                          +### Failure in: git-annex bup remote+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1++Cases: 1  Tried: 0  Errors: 0  Failures: 0ssh: Could not resolve hostname C: no address associated with name+fatal: The remote end hung up unexpectedly++                                          +### Failure in: git-annex crypto+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1++Cases: 1  Tried: 0  Errors: 0  Failures: 0ssh: Could not resolve hostname C: no address associated with name+fatal: The remote end hung up unexpectedly++                                          +### Failure in: git-annex preferred-content+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1+----------------------------------------------------------------------+Now, some broader checks ...+  (Do not be alarmed by odd output here; it's normal.+   wait for the last line to see how it went.)+----------------------------------------------------------------------+init+----------------------------------------------------------------------+add+----------------------------------------------------------------------+reinject+----------------------------------------------------------------------+unannex+----------------------------------------------------------------------+drop+----------------------------------------------------------------------+get+----------------------------------------------------------------------+move+----------------------------------------------------------------------+copy+----------------------------------------------------------------------+lock+----------------------------------------------------------------------+edit+----------------------------------------------------------------------+fix+----------------------------------------------------------------------+trust+----------------------------------------------------------------------+fsck+----------------------------------------------------------------------+migrate+----------------------------------------------------------------------+ unused+----------------------------------------------------------------------+describe+----------------------------------------------------------------------+find+----------------------------------------------------------------------+merge+----------------------------------------------------------------------+status+----------------------------------------------------------------------+version+----------------------------------------------------------------------+sync+----------------------------------------------------------------------+union merge regression+----------------------------------------------------------------------+conflict resolution+----------------------------------------------------------------------+map+----------------------------------------------------------------------+uninit+----------------------------------------------------------------------+upgrade+----------------------------------------------------------------------+whereis+----------------------------------------------------------------------+hook remote+----------------------------------------------------------------------+directory remote+----------------------------------------------------------------------+rsync remote+----------------------------------------------------------------------+bup remote+----------------------------------------------------------------------+crypto+----------------------------------------------------------------------+preferred content+----------------------------------------------------------------------+Some tests failed!+  (This could be due to a bug in git-annex, or an incompatability+   with utilities, such as git, installed on this system.)+++# End of transcript or log.+"""]]
+ doc/bugs/_impossible_to_switch_repositories_on_android__in_webapp.mdwn view
@@ -0,0 +1,21 @@+### Please describe the problem.+I didn't spot this  bugs  page before so here is my report I  have  commented on android page++In addition to two existing repositories (1 local /sdcard/annex, which is also avail at/storage/sdcard0/annex + 1 remote) I have added one more local (and said to keep it in sync with original local). But it didn't work -- it "Synced with onerussian.com_annex but not with Annex" and claimed that the /external/extSdCard/Annex doesn't exist, although it is there (and with .git generated etc). When I restarted the deamon I got into a "new" Repository: /storage/extSdCard/Annex which also listed the 1st local but with "Failed to sync with localhost" message -- no remote one listed. Whenever I try to "Switch repository" to /sdcard/annex (the original local) -- it starts loading a new page but gets stuck right there. The only way to revive webui is to go back to Dashboard. Log there says (retyping from the screen so typos might be there):++error: cannot run git-receive-pack '/storage/sdcard0/annex': No such file or directory fatal: unable to fork+### What steps will reproduce the problem?+++### What version of git-annex are you using? On what operating system?+android++### 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+++# End of transcript or log.+"""]]
+ doc/bugs/bup_initremote_failed_with_localhost_+_username.mdwn view
@@ -0,0 +1,49 @@+### Please describe the problem.+Attempted to create a bup remote on the current system via ssh. It appears to have created the bup remote fine, but fails when sshing to it and does not add the remote.+This is a normal indirect annex (currently containing a single test jpg in its root)+I'm presuming the error is "(storing uuid...) sh: 1: cd: can't cd to /~/archie" +++### What steps will reproduce the problem?+git annex initremote bup type=bup encryption=none buprepo=sshservername:path++I've tried using .ssh/config to remove the username from the servername passed to bup repo and it still fails.++### What version of git-annex are you using? On what operating system?+[[!format sh """+>git-annex version+git-annex version: 4.20130615-g29d5bb9+build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP DNS+local repository version: 3+default repository version: 3+supported repository versions: 3 4+upgrade supported from repository versions: 0 1 2+"""]]+debian wheezy i686++### 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 initremote bup type=bup encryption=none buprepo=bup@localhost:archie+initremote bup (bup init...)+Reinitialized existing Git repository in /media/backup/home/archie/.bup/+Initialized empty Git repository in /media/backup/bup/archie/+(storing uuid...) sh: 1: cd: can't cd to /~/archie+git-annex: ssh failed++> ssh bup@localhost+Last login: Mon Jun 17 10:35:45 2013 from localhost+$ ls+archie+$ cd archie+$ ls+branches  config  description  HEAD  hooks  info  objects  refs+++# End of transcript or log.+"""]]++> applied patchm, [[done]] --[[Joey]]
+ doc/bugs/encfs_accused_of_being_crippled.mdwn view
@@ -0,0 +1,41 @@+### Please describe the problem.++I tried to create an annex (``git annex init foo``) inside a ``encfs`` mount, and git-annex says that it's crippled, and disables core.symlinks and goes into direct mode++### What steps will reproduce the problem?++    apt-get install encfs+    encfs -o kernel_cache empty_dir other_empty_dir+    cd other_empty_dir+    git init+    git annex init foo++### Expected results++    init foo ok+    (Recording state in git...)++### Actual results++    init foo +      Detected a crippled filesystem.++      Disabling core.symlinks.++      Enabling direct mode.+    ok+    (Recording state in git...)++### What version of git-annex are you using? On what operating system?++4.20130601 on debian unstable+++### P.S.++This was particularly annoying when I tried this on a bare repository. I'm pretty sure bare repositories don't need symlinks, and should definitely not be in direct mode. Hopefully you can fix it before I have time to file another bug report :)++Thank you!+++> [[fixed|done]] --[[Joey]] 
+ doc/bugs/file_access__47__locking_issues_with_the_assitant.mdwn view
@@ -0,0 +1,54 @@+### Please describe the problem.++I have a latex file which takes two passes to build.  It is in a directory managed by git-annex assistant and configured to use a remote SSH server as a transfer back-end.++If I use latexmk to build the file with the git-assistant on then the build fails.  If I turn off the git-assistant it succeeds.++### What steps will reproduce the problem?++[[!format sh """+~/current/www.cmt.mhs.man.ac.uk $ git-annex assistant --autostart+~/current/www.cmt.mhs.man.ac.uk $ latexmk -c admin_guide_cmt.tex+~/current/www.cmt.mhs.man.ac.uk $ latexmk -pdf -silent admin_guide_cmt.tex++Latexmk: Run number 1 of rule 'pdflatex'+This is pdfTeX, Version 3.1415926-2.5-1.40.13 (TeX Live 2013/dev)+ restricted \write18 enabled.+entering extended mode+print() on closed filehandle GEN32 at /usr/bin/latexmk line 4742.+print() on closed filehandle GEN32 at /usr/bin/latexmk line 4759.+print() on closed filehandle GEN32 at /usr/bin/latexmk line 4761.+"""]]++Dropping the silent option shows that the admin_guide_cmt.aux file is not available for writing - despite being created.  I suspect that the assistant is somehow locking the file, or using it between passes of latex.  If the auxillary files all ready exist then there is no problem (i.e., don't do the cleanup via latexmk -c)++Disabling the assistant makes everything work.  Latexmk is doing something odd - I can't replicate with the native latex build commands.++### What version of git-annex are you using? On what operating system?++Latest version, via cabal, on Fedora 18.++### Please provide any additional information below.++Nothing appears wrong with the assistant transfer wise.+[[!format sh """+add www.cmt.mhs.man.ac.uk/admin_guide_cmt.aux (checksum...) ok+add www.cmt.mhs.man.ac.uk/admin_guide_cmt.fdb_latexmk (checksum...) [2013-06-11 14:42:17 BST] Committer: Committing changes to g+it                                                                                                                             +admin_guide_cmt.fdb_latexmk+         264 100%    0.00kB/s    0:00:00 (xfer#1, to-check=0/1)++sent 372 bytes  received 42 bytes  828.00 bytes/sec+total size is 264  speedup is 0.64+[2013-06-11 14:42:17 BST] Transferrer: Uploaded admin_gui..b_latexmk+[2013-06-11 14:42:18 BST] Committer: Adding 3 files+ok+(Recording state in git...)+add www.cmt.mhs.man.ac.uk/admin_guide_cmt.fls (checksum...) ok+add www.cmt.mhs.man.ac.uk/admin_guide_cmt.log (checksum...) ok++# End of transcript or log.+"""]]++> Ok, I was able to remove the write bit fiddling in direct mode. [[done]]+> --[[Joey]]
+ doc/bugs/git-annex_immediately_re-gets_dropped_files.mdwn view
@@ -0,0 +1,27 @@+### Please describe the problem.++I have some files that I want to drop from my laptop. However, as soon as I drop them (git-annex drop), the assistant starts to download them again from another repository. At first glance, this seems like a variant of [[bugs/Handling_of_files_inside_and_outside_archive_directory_at_the_same_time]].++I would expect that after an explicit drop command, the files would not be re-downloaded.++The repository that this is happening on is a "client" type, direct-mode repository.++### What steps will reproduce the problem?++    git annex drop drop-test/TestFile.data++### What version of git-annex are you using? On what operating system?+    git-annex version: 4.20130618-g333cb8e+    build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP DNS+    local repository version: 4+    default repository version: 3+    supported repository versions: 3 4+    upgrade supported from repository versions: 0 1 2++    I am running Ubuntu 13.04++### Please provide any additional information below.++log emailed.++> [[done]]; not a bug, should use manual mode if manually deciding which files are in a repository --[[Joey]] 
doc/bugs/git-annex_thinks_files_are_in_repositories_they_are_not.mdwn view
@@ -20,3 +20,10 @@  I noticed this first when using a USB drive to communicate between work and home. Making changes at home, it thought that the new files were now present at work, when the computer there is off, and a long way away. --Walter++> A little while ago, I made this change:++  * direct mode: Direct mode commands now work on files staged in the index,+    they do not need to be committed to git.++> I think that fixes the confusing behavior described here. [[done]] --[[Joey]] 
+ doc/bugs/git_annex_webapp_runs_on_wine.mdwn view
@@ -0,0 +1,47 @@+### Please describe the problem.+I just installed git-annex-20130601 on Gentoo and when running git annex webapp it started to run things on wine.++### What steps will reproduce the problem?+On Gentoo ~amd64:+[[!format sh """+ ~$ layman -a haskell+ ~$ USE=webapp emerge -1 git-annex+ ~$ git annex webapp+"""]]+### What version of git-annex are you using? On what operating system?+dev-vcs/git-annex-4.20130601 from https://github.com/gentoo-haskell/gentoo-haskell/tree/master/dev-vcs/git-annex++On Gentoo ~amd64++### 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 webapp+Launching web browser on file:///tmp/webapp14071.html+libpng warning: Application built with libpng-1.6.2 but running with 1.5.13+err:menubuilder:convert_to_native_icon error 0x80004005 initializing encoder+libpng warning: Application built with libpng-1.6.2 but running with 1.5.13+err:menubuilder:convert_to_native_icon error 0x80004005 initializing encoder+libpng warning: Application built with libpng-1.6.2 but running with 1.5.13+err:menubuilder:convert_to_native_icon error 0x80004005 initializing encoder+...+fixme:exec:SHELL_execute flags ignored: 0x00000100+fixme:exec:SHELL_execute flags ignored: 0x00000100+fixme:exec:SHELL_execute flags ignored: 0x00000100+...++22185 me     20   0 2580M 10196  8156 S  0.0  0.1  0:00.09 ├─ start /ProgIDOpen htmlfile /home/reinis/.wine/dosdevices/z:/tmp/webapp2554.html+ 2597 me     21   1 2596M 10984  8764 S  0.0  0.1  0:01.23 ├─ c:\windows\system32\explorer.exe /desktop+ 2589 me     20   0 2581M  2344  1932 S  0.0  0.0  0:00.00 ├─ c:\windows\system32\plugplay.exe+ 2581 me     20   0 2593M  8900  7500 S  0.0  0.1  0:00.09 ├─ c:\windows\system32\winedevice.exe MountMgr+ 2577 me     20   0 2583M  2776  2272 S  0.0  0.0  0:00.00 ├─ c:\windows\system32\services.exe+ 2571 me     20   0 24960  7532   772 S 46.1  0.1  2:29.06 ├─ /usr/bin/wineserver++# End of transcript or log.+"""]]++> [[done]]; this is a misconfigured system, not a git-annex bug, +> and git-annex honors git config web.browser to allow working around+> this. --[[Joey]]
doc/bugs/restart_daemon_required.mdwn view
@@ -18,3 +18,5 @@ I hope this is enough information, I'm usually good at working out issues myself, however this is just frustrating me and the git-annex solution is so nearly perfect if it would work reliably that I can't bring myself to give up on it!  Thanks!++> [[done]], release notes updated; see my comment --[[Joey]]
+ doc/bugs/unable_to_change_repository_group_of___34__here__34__.mdwn view
@@ -0,0 +1,13 @@+### Please describe the problem.+(I assume) following your change to disallow changing the name of "here", I am unable to change the repository group of "here"+++### What steps will reproduce the problem?+In webapp, edit "here", and try and change repository group.+It highlights the (now empty) name field, and says "value is required".++### What version of git-annex are you using? On what operating system?+git-annex version: 4.20130618-g333cb8e+Ubuntu 13.04++> [[fixed|done]] --[[Joey]]
+ doc/bugs/windows_install_failure.mdwn view
@@ -0,0 +1,28 @@+### Please describe the problem.+When installing the windows aplha dated 2013-06-21 12:17 it gives an error:++Error opening file for writing:+c:\program files (x86)\Git\cmd\git-annex.exe+Abort,retry or ignore?++If you run as administrator it works.++++### What steps will reproduce the problem?++Download the alpha installer and run as normal user.++### What version of git-annex are you using? On what operating system?+Windows 7 64 bit+++### 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+++# End of transcript or log.+"""]]
+ doc/bugs/windows_port_-_can__39__t_directly_access_files.mdwn view
@@ -0,0 +1,250 @@+### Please describe the problem.+Using the windows port of git annex, I'm unable to directly access files that are retrieved from a remote ssh repository. Instead, the file contains a reference to ../.git/annex/objects....++**Update** This appears to be a problem with remote bare repositories only. I was able to get from a remote regular git repository without the stand-in symlinks. The stand-in symlink file gets replaced with the real content on "get" using a non-base repository.++### What steps will reproduce the problem?++[[!format sh """+** on ssh server **++git init --bare annex.git+cd annex.git+git annex init origin++** on windows laptop - add content main repository ** +git init annex+cd annex+git annex init laptop++git remote add origin ssh://xxxxx/~/annex.git+echo hello > foo.txt+git annex add .+git commit -m "done"+git annex sync+git annex copy --to origin+git annex sync+git annex whereis foo.txt++** on windows laptop - backup repository **++cd ..+git init annex.backup+cd annex.backup+git annex init "backup"+git remote add origin ssh://joebo@xxxxx.com/~/annex.git+git fetch origin+git merge origin/synced/master+git annex sync+git annex get .+find . | xargs grep hello+./.git/annex/objects/d91/b11/SHA256E-s6--5891b5b522d5df086d0ff0b110fbd9d21bb4fc7+163af34d08286a2e846f6be03.txt/SHA256E-s6--5891b5b522d5df086d0ff0b110fbd9d21bb4fc+7163af34d08286a2e846f6be03.txt:hello++** updating the file from windows laptop **+cd ..\annex+echo hello2 > foo.txt+git annex add .+git commit -m "updated"+git annex sync+git annex copy --to origin+git annex sync	++cd ..\annex.backup+git fetch origin+git merge origin/synced/master+get annex sync+git annex get .+find . | xargs grep hello2+./.git/annex/objects/7ed/895/SHA256E-s9--3f70947299d2926028fd0107c4309e65ca33a9a+e0175fc4bc57792ca17240d18.txt/SHA256E-s9--3f70947299d2926028fd0107c4309e65ca33a9+ae0175fc4bc57792ca17240d18.txt:hello2+"""]]++++### What version of git-annex are you using? On what operating system?++	git-annex version: 4.20130601-gc01f842+	build flags: Pairing Testsuite S3 WebDAV DNS+	local repository version: 4+	default repository version: 3+	supported repository versions: 3 4+	upgrade supported from repository versions: 2+++### 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++joebo@joebo:~$ sudo rm -rf annex.git+joebo@joebo:~$ git init --bare annex.git+Initialized empty Git repository in /home/joebo/annex.git/+joebo@joebo:~$ cd annex.git+joebo@joebo:~/annex.git$ git annex init origin+init origin ok++++C:\Users\joebo>cd annex++C:\Users\joebo\annex>git annex init laptop+init laptop+  Detected a crippled filesystem.++  Enabling direct mode.++  Detected a filesystem without fifo support.++  Disabling ssh connection caching.+ok+(Recording state in git...)++C:\Users\joebo\annex>+C:\Users\joebo\annex>git remote add origin ssh://joebo@xxxxx.com/~+cho hello > foo.txt++C:\Users\joebo\annex>git annex add .+add foo.txt (checksum...) ok+(Recording state in git...)++C:\Users\joebo\annex>git commit -m "done"+[master (root-commit) 7f54efa] done+ 1 file changed, 1 insertion(+)+ create mode 120000 foo.txt++C:\Users\joebo\annex>git annex sync+commit+ok+pull origin+warning: no common commits+remote: Counting objects: 5, done.+remote: Compressing objects: 100% (3/3), done.+remote: Total 5 (delta 1), reused 0 (delta 0)+Unpacking objects: 100% (5/5), done.+From ssh://xxxxx.com/~/annex+ * [new branch]      git-annex  -> origin/git-annex+ok+(merging origin/git-annex into git-annex...)+(Recording state in git...)+push origin+Counting objects: 18, done.+Delta compression using up to 4 threads.+Compressing objects: 100% (12/12), done.+Writing objects: 100% (16/16), 1.48 KiB, done.+Total 16 (delta 1), reused 0 (delta 0)+To ssh://joebo@xxxxx.com/~/annex.git+ * [new branch]      git-annex -> synced/git-annex+ * [new branch]      master -> synced/master+ok++C:\Users\joebo\annex>git annex copy --to origin+copy foo.txt (checking origin...) (to origin...)+foo.txt+           0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=0/1)++sent 67 bytes  received 31 bytes  65.33 bytes/sec+total size is 0  speedup is 0.00+ok+(Recording state in git...)++C:\Users\joebo\annex>git annex sync+commit+ok+pull origin+ok+push origin+Counting objects: 9, done.+Delta compression using up to 4 threads.+Compressing objects: 100% (4/4), done.+Writing objects: 100% (5/5), 446 bytes, done.+Total 5 (delta 1), reused 0 (delta 0)+To ssh://joebo@xxxxx.com/~/annex.git+   ed1a701..c4c9cd0  git-annex -> synced/git-annex+ok++C:\Users\joebo\annex>git annex whereis foo.txt+whereis foo.txt (2 copies)+        03573d86-d460-11e2-8500-ebab2910b225 -- origin+        3b6b60fb-0979-4869-98de-38208182ab92 -- here (laptop)+ok+++C:\Users\joebo\annex>cd ..++C:\Users\joebo>git init annex.backup+Initialized empty Git repository in C:/Users/joebo/annex.backup/.git/++C:\Users\joebo>cd annex.backup++C:\Users\joebo\annex.backup>git annex init "backup"+init backup+  Detected a crippled filesystem.++  Enabling direct mode.++  Detected a filesystem without fifo support.++  Disabling ssh connection caching.+ok+(Recording state in git...)++C:\Users\joebo\annex.backup>git remote add origin ssh://joebo@xxxxx.com/~/anne+x.git++C:\Users\joebo\annex.backup>git fetch origin+warning: no common commits+remote: Counting objects: 25, done.+remote: Compressing objects: 100% (19/19), done.+remote: Total 25 (delta 4), reused 0 (delta 0)+Unpacking objects: 100% (25/25), done.+From ssh://xxxxx.com/~/annex+ * [new branch]      git-annex  -> origin/git-annex+ * [new branch]      synced/git-annex -> origin/synced/git-annex+ * [new branch]      synced/master -> origin/synced/master++C:\Users\joebo\annex.backup>git merge origin/synced/master++C:\Users\joebo\annex.backup>git annex sync+(merging origin/git-annex origin/synced/git-annex into git-annex...)+(Recording state in git...)+commit+ok+pull origin+ok+push origin+Counting objects: 12, done.+Delta compression using up to 4 threads.+Compressing objects: 100% (6/6), done.+Writing objects: 100% (8/8), 818 bytes, done.+Total 8 (delta 2), reused 0 (delta 0)+To ssh://joebo@xxxxx.com/~/annex.git+   c4c9cd0..f403560  git-annex -> synced/git-annex+ok++C:\Users\joebo\annex.backup>git annex get .+get foo.txt (from origin...)+SHA256E-s0--e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.txt++           0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=0/1)++sent 30 bytes  received 145 bytes  116.67 bytes/sec+total size is 0  speedup is 0.00+ok+(Recording state in git...)++C:\Users\joebo\annex.backup>cat foo.txt+.git/annex/objects/fW/Gk/SHA256E-s0--e3b0c44298fc1c149afbf4c8996fb92427ae41e4649+b934ca495991b7852b855.txt/SHA256E-s0--e3b0c44298fc1c149afbf4c8996fb92427ae41e464+9b934ca495991b7852b855.txt+C:\Users\joebo\annex.backup>ls+foo.txt+++# End of transcript or log.+"""]]++> [[done]]; see my comment. --[[Joey]] 
+ doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_.mdwn view
@@ -0,0 +1,559 @@+### Please describe the problem.++Using a centralized remote repository, new files that are added to the repository after it's pulled cannot be directly accessed - instead are pulled as symlinks.++The workaround is to create a new remote repository that clones from the source. That repo can pull all files correctly++### What steps will reproduce the problem?++The following script works fine when everything is run on a linux box. If the same script is run on the windows box, it will not show foo2.txt in the repository clone. foo.txt is still valid.++a file, testrepo.sh is set up on the server to simplify the creation of the repo for testing++**testrepo.sh**+[[!format sh """++rm -rf repo.git+git init --bare repo.git+cd repo.git+git annex init origin+git annex sync+++"""]]++**test script**+[[!format sh """++ssh joebo@xxxxx sh testrepo.sh+++rm -rf repo+git init repo+cd repo++git annex init+git remote add origin ssh://joebo@xxxxx/~/repo.git+echo hello > foo.txt+git annex add .+git commit -m "initial commit"+git annex sync+git annex copy --to origin+git annex sync++cd ..+rm -rf repo-bak+git init repo-bak+cd repo-bak+git remote add origin ssh://joebo@xxxxx/~/repo.git+git fetch origin+git merge origin/synced/master+git annex sync+git annex get .+cat foo.txt #works just fine!++cd ..+cd repo+echo foo2 > foo2.txt+git annex add .+git commit -m "another"+git annex sync+git annex copy --to origin+git annex sync++cd ..+cd repo-bak+git annex sync++## throws a fastforward error:+commit+ok+pull origin+remote: Counting objects: 21, done.+remote: Compressing objects: 100% (14/14), done.+remote: Total 16 (delta 3), reused 0 (delta 0)+Unpacking objects: 100% (16/16), done.+From ssh://xxxx.com/~/repo+   c5ed8e1..7ea5586  synced/git-annex -> origin/synced/git-annex+   a8402ae..1a72b3d  synced/master -> origin/synced/master+ok+(merging origin/synced/git-annex into git-annex...)+(Recording state in git...)+push origin+Counting objects: 15, done.+Delta compression using up to 4 threads.+Compressing objects: 100% (7/7), done.+Writing objects: 100% (8/8), 844 bytes, done.+Total 8 (delta 2), reused 0 (delta 0)+To ssh://joebo@xxxx.com/~/repo.git+   7ea5586..5df3c85  git-annex -> synced/git-annex+ ! [rejected]        master -> synced/master (non-fast-forward)+error: failed to push some refs to 'ssh://joebo@xxx.com/~/repo.git'+hint: Updates were rejected because a pushed branch tip is behind its remote+hint: counterpart. Check out this branch and merge the remote changes+hint: (e.g. 'git pull') before pushing again.+hint: See the 'Note about fast-forwards' in 'git push --help' for details.+failed+git-annex: sync: 1 failed+"""]]++If I try to work around it by merging, then I get the symlink in the file after getting+++[[!format sh """++C:\joe\backup\repo-bak>git merge origin/synced/master+Updating f586b6a..fcae7bc+Fast-forward+ foo2.txt | 1 ++ 1 file changed, 1 insertion(+)+ create mode 120000 foo2.txt++C:\joe\backup\repo-bak>git annex get foo2.txt+get foo2.txt (from origin...)+SHA256E-s7--eef0e29200a3194851e5fb4ff77d0d0aec5cd3f5ccd78762e80a45f0bbece05f.txt++           7 100%    6.84kB/s    0:00:00 (xfer#1, to-check=0/1)++sent 30 bytes  received 156 bytes  124.00 bytes/sec+total size is 7  speedup is 0.04+ok+warning: LF will be replaced by CRLF in C:\joe\backup\repo-bak\.git\annex\journa+l\fba_8bb_SHA256E-s7--eef0e29200a3194851e5fb4ff77d0d0aec5cd3f5ccd78762e80a45f0bb+ece05f.txt.log.+The file will have its original line endings in your working directory.+(Recording state in git...)++C:\joe\backup\repo-bak>cat foo2.txt+.git/annex/objects/3V/kM/SHA256E-s7--eef0e29200a3194851e5fb4ff77d0d0aec5cd3f5ccd+78762e80a45f0bbece05f.txt/SHA256E-s7--eef0e29200a3194851e5fb4ff77d0d0aec5cd3f5cc+d78762e80a45f0bbece05f.txt++"""]]++removing the backup repository and starting over works:++[[!format sh """++C:\joe\backup>git init repo-bak+Initialized empty Git repository in C:/joe/backup/repo-bak/.git/++C:\joe\backup>cd repo-bak++C:\joe\backup\repo-bak>git remote add origin ssh://joebo@xxxx.com/~/repo.git++C:\joe\backup\repo-bak>git fetch origin+remote: Counting objects: 57, done.+remote: Compressing objects: 100% (48/48), done.+remote: Total 57 (delta 20), reused 0 (delta 0)+Unpacking objects: 100% (57/57), done.+From ssh://xxxx.com/~/repo+ * [new branch]      git-annex  -> origin/git-annex+ * [new branch]      synced/git-annex -> origin/synced/git-annex+ * [new branch]      synced/master -> origin/synced/master++C:\joe\backup\repo-bak>git merge origin/synced/master++C:\joe\backup\repo-bak>git annex sync++  Detected a crippled filesystem.++  Enabling direct mode.++  Detected a filesystem without fifo support.++  Disabling ssh connection caching.+warning: LF will be replaced by CRLF in C:\joe\backup\repo-bak\.git\annex\journa+l\uuid.log.+The file will have its original line endings in your working directory.+(merging origin/git-annex origin/synced/git-annex into git-annex...)+(Recording state in git...)+commit+ok+pull origin+ok+push origin+Counting objects: 9, done.+Delta compression using up to 4 threads.+Compressing objects: 100% (4/4), done.+Writing objects: 100% (5/5), 533 bytes, done.+Total 5 (delta 3), reused 0 (delta 0)+To ssh://joebo@xxxx.com/~/repo.git+   5038806..67d6383  git-annex -> synced/git-annex+ok++C:\joe\backup\repo-bak>git annex get .+get foo.txt (from origin...)+SHA256E-s8--f873eef4f852e335da367d76ce7f1973c15b8ffebf532b064df4bc691cd51a87.txt++           8 100%    7.81kB/s    0:00:00 (xfer#1, to-check=0/1)++sent 30 bytes  received 157 bytes  124.67 bytes/sec+total size is 8  speedup is 0.04+ok+get foo2.txt (from origin...)+SHA256E-s7--eef0e29200a3194851e5fb4ff77d0d0aec5cd3f5ccd78762e80a45f0bbece05f.txt++           7 100%    6.84kB/s    0:00:00 (xfer#1, to-check=0/1)++sent 30 bytes  received 156 bytes  124.00 bytes/sec+total size is 7  speedup is 0.04+ok+warning: LF will be replaced by CRLF in C:\joe\backup\repo-bak\.git\annex\journa+l\fba_8bb_SHA256E-s7--eef0e29200a3194851e5fb4ff77d0d0aec5cd3f5ccd78762e80a45f0bb+ece05f.txt.log.+The file will have its original line endings in your working directory.+warning: LF will be replaced by CRLF in C:\joe\backup\repo-bak\.git\annex\journa+l\ae4_1e9_SHA256E-s8--f873eef4f852e335da367d76ce7f1973c15b8ffebf532b064df4bc691c+d51a87.txt.log.+The file will have its original line endings in your working directory.+(Recording state in git...)++C:\joe\backup\repo-bak>cat *+hello+foo2++C:\joe\backup\repo-bak>ls -lah+total 5.0k+drwxr-xr-x    1 jbogner  Administ        0 Jun 15 08:44 .+drwxr-xr-x   23 jbogner  Administ     4.0k Jun 15 08:43 ..+drwxr-xr-x    1 jbogner  Administ     4.0k Jun 15 08:44 .git+-rw-r--r--    1 jbogner  Administ        8 Jun 15 08:44 foo.txt+-rw-r--r--    1 jbogner  Administ        7 Jun 15 08:44 foo2.txt++C:\joe\backup\repo-bak>++"""]]++### What version of git-annex are you using? On what operating system?++Windows:++	C:\joe\backup\repo-bak>git annex version+	git-annex version: 4.20130614-g3a93e24+	build flags: Pairing Testsuite S3 WebDAV DNS+	local repository version: 4+	default repository version: 3+	supported repository versions: 3 4+	upgrade supported from repository versions: 2+++Linux:++        git-annex version: 4.20130531-g5df09b5+	build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP+++### 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++C:\joe\backup>cd repo++C:\joe\backup\repo>git annex init+init+  Detected a crippled filesystem.++  Enabling direct mode.++  Detected a filesystem without fifo support.++  Disabling ssh connection caching.+ok+warning: LF will be replaced by CRLF in C:\joe\backup\repo\.git\annex\journal\uu+id.log.+The file will have its original line endings in your working directory.+(Recording state in git...)++C:\joe\backup\repo>git remote add origin ssh://joebo@xxxx.com/~/repo.git++C:\joe\backup\repo>echo hello  1>foo.txt++C:\joe\backup\repo>git annex add .+add foo.txt (checksum...) ok+(Recording state in git...)+warning: LF will be replaced by CRLF in C:\joe\backup\repo\.git\annex\journal\ae+4_1e9_SHA256E-s8--f873eef4f852e335da367d76ce7f1973c15b8ffebf532b064df4bc691cd51a+87.txt.log.+The file will have its original line endings in your working directory.++C:\joe\backup\repo>git commit -m "initial commit"+[master (root-commit) 47c05ea] initial commit+ 1 file changed, 1 insertion(+)+ create mode 120000 foo.txt++C:\joe\backup\repo>git annex sync+commit+ok+pull origin+warning: no common commits+remote: Counting objects: 5, done.+remote: Compressing objects: 100% (3/3), done.+remote: Total 5 (delta 1), reused 0 (delta 0)+Unpacking objects: 100% (5/5), done.+From ssh://xxxx.com/~/repo+ * [new branch]      git-annex  -> origin/git-annex+ok+(merging origin/git-annex into git-annex...)+(Recording state in git...)+push origin+Counting objects: 18, done.+Delta compression using up to 4 threads.+Compressing objects: 100% (12/12), done.+Writing objects: 100% (16/16), 1.40 KiB, done.+Total 16 (delta 3), reused 0 (delta 0)+To ssh://joebo@xxxx.com/~/repo.git+ * [new branch]      git-annex -> synced/git-annex+ * [new branch]      master -> synced/master+ok++C:\joe\backup\repo>git annex copy --to origin+copy foo.txt (checking origin...) (to origin...)+foo.txt+           8 100%    0.00kB/s    0:00:00 (xfer#1, to-check=0/1)++sent 79 bytes  received 31 bytes  73.33 bytes/sec+total size is 8  speedup is 0.07+ok+warning: LF will be replaced by CRLF in C:\joe\backup\repo\.git\annex\journal\ae+4_1e9_SHA256E-s8--f873eef4f852e335da367d76ce7f1973c15b8ffebf532b064df4bc691cd51a+87.txt.log.+The file will have its original line endings in your working directory.+(Recording state in git...)++C:\joe\backup\repo>git annex sync+commit+ok+pull origin+ok+push origin+Counting objects: 9, done.+Delta compression using up to 4 threads.+Compressing objects: 100% (4/4), done.+Writing objects: 100% (5/5), 450 bytes, done.+Total 5 (delta 1), reused 0 (delta 0)+To ssh://joebo@xxxx.com/~/repo.git+   bd52e5f..02a0a4a  git-annex -> synced/git-annex+ok++C:\joe\backup\repo>cd ..++C:\joe\backup>rm -rf repo-bak++C:\joe\backup>git init repo-bak+Initialized empty Git repository in C:/joe/backup/repo-bak/.git/++C:\joe\backup>cd repo-bak++C:\joe\backup\repo-bak>git remote add origin ssh://joebo@xxxx.com/~/repo.git++C:\joe\backup\repo-bak>git fetch origin+remote: Counting objects: 25, done.+remote: Compressing objects: 100% (19/19), done.+remote: Total 25 (delta 6), reused 0 (delta 0)+Unpacking objects: 100% (25/25), done.+From ssh://xxxx.com/~/repo+ * [new branch]      git-annex  -> origin/git-annex+ * [new branch]      synced/git-annex -> origin/synced/git-annex+ * [new branch]      synced/master -> origin/synced/master++C:\joe\backup\repo-bak>git merge origin/synced/master++C:\joe\backup\repo-bak>git annex sync++  Detected a crippled filesystem.++  Enabling direct mode.++  Detected a filesystem without fifo support.++  Disabling ssh connection caching.+warning: LF will be replaced by CRLF in C:\joe\backup\repo-bak\.git\annex\journa+l\uuid.log.+The file will have its original line endings in your working directory.+(merging origin/git-annex origin/synced/git-annex into git-annex...)+(Recording state in git...)+commit+ok+pull origin+ok+push origin+Counting objects: 9, done.+Delta compression using up to 4 threads.+Compressing objects: 100% (4/4), done.+Writing objects: 100% (5/5), 610 bytes, done.+Total 5 (delta 1), reused 0 (delta 0)+To ssh://joebo@xxxx.com/~/repo.git+   02a0a4a..88d19ce  git-annex -> synced/git-annex+ok++C:\joe\backup\repo-bak>git annex get .+get foo.txt (from origin...)+SHA256E-s8--f873eef4f852e335da367d76ce7f1973c15b8ffebf532b064df4bc691cd51a87.txt++           8 100%    7.81kB/s    0:00:00 (xfer#1, to-check=0/1)++sent 30 bytes  received 157 bytes  124.67 bytes/sec+total size is 8  speedup is 0.04+ok+warning: LF will be replaced by CRLF in C:\joe\backup\repo-bak\.git\annex\journa+l\ae4_1e9_SHA256E-s8--f873eef4f852e335da367d76ce7f1973c15b8ffebf532b064df4bc691c+d51a87.txt.log.+The file will have its original line endings in your working directory.+(Recording state in git...)++C:\joe\backup\repo-bak>cat foo.txt+hello++C:\joe\backup\repo-bak>cd ..++C:\joe\backup>cd repo++C:\joe\backup\repo>echo foo2  1>foo2.txt++C:\joe\backup\repo>git annex add .+add foo2.txt (checksum...) ok+(Recording state in git...)+warning: LF will be replaced by CRLF in C:\joe\backup\repo\.git\annex\journal\fb+a_8bb_SHA256E-s7--eef0e29200a3194851e5fb4ff77d0d0aec5cd3f5ccd78762e80a45f0bbece0+5f.txt.log.+The file will have its original line endings in your working directory.++C:\joe\backup\repo>git commit -m "another"+[master 76a9e44] another+ 1 file changed, 1 insertion(+)+ create mode 120000 foo2.txt++C:\joe\backup\repo>git annex sync+commit+ok+pull origin+remote: Counting objects: 9, done.+remote: Compressing objects: 100% (4/4), done.+remote: Total 5 (delta 1), reused 0 (delta 0)+Unpacking objects: 100% (5/5), done.+From ssh://xxxx.com/~/repo+   02a0a4a..88d19ce  synced/git-annex -> origin/synced/git-annex+ok+(merging origin/synced/git-annex into git-annex...)+(Recording state in git...)+push origin+Counting objects: 16, done.+Delta compression using up to 4 threads.+Compressing objects: 100% (10/10), done.+Writing objects: 100% (11/11), 1.11 KiB, done.+Total 11 (delta 2), reused 0 (delta 0)+To ssh://joebo@xxxx.com/~/repo.git+   88d19ce..f47091a  git-annex -> synced/git-annex+   47c05ea..76a9e44  master -> synced/master+ok++C:\joe\backup\repo>git annex copy --to origin+copy foo.txt (checking origin...) ok+copy foo2.txt (checking origin...) (to origin...)+foo2.txt+           7 100%    0.00kB/s    0:00:00 (xfer#1, to-check=0/1)++sent 79 bytes  received 31 bytes  73.33 bytes/sec+total size is 7  speedup is 0.06+ok+warning: LF will be replaced by CRLF in C:\joe\backup\repo\.git\annex\journal\fb+a_8bb_SHA256E-s7--eef0e29200a3194851e5fb4ff77d0d0aec5cd3f5ccd78762e80a45f0bbece0+5f.txt.log.+The file will have its original line endings in your working directory.+(Recording state in git...)++C:\joe\backup\repo>git annex sync+commit+ok+pull origin+ok+push origin+Counting objects: 9, done.+Delta compression using up to 4 threads.+Compressing objects: 100% (4/4), done.+Writing objects: 100% (5/5), 477 bytes, done.+Total 5 (delta 1), reused 0 (delta 0)+To ssh://joebo@xxxx.com/~/repo.git+   f47091a..98082cb  git-annex -> synced/git-annex+ok++C:\joe\backup\repo>cd ..++C:\joe\backup>cd repo-bak++C:\joe\backup\repo-bak>git annex sync+commit+ok+pull origin+remote: Counting objects: 21, done.+remote: Compressing objects: 100% (14/14), done.+remote: Total 16 (delta 4), reused 0 (delta 0)+Unpacking objects: 100% (16/16), done.+From ssh://xxxx.com/~/repo+   88d19ce..98082cb  synced/git-annex -> origin/synced/git-annex+   47c05ea..76a9e44  synced/master -> origin/synced/master+ok+(merging origin/synced/git-annex into git-annex...)+(Recording state in git...)+push origin+Counting objects: 15, done.+Delta compression using up to 4 threads.+Compressing objects: 100% (7/7), done.+Writing objects: 100% (8/8), 843 bytes, done.+Total 8 (delta 2), reused 0 (delta 0)+To ssh://joebo@xxxx.com/~/repo.git+   98082cb..2537203  git-annex -> synced/git-annex+ ! [rejected]        master -> synced/master (non-fast-forward)+error: failed to push some refs to 'ssh://joebo@xxxx.com/~/repo.git'+hint: Updates were rejected because a pushed branch tip is behind its remote+hint: counterpart. Check out this branch and merge the remote changes+hint: (e.g. 'git pull') before pushing again.+hint: See the 'Note about fast-forwards' in 'git push --help' for details.+failed+git-annex: sync: 1 failed++C:\joe\backup\repo-bak>git annex get foo2.txt+git-annex: foo2.txt not found++C:\joe\backup\repo-bak>cat foo2.txt+cat: foo2.txt: No such file or directory+C:\joe\backup\repo-bak>git pull origin synced/master+From ssh://xxxx.com/~/repo+ * branch            synced/master -> FETCH_HEAD+Updating 47c05ea..76a9e44+Fast-forward+ foo2.txt | 1 ++ 1 file changed, 1 insertion(+)+ create mode 120000 foo2.txt++C:\joe\backup\repo-bak>git annex get foo2.txt+get foo2.txt (from origin...)+SHA256E-s7--eef0e29200a3194851e5fb4ff77d0d0aec5cd3f5ccd78762e80a45f0bbece05f.txt++           7 100%    6.84kB/s    0:00:00 (xfer#1, to-check=0/1)++sent 30 bytes  received 156 bytes  124.00 bytes/sec+total size is 7  speedup is 0.04+ok+warning: LF will be replaced by CRLF in C:\joe\backup\repo-bak\.git\annex\journa+l\fba_8bb_SHA256E-s7--eef0e29200a3194851e5fb4ff77d0d0aec5cd3f5ccd78762e80a45f0bb+ece05f.txt.log.+The file will have its original line endings in your working directory.+(Recording state in git...)++C:\joe\backup\repo-bak>cat foo2.txt+.git/annex/objects/3V/kM/SHA256E-s7--eef0e29200a3194851e5fb4ff77d0d0aec5cd3f5ccd+78762e80a45f0bbece05f.txt/SHA256E-s7--eef0e29200a3194851e5fb4ff77d0d0aec5cd3f5cc+d78762e80a45f0bbece05f.txt+C:\joe\backup\repo-bak>++++# End of transcript or log.+"""]]++> Apparently the last of the issues discussed here is fixed.+> Closing this bug report before it grows a new issue. ;) [[done]] --[[Joey]]
doc/design/assistant/blog/day_277__private_static_protected_void.mdwn view
@@ -1,5 +1,5 @@ Yeah, Java hacking today. I have something that I think should deal with-the [[Android_app_permission_denial_on_startup]] problem. Added a "Open+the [[bugs/Android_app_permission_denial_on_startup]] problem. Added a "Open WebApp" item to the terminal's menu, which should behave as advertised. This is available in the Android daily build now, if your device has that problem.
+ doc/design/assistant/blog/day_280__yesod.mdwn view
@@ -0,0 +1,7 @@+Today marks 1 year since I started working on the git-annex assistant. 280+solid days of work!++As a background task here at the beach I've been porting git-annex to yesod+1.2. Finished it today, earlier than expected, and also managed to keep it+building with older versions. Some tricks kept the number of+ifdefs reasonably low.
+ doc/design/assistant/blog/day_281__back.mdwn view
@@ -0,0 +1,37 @@+Slowly getting through the bugs that were opened while I was on vacation and+then I'll try to get to all the comments. 60+ messages to go.++Got git-annex working better on encfs, which does not support hard links in+paranoid mode. Now git-annex can be used in indirect mode, it doesn't force+direct mode when hard links are not supported.++Made the Android repository setup special case generate a .gitignore file+to ignore thumbnails. Which will only start working once the assistant+gets .gitignore support.++-----++Been thinking today about encrypting XMPP traffic, particularly git push+data. Of course, XMPP is already encrypted, but that doesn't hide it from+those entities who have access to the XMPP server or its encryption key.+So adding client-to-client encryption has been on the TODO list all along.++OTR would be a great way to do it. But I worry that the confirmation steps+OTR uses to authenticate the recipient would make the XMPP pairing UI harder+to get through.++Particularly when pairing your own devices over XMPP, with several devices+involved, you'd need to do a lot of cross-confirmations. It would be better+there, I think, to just use a shared secret for authentication. (The need+to enter such a secret on each of your devices before pairing them would+also provide a way to use different repositories with the same XMPP+account, so 2birds1stone.)++Maybe OTR confirmations would be ok when setting up sharing with a friend.+If OTR was not used there, and it just did a Diffie-Hellman key exchange+during the pairing process, it could be attacked by an active MITM spoofing+attack. The attacker would then know the keys, and could decrypt future+pushes. How likely is such an attack? This goes far beyond what we're+hearing about. Might be best to put in some basic encryption now, so+we don't have to worry about pushes being passively recorded on the+server. Comments appreciated.
+ doc/design/assistant/blog/day_282-283__caught_up.mdwn view
@@ -0,0 +1,18 @@+Got caught up on my backlog yesterday.++Part of adding files in direct mode involved removing write permission from+them temporarily. That turned out to cause problems with some programs that+open a file repeatedly, and was generally against the principle that direct+mode files are always directly available. Happily, I was able to get rid of+that without sacrificing any safety.++Improved syncing to bare repositories. Normally syncing pushes to a+synced/master branch, which is good for non-bare repositories since git+does not allow pushing to the currently checked out branch. But for bare+repositories, this could leave them without a master branch, so cloning+from them wouldn't work. A funny thing is that git does not really have any+way to tell if a remote repository is bare or not. Anyway, I did put in a+fix, at the expense of pushing twice (but the git data should only be+transferred once anyway).++
+ doc/design/assistant/blog/day_284__porting.mdwn view
@@ -0,0 +1,13 @@+Today I got to deal with bugs on Android (busted use of `cp` among other+problems), Windows (fixed a strange hang when adding several files), and+Linux (`.desktop` files suck and Wine ships a particularly nasty one).+Pretty diverse!++Did quite a lot of research and thinking on XMPP encryption yesterday, but+have not run any code yet (except for trying out a D-H exchange in `ghci`).+I have listed several options on the [[XMPP]] page.++Planning to take a look at+[[bugs/Handling_of_files_inside_and_outside_archive_directory_at_the_same_time]]+tomorrow; maybe I can come up with a workaround to avoid it behaving so+badly in that case.
+ doc/design/assistant/blog/day_285__fixed_the_archive_directory_loop.mdwn view
@@ -0,0 +1,23 @@+Yay, I fixed the+[[bugs/Handling_of_files_inside_and_outside_archive_directory_at_the_same_time]]+bug!+At least in direct mode, which thanks to its associated files tracking+knows when a given file has another file in the repository with the same+content. Had not realized the behavior in direct mode was so bad, or the+fix so relatively easy. Pity I can't do the same for indirect mode, but+the problem is much less serious there.++That was this weekend. Today, I nearly put out a new release (been 2 weeks+since the last one..), but ran out of time in the end, and need to get the+OSX autobuilder fixed first, so have deferred it until Friday.++However, I did make some improvements today.+Added an `annex.debug` git config setting, so debugging can+be turned on persistently. People seem to expect that to happen when+checking the checkbox in the webapp, so now it does.++Fixed 3 or 4 bugs in the Windows port. Which actually, has users now, or+at least one user. It's very handy to actually get real world testing of+that port.++[[!meta date="Mon, 17 Jun 2013 17:14:04 -0400"]]
+ doc/design/assistant/blog/day_286__Windows_test_suite.mdwn view
@@ -0,0 +1,19 @@+One of my Windows fixes yesterday got the test suite close to sort of+working on Windows, and I spent all day today pounding on it. Fixed+numerous bugs, and worked around some weird Windows behaviors -- like+recursively deleting a directory sometimes fails with a permission denied+error about a file in it, and leaves behind an empty directory. (What!?)+The most important bug I fixed caused CR to leak into files in the+git-annex branch from Windows, during a union merge, which was not a good+thing at all.++At the end of the day, I only have 6 remaining failing test cases on+Windows. Half of them are some problem where running `git annex sync`+from the test suite stomps on PATH somehow and prevents xargs from working.+The rest are probably real bugs in the directory (again something to do+with recursive directory deletion, hmmm..), hook, and rsync+special remotes on Windows. I'm punting on those 6 for now, they'll be+skipped on Windows.++Should be worth today's pain to know in the future when I break+something that I've oh-so-painfully gotten working on Windows.
+ doc/design/assistant/blog/day_287__niceness.mdwn view
@@ -0,0 +1,13 @@+Pushed out a release today. While I've somewhat ramped down activity this+month with the Kickstarter period over and summer trips and events ongoing,+looking over the changelog I still see a ton of improvements in the 20 days+since the last release.++Been doing some work to make the assistant daemon be more `nice`. I don't+want to nice the whole program, because that could make the web interface+unresponsive. What I am able to do, thanks to Linux violating POSIX, is to+`nice` certain expensive operations, including the startup scan and the daily+sanity check. Also, I put in a call to `ionice` (when it's available) +when `git annex assistant --autostart` is run, so the daemon's+disk IO will be prioritized below other IO. Hope this keeps it out of your+way while it does its job.
+ doc/design/assistant/blog/day_288__success_stories.mdwn view
@@ -0,0 +1,32 @@+Got caught up on a big queue of messages today. Mostly I hear from people+when git-annex is not working for them, or they have a question about using+it. From time to time someone does mention that it's working for them.++> We have 4 or so machines all synching with each other via the local+> network thing. I'm always amazed when it doesn't just explode :)++Due to the nature of git-annex, a lot of people can be using it without+anyone knowing about it. Which is great. But these little success stories+can make all the difference. It motivates me to keep pounding out the+development hours, it encourages other people to try it, and it'd be a good+thing to be able to point at if I tried to raise more funding now that I'm+out of Kickstarter money.++I'm posting my own success story to my main blog:+[git annex and my mom](http://joeyh.name/blog/entry/git_annex_and_my_mom)++If you have a success story to share, why not blog about it, microblog it,+or just post a comment here, or even send me a private message. Just a+quick note is fine. Thanks!++----++Going through the bug reports and questions today, I ended up fixing+three separate bugs that could break setting up a repo on a remote ssh+server from the webapp.++Also developed a minimal test case for some gnucash behavior that prevents+the watcher from seeing files it writes out. I understand the problem,+but don't have a fix for that yet. Will have to think about it. (A year ago+today, my blog featured the+[[first_release_of_the_watcher|day_16__more_robust_syncing]].)
+ doc/design/assistant/blog/day_289__back_in_the_swing.mdwn view
@@ -0,0 +1,16 @@+Came up with a fix for the gnucash hard linked file problem that makes the+assistant notice the files gnucash writes. This is not full hard link support;+hard linked files still don't cleanly sync around. But new hard links to+files are noticed and added, which is enough to support gnucash.++Spent around 4 hours on reproducing and trying to debug+[[bugs/Hanging_on_install_on_Mountain_lion]]. It seems that recent upgrades+of the OSX build machine led to this problem. And indeed, building with an+older version of Yesod and Warp seems to have worked around the problem. So+I updated the OSX build for the last release. I will have to re-install the+new Yesod on my laptop and investigate further -- is this an OSX specific+problem, or does it affect Linux? Urgh, this is the second hang I've+encountered involving Warp..++Got several nice [[success stories|day_288__success_stories]], but I don't+think I've seen *yours* yet. ;) Please post!
doc/design/assistant/polls/Android_default_directory.mdwn view
@@ -4,4 +4,4 @@ want the first time they run it, but to save typing on android, anything that gets enough votes will be included in a list of choices as well. -[[!poll open=yes expandable=yes 47 "/sdcard/annex" 3 "Whole /sdcard" 4 "DCIM directory (photos and videos only)" 1 "Same as for regular git-annex. ~/annex/"]]+[[!poll open=yes expandable=yes 49 "/sdcard/annex" 4 "Whole /sdcard" 4 "DCIM directory (photos and videos only)" 1 "Same as for regular git-annex. ~/annex/"]]
doc/design/assistant/polls/prioritizing_special_remotes.mdwn view
@@ -6,7 +6,7 @@ Help me prioritize my work: What special remote would you most like to use with the git-annex assistant? -[[!poll open=yes 15 "Amazon S3 (done)" 12 "Amazon Glacier (done)" 9 "Box.com (done)" 70 "My phone (or MP3 player)" 18 "Tahoe-LAFS" 7 "OpenStack SWIFT" 28 "Google Drive"]]+[[!poll open=yes 16 "Amazon S3 (done)" 12 "Amazon Glacier (done)" 9 "Box.com (done)" 70 "My phone (or MP3 player)" 19 "Tahoe-LAFS" 7 "OpenStack SWIFT" 29 "Google Drive"]]  This poll is ordered with the options I consider easiest to build listed first. Mostly because git-annex already supports them and they
doc/design/assistant/xmpp.mdwn view
@@ -9,6 +9,28 @@   See <http://git-annex.branchable.com/design/assistant/blog/day_114__xmpp/#comment-aaba579f92cb452caf26ac53071a6788> * Support registering with XMPP provider from within the webapp,    as clients like pidgin are able to do.+* Add an encryption layer that does not rely on trusting the XMPP server's+  security (currently it's encrypted only to the server, not end-to-end).+  There are a few options for how to generate the key for eg,+  AES encryption:+  * Do a simple Diffie-Hellman shared key generation when starting each XMPP+    push session. Would not protect the users from active MITM by the+    XMPP server, but would prevent passive data gathering attacks from+    getting useful data. Since the key is ephemeral, would provide+    Forward Security.+  * Do D-H key generation, but at pairing, not push time. Allows for an+    optional confirmation step, using eg, BubbleBabble to compare the+    keys out of band. ("I see xebeb-dibyb-gycub-kacyb-modib-pudub-sefab-vifuc-bygoc-daguc-gohec-kuxax .. do you too?")+  * Prompt both users for a passphrase when XMPP pairing, and +    use SPEKE (or similar methods like J-PAKE) to generate a shared key.+    Avoids active MITM attacks. Makes pairing harder, especially pairing+    between one's own devices, since the passphrase has to be entered on+    all devices. Also problimatic when pairing more than 2 devices,+    especially when adding a device to the set later, since there+    would then be multiple different keys in use.+  * Rely on the user's gpg key, and do gpg key verification during XMPP+    pairing. Problimatic because who wants to put their gpg key on their+    phone? Also, require the users be in the WOT and be gpg literate.  ## design goals @@ -109,9 +131,10 @@  ### security -Data git-annex sends over XMPP will be visible to the XMPP-account's buddies, to the XMPP server, and quite likely to other interested-parties. So it's important to consider the security exposure of using it.+Data git-annex sends over XMPP will be visible to the XMPP account's+buddies, and to the XMPP server (and any attacker who has access to the+XMPP server). So it's important to consider the security exposure of using+it.  Even if git-annex sends only a single bit notification, this lets attackers know when the user is active and changing files. Although the assistant's other@@ -121,9 +144,11 @@ see how many clients are connected for a user, and fingerprint the ones running git-annex, and determine how many clients are running git-annex. -If git-annex sent the UUID of the remote it pushed to, this would let-attackers determine how many different remotes are being used,-and map some of the connections between clients and remotes.+An attacker can observe the UUIDs used for pushes and pairing, and determine+how many different remotes are being used.  An attacker could replay push notification messages, reusing UUIDs it's observed. This would make clients pull repeatedly, perhaps as a DOS.++The XMPP server, or an attacker with access to it can reconstruct the git +repository from data sent in pushes, in part or in whole.
+ doc/forum/Cannot_find_git-annex_in_server.mdwn view
@@ -0,0 +1,10 @@+My server is running the precompiled tarball https://downloads.kitenet.net/git-annex/linux/current/++git-annex version: 4.20130531-g5df09b5+build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP++The tarball is untared in "/opt/git-annex.linux" and this location is added to the users path in ".profile", who can launch the webapp as usual and so on.++But when a git-annex client from another computer tries to stablish a remote server repository with the server via ssh, it will complain "/usr/bin/git-annex", "runshell" and so on are missing. And if the binaries in "/opt/git-annex.linux" are symlinked in "/usr/bin" they will start to miss the other bin and libs in the "/opt/git-annex.linux" source tree.++As you can understand, I can't put the whole "/opt/git-annex.linux" folder tree in "/usr/bin". Is there any solution to make the precompiled tarball work properly as a git-annex server?
+ doc/forum/How_do_you_know_when_something_fails_a_fsck__63__.mdwn view
@@ -0,0 +1,4 @@+Hi Joey,+    I was wondering how you know when a file in your repo fails a fsck.  I'm having trouble finding out since I can't change any of the objects (which is great!).  I'd just like to know since I have thousands of files in one of my annexes, and scrolling through my term buffer is unwieldy.  I'd assume it would show up when the fsck was done, or in 'git annex status'...++Thanks!
+ doc/forum/Overwriting_data_without_getting_it.mdwn view
@@ -0,0 +1,3 @@+My collaborators and I use git annex to track various large data files (among some smaller metadata files managed by ordinary git).  Some of these data files need to change completely -- the old ones were just wrong.  So I do a git checkout, but don't `git annex get` because it would just be a waste of time and bandwidth.  This means that my "data files" are just broken symlinks.  Now, I find that by making the necessary directories under `.git/annex/objects/`, I can write to these files in the usual way.  The symlinks are preserved, and the files they link to now exist and are full of my corrected data.  This seems like it's a problem because the hash has presumably changed.  (I'm still a little fuzzy on how exactly git-annex works.)  Also, git/git-annex doesn't seem to realize that anything has changed.  Is this recoverable?++Would it have been better to just `git rm` (or something) the original version of the file, commit that, and then add the new data?  And if so, how should I go about this now that I've created these many very large files?  If not, what would be the preferred way to do this?
+ doc/forum/USB_backup_with_files_visible.mdwn view
@@ -0,0 +1,7 @@+Quick question: I want to create a repository on my removable USB drive that will acquire all files (eg. "full backup" repository group), but where the files will be visible and usable if you load the drive on another computer.++How do I do that from within the assistant?++Thanks,++Zellyn
+ doc/forum/Ubuntu_PPA/comment_7_c3f7ec8573934c59d70a48e36e321c13._comment view
@@ -0,0 +1,12 @@+[[!comment format=mdwn+ username="https://openid.fmarier.org/"+ nickname="fmarier"+ subject="New location for my git-annex PPA"+ date="2013-06-15T07:42:13Z"+ content="""+My Ubuntu Precise PPA has moved here: https://launchpad.net/~fmarier/+archive/git-annex++It contains version 20130601 of git-annex.++As Pedro suggested, it's now in a separate PPA with only git-annex and the 220 Haskell packages it depends on.+"""]]
+ doc/forum/What_is_the_best_way_to___34__git_annex_mv__34___file__63__.mdwn view
@@ -0,0 +1,1 @@+Since all the annexed (in indirect mode) files are symlinks to topdir/.git/annex/...   moving files among directories at different levels is not that straightforward since symlinks would get broken.  And since there is not 'annex mv' command -- what is the best way?  (unlock is not the resolution since it copies the file, which might be prohibitively large and inefficient)
+ doc/forum/Windows_usage_instructions.mdwn view
@@ -0,0 +1,25 @@+Having a spot of bother in setting up for windows usage.++I'm attempting to have a windows box syncing to a server (over ssh) and a linux box also syncing against that*++So, on each machine I do++ git init+ git annex init+++On the windows and linux desktops I then do a + + git remote add server serverdetails.++Now the problem is that if I don't add files to the repos on the machines, they won't sync as there is no branch checked out; and if I do then the first one is fine but the second will fail as it doesn't allow fast-forwards. What am I doing wrong? I've tried making the server repo bare / not bare.++I'm using the latest nightly windows build, and a build from git from today (29d5bb94b4512cfe3072c9ff840cb0ce9f2af744)++++++++*Actually I'm trying to do something a little more complex than that, but this is the simplest version I can come up with.
+ doc/forum/clear_box.com_repository.mdwn view
@@ -0,0 +1,1 @@+Using webapp I cannot get rid of box.com repository, it is locked in 'cleaning out' state for more than two weeks. How can I remove the repository from the list?
+ doc/forum/endless_password_prompt_loop.mdwn view
@@ -0,0 +1,8 @@+Hi,++I setup a first repository on local disk, it went fine. Next I tried setting up repo on my nas to clone the files. I installed git-annex on the NAS (it's armel arch) and created the repository via webapp, I entered the password once. Git-annex started syncing the remote repo and after few seconds password pop-up hell broke loose. I was flooded with password-prompt pop-up windows. The synchronization was continuing regardless of correctly/incorrectly entered passwords. What's more, these popups grab the keyboard and you cannot do (appropriate word) with your system.++I checked this topic: http://git-annex.branchable.com/forum/ssh_password/ and ssh config is in place on my computer and on the NAS.++What is causing this and how can I get rid of this?+
+ doc/forum/git-annex_on_Samba_share.mdwn view
@@ -0,0 +1,9 @@+I want to put my photos into a git-annex repository, syncing it with my girlfriends computer and our NAS.+If possible, I'd like to be able to add files to the NAS and have them synced, so I guess a special remote doesn't work here.++Unfortunately, git-annex doesn't run on my NAS directly (yet), so I thought of mounting the NAS with CIFS, and creating an annex there that syncs with the local ones.+While this seems to work fine with one computer, I wonder what will happen if I mount the Samba share on my and my girlfriend's computer at the same time.++In theory, the NAS supports Samba Unix extensions which includes POSIX locking, but a weird bug that prevents you from removing a named pipe from Samba, making git-annex init fail (sent a bug report to Synology). When I disable Unix extensions it works. It then detects a crippled file system though.++Any thoughts?
+ doc/forum/git-annex_teams___47___groups.mdwn view
@@ -0,0 +1,5 @@+Hi,++Does git-annex (preferably assistant) have any management of users / groups or teams? Our use case is we have many users which should only have access to certain folders (repos). Is this a planned feature or any manual way to work around this for now?++Thanks!
+ doc/forum/multiple_routes_to_same_repository.mdwn view
@@ -0,0 +1,2 @@+I am trying to configure the local repo to be connected with remote computer. It can either find this computer on local network using local host name, or go through public IP host where I have ssh tunnel. First confusing thing is, that when setting up remote server, it successfuly establishes connection, but then asks me if the folder should be git or rsync - I believe this step should be skipped if the git repo is already there. Also choosing repository group should be detected from the repo itself.+But the real problem is that I cannot add the public IP repo at all. Is this a known limitation?
+ doc/forum/performance_and_multiple_replication_problems.mdwn view
@@ -0,0 +1,17 @@+Hi,++I just was setting um my git-annex repository and started to sync my whole stuff in it.++Background: I have choosen git-annex to sync my whole stuff (pictures, mp3s, documents, etc) between my pc, notebook and a home-server++My Problems:+1) When I'm starting the git-annex deamon, the "Performing startup scan" message occurs for hours+2) git-annex synchronizes folders from the server which already on my pc, and that every time I restart the deamon on client++My Questions:+For 1) is git-annex when running one repository suitable to manage > 100gb and > 50000 files?+For 2) do I have to wait until every tasks are completed (everything is committed) to get rid of multiple downloads of the same folders/files+3) what is the best schema to sync between >2 devices should I use a Mesh or Star Schema (where my server is in the middle)++Thank You in advance!+Regards J
doc/git-annex.mdwn view
@@ -274,7 +274,7 @@   set when using initremote. For example, to add a new gpg key to the keys   that can access an encrypted remote: -	git annex initremote mys3 encryption=friend@example.com+	git annex enableremote mys3 encryption=friend@example.com  * trust [repository ...] @@ -311,6 +311,10 @@   When run with an expression, configures the content that is preferred   to be held in the archive. See PREFERRED CONTENT below. +  For example:++	git annex content . "include(*.mp3) or include(*.ogg)"+   Without an expression, displays the current preferred content setting   of the repository. @@ -618,6 +622,10 @@    Show debug messages. +* --no-debug++  Disable debug messages.+ * --from=repository    Specifies a repository that content will be retrieved from, or that@@ -898,6 +906,10 @@    Set to false to prevent the git-annex assistant from automatically   committing changes to files in the repository.++* `annex.debug`++  Set to true to enable debug logging by default.  * `annex.version` 
doc/install/Android.mdwn view
@@ -7,14 +7,14 @@ First, ensure your Android device is configured to allow installation of the app. Go to Setup -&gt; Security, and enable "Unknown Sources". -[Download the git-annex.apk](http://downloads.kitenet.net/git-annex/android/current/)+[Download the git-annex.apk](https://downloads.kitenet.net/git-annex/android/current/) onto your Android device, and open it to install.  ## autobuilds  A daily build is also available. -* [download apk](http://downloads.kitenet.net/git-annex/autobuild/android/git-annex.apk) ([build logs](http://downloads.kitenet.net/git-annex/autobuild/android/))+* [download apk](https://downloads.kitenet.net/git-annex/autobuild/android/git-annex.apk) ([build logs](https://downloads.kitenet.net/git-annex/autobuild/android/))  ## building it yourself 
+ doc/install/Android/comment_1_f9ced494a530e6ae3e76cfbaddb89f5d._comment view
@@ -0,0 +1,8 @@+[[!comment format=mdwn+ username="http://josh.easyid.net/"+ ip="208.100.171.144"+ subject="Minimum version of Android?"+ date="2013-06-18T22:05:02Z"+ content="""+Does this require 4.x?+"""]]
+ doc/install/Android/comment_2_74cccae04ea23a8600069c7e658143aa._comment view
@@ -0,0 +1,8 @@+[[!comment format=mdwn+ username="http://joeyh.name/"+ ip="4.152.108.193"+ subject="comment 2"+ date="2013-06-25T17:58:57Z"+ content="""+I have not heard of anyone using older than 4.x with success. In particular, several people reported 2.3 doesn't work.+"""]]
doc/install/Linux_standalone.mdwn view
@@ -5,7 +5,7 @@ This tarball should work on most Linux systems. It does not depend on anything except for glibc. -[download tarball](http://downloads.kitenet.net/git-annex/linux/current/)+[download tarball](https://downloads.kitenet.net/git-annex/linux/current/)  To use, just unpack the tarball, `cd git-annex.linux` and run `./runshell` -- this sets up an environment where you can use `git annex`, as well@@ -22,8 +22,8 @@  A daily build is also available. -* i386: [download tarball](http://downloads.kitenet.net/git-annex/autobuild/i386/git-annex-standalone-i386.tar.gz) ([build logs](http://downloads.kitenet.net/git-annex/autobuild/i386/))-* amd64: [download tarball](http://downloads.kitenet.net/git-annex/autobuild/amd64/git-annex-standalone-amd64.tar.gz) ([build logs](http://downloads.kitenet.net/git-annex/autobuild/amd64/))+* i386: [download tarball](https://downloads.kitenet.net/git-annex/autobuild/i386/git-annex-standalone-i386.tar.gz) ([build logs](https://downloads.kitenet.net/git-annex/autobuild/i386/))+* amd64: [download tarball](https://downloads.kitenet.net/git-annex/autobuild/amd64/git-annex-standalone-amd64.tar.gz) ([build logs](https://downloads.kitenet.net/git-annex/autobuild/amd64/))  ## gitannex-install 
doc/install/OSX.mdwn view
@@ -2,7 +2,7 @@  [[!img /assistant/osx-app.png align=right link=/assistant]] For easy installation, use the-[beta release of git-annex.app](http://downloads.kitenet.net/git-annex/OSX/current/).+[beta release of git-annex.app](https://downloads.kitenet.net/git-annex/OSX/current/).  Be sure to select the build matching your version of OSX. @@ -30,7 +30,7 @@  [[Joey]] autobuilds the app for Mountain Lion. -* [autobuild of git-annex.app](http://downloads.kitenet.net/git-annex/autobuild/x86_64-apple-mountain-lion/git-annex.dmg.bz2) ([build logs](http://downloads.kitenet.net/git-annex/autobuild/x86_64-apple-mountain-lion/))+* [autobuild of git-annex.app](https://downloads.kitenet.net/git-annex/autobuild/x86_64-apple-mountain-lion/git-annex.dmg.bz2) ([build logs](https://downloads.kitenet.net/git-annex/autobuild/x86_64-apple-mountain-lion/))  ## using Brew @@ -40,8 +40,10 @@ brew link libxml2 cabal update PATH=$HOME/bin:$PATH+PATH=$HOME/.cabal/bin:$PATH+cabal install c2hs --bindir=$HOME/bin cabal install gnuidn-cabal install c2hs git-annex --bindir=$HOME/bin+cabal install git-annex --bindir=$HOME/bin </pre>  ## using MacPorts
+ doc/install/OSX/comment_20_3e6a3c00444badf2cf7a9ee3d54af11e._comment view
@@ -0,0 +1,8 @@+[[!comment format=mdwn+ username="https://www.google.com/accounts/o8/id?id=AItOawnEgT3Gxm4AAK4zu3ft5-PsUmY6dr1F-gE"+ nickname="David"+ subject="OSX app bundle"+ date="2013-06-05T17:35:49Z"+ content="""+I'm using the annex assistant from the annex bundle for the convenience, but sometimes I use git-annex directly from the command line. I have /Applications/git-annex.app/Contents/MacOS/ in my path, but is there any way you could build the app bundle with the manpage in there so I could add it to my MANPATH?  +"""]]
doc/install/ScientificLinux5.mdwn view
@@ -1,3 +1,5 @@+For SL6/CentOS6 install the EPEL repo and yum install git-annex. + I was waiting for my backups to be done hence this article, as I was using _git-annex_ to manage my files and I decided I needed to have git-annex on a SL5 based machine. SL5 is just an opensource
doc/install/Ubuntu.mdwn view
@@ -1,14 +1,7 @@-## Saucy--	sudo apt-get install git-annex--## Raring+## Saucy, Raring  	sudo apt-get install git-annex -Note: This version does not have the WebApp enabled (see [here](https://bugs.launchpad.net/ubuntu/+source/git-annex/+bug/1084693)), but is otherwise-usable.- ## Precise  	sudo apt-get install git-annex@@ -18,12 +11,12 @@  ## Precise PPA -<https://launchpad.net/~fmarier/+archive/ppa>+<https://launchpad.net/~fmarier/+archive/git-annex>  A newer version of git-annex, including the [[assistant]] and WebApp. (Maintained by François Marier) -	sudo add-apt-repository ppa:fmarier/ppa+	sudo add-apt-repository ppa:fmarier/git-annex 	sudo apt-get update 	sudo apt-get install git-annex 
+ doc/install/Ubuntu/comment_3_a08817322739b03cf0fec97283b16f1a._comment view
@@ -0,0 +1,8 @@+[[!comment format=mdwn+ username="https://openid.fmarier.org/"+ nickname="fmarier"+ subject="New PPA only contains git-annex"+ date="2013-06-15T07:45:13Z"+ content="""+As Pedro suggested, I've moved my git-annex backport to a separate PPA with only git-annex and the 220 Haskell packages it depends on.+"""]]
doc/install/Windows.mdwn view
@@ -1,7 +1,7 @@ git-annex has recently been ported to Windows!  * First, [install git](http://git-scm.com/downloads)-* Then, [install git-annex](http://downloads.kitenet.net/git-annex/windows/current/)+* Then, [install git-annex](https://downloads.kitenet.net/git-annex/windows/current/)  This port is in an early state. While it works well enough to use git-annex, many things will not work. See [[todo/windows_support]] for
+ doc/install/cabal/comment_7_129c4f2e404c874e5adfa52902a81104._comment view
@@ -0,0 +1,22 @@+[[!comment format=mdwn+ username="krig"+ ip="46.194.28.123"+ subject="Could not resolve dependencies for yesod"+ date="2013-06-25T06:14:18Z"+ content="""+I'm having problems installing from cabal, and it seems related to yesod. I found an older discussion on something similar, where a constraint to require a newer version of yesod had been added, but I haven't figured out what was done to solve it.++The problem seems to be that git-annex requires yesod < 1.2, but cabal is unable to install an older version.++    $ cabal install git-annex --bindir=$HOME/bin+    Resolving dependencies...+    cabal: Could not resolve dependencies:+    trying: git-annex-4.20130601+    trying: git-annex-4.20130601:+webapp+    rejecting: yesod-1.2.1.1, 1.2.1, 1.2.0.1, 1.2.0 (conflict:+    git-annex-4.20130601:webapp => yesod(<1.2))+    trying: yesod-1.1.9.3+    $++From what I can tell, the problem is fixed in github master since yesod >= 1.2 is supported again.+"""]]
+ doc/install/cabal/comment_8_738c108f131e3aab0d720bc4fd6a81fd._comment view
@@ -0,0 +1,8 @@+[[!comment format=mdwn+ username="http://joeyh.name/"+ ip="4.152.108.193"+ subject="comment 8"+ date="2013-06-25T17:16:46Z"+ content="""+git-annex 4.20130621 once again builds with the current version of yesod.+"""]]
doc/links/other_stuff.mdwn view
@@ -1,6 +1,7 @@ ### other stuff  * [[testimonials]]+* [[privacy]] * [[what git annex is not|not]] * [[related_software]] * [[sitemap]]
− doc/news/version_4.20130417.mdwn
@@ -1,44 +0,0 @@-git-annex 4.20130417 released with [[!toggle text="these changes"]]-[[!toggleable text="""-   * initremote: Generates encryption keys with high quality entropy.-     This can be disabled using --fast to get the old behavior.-     The assistant still uses low-quality entropy when creating encrypted-     remotes, to avoid delays. (Thanks, guilhem for the patch.)-   * Bugfix: Direct mode no longer repeatedly checksums duplicated files.-   * assistant: Work around horrible, terrible, very bad behavior of-     gnome-keyring, by not storing special-purpose ssh keys in ~/.ssh/*.pub.-     Apparently gnome-keyring apparently will load and indiscriminately use-     such keys in some cases, even if they are not using any of the standard-     ssh key names. Instead store the keys in ~/.ssh/annex/,-     which gnome-keyring will not check.-   * addurl: Bugfix: Did not properly add file in direct mode.-   * assistant: Bug fix to avoid annexing the files that git uses-     to stand in for symlinks on FAT and other filesystem not supporting-     symlinks.-   * Adjust preferred content expressions so that content in archive-     directories is preferred until it has reached an archive or smallarchive-     repository.-   * webapp: New --listen= option allows running the webapp on one computer-     and connecting to it from another. (Note: Does not yet use HTTPS.)-   * Added annex.web-download-command setting.-   * Added per-remote annex-rsync-transport option. (guilhem again)-   * Ssh connection caching is now also used by rsync special remotes.-     (guilhem yet again)-   * The version number is now derived from git, unless built with-     VERSION\_FROM\_CHANGELOG.-   * assistant: Stop any transfers the assistant initiated on shutdown.-   * assistant: Added sequence numbers to XMPP git push packets. (Not yet used.)-   * addurl: Register transfer so the webapp can see it.-   * addurl: Automatically retry downloads that fail, as long as some-     additional content was downloaded.-   * webapp: Much improved progress bar display for downloads from encrypted-     remotes.-   * Avoid using runghc, as that needs ghci.-   * webapp: When a repository's group is changed, rescan for transfers.-   * webapp: Added animations.-   * webapp: Include the repository directory in the mangled hostname and-     ssh key name, so that a locked down ssh key for one repository is not-     re-used when setting up additional repositories on the same server.-   * Fall back to internal url downloader when built without curl.-   * fsck: Check content of direct mode files (only when the inode cache-     thinks they are unmodified)."""]]
+ doc/news/version_4.20130621.mdwn view
@@ -0,0 +1,40 @@+git-annex 4.20130621 released with [[!toggle text="these changes"]]+[[!toggleable text="""+   * Supports indirect mode on encfs in paranoia mode, and other+     filesystems that do not support hard links, but do support+     symlinks and other POSIX filesystem features.+   * Android: Add .thumbnails to .gitignore when setting up a camera+     repository.+   * Android: Make the "Open webapp" menu item open the just created+     repository when a new repo is made.+   * webapp: When the user switches to display a different repository,+     that repository becomes the default repository to be displayed next time+     the webapp gets started.+   * glacier: Better handling of the glacier inventory, which avoids+     duplicate uploads to the same glacier repository by `git annex copy`.+   * Direct mode: No longer temporarily remove write permission bit of files+     when adding them.+   * sync: Better support for bare git remotes. Now pushes directly to the+     master branch on such a remote, instead of to synced/master. This+     makes it easier to clone from a bare git remote that has been populated+     with git annex sync or by the assistant.+   * Android: Fix use of cp command to not try to use features present+     only on build system.+   * Windows: Fix hang when adding several files at once.+   * assistant: In direct mode, objects are now only dropped when all+     associated files are unwanted. This avoids a repreated drop/get loop+     of a file that has a copy in an archive directory, and a copy not in an+     archive directory. (Indirect mode still has some buggy behavior in this+     area, since it does not keep track of associated files.)+     Closes: #[712060](http://bugs.debian.org/712060)+   * status: No longer shows dead repositories.+   * annex.debug can now be set to enable debug logging by default.+     The webapp's debugging check box does this.+   * fsck: Avoid getting confused by Windows path separators+   * Windows: Multiple bug fixes, including fixing the data written to the+     git-annex branch.+   * Windows: The test suite now passes on Windows (a few broken parts are+     disabled).+   * assistant: On Linux, the expensive transfer scan is run niced.+   * Enable assistant and WebDAV support on powerpc and sparc architectures,+     which now have the necessary dependencies built."""]]
+ doc/privacy.mdwn view
@@ -0,0 +1,47 @@+git-annex users entrust it with data that is often intensively private.+Here's some things to know about how to maintain your privacy while using+git-annex.++## browsing this web site++This website supports https. [Use it.](https://git-annex.branchable.com/privacy/)++## repository contents++In general, anyone who can clone a git repository gets the ability to see+all current and past filenames in the repository, and their contents.+It's best to assume this also holds true for git-annex, as a general rule.++There are some obvious exceptions: If you `git annex dropunused` old+content from all your repositories, then it's *gone*. If you `git annex+move` files to a offline drive then only those with physical access can see+their content. (The names of the files are still visible to anyone with a+clone of the repository.)++git-annex can encrypt data stored in special remotes. This allows you to+store files in the cloud without exposing their file names, or their+contents. See [[design/encryption]] for details.++When using the shared enctyption method, the encryption key gets stored+in git, and so anyone who has a clone of your repository can decrypt files+from the encrypted special remote.++When using encryption with a GPG key or keys, only those with access to the+GPG key can decrypt the content of files stored in an encrypted special+remote.++## bug reporting++When you file a [[bug]] report on git-annex, you may need to provide+debugging output or details about your repository. In general, git-annex+does not sanitize `--debug` output at all, so it may include the names of+files or other repository details. You should review any debug or other+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 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.
doc/special_remotes.mdwn view
@@ -29,7 +29,8 @@ * [[Google drive|tips/googledriveannex]] * [[Google Cloud Storage|tips/using_Google_Cloud_Storage]] * [[Mega.co.nz|tips/megaannex]]-* [[SkyDrive|tips/skydrive]]+* [[SkyDrive|tips/skydriveannex]]+* [[OwnCloud|tips/owncloudannex]] * [[Flickr|tips/flickrannex]] * [[IMAP|forum/special_remote_for_IMAP]] * [[Usenet|forum/nntp__47__usenet special remote]]
doc/testimonials.mdwn view
@@ -7,6 +7,8 @@ <script src="//platform.twitter.com/widgets.js" charset="utf-8"></script> <blockquote class="twitter-tweet"><p>I want <a href="https://twitter.com/search/%2523git">#git</a>-annex whereis for all the stuff (not) in my room.</p>&mdash; topr (@derwelle) <a href="https://twitter.com/derwelle/status/172356564072673280" data-datetime="2012-02-22T16:26:21+00:00">February 22, 2012</a></blockquote> <script src="//platform.twitter.com/widgets.js" charset="utf-8"></script>+<blockquote class="twitter-tweet"><p>Git-annex now auto-syncing photos from my android phone to a Tor hidden SSH service I control (via <a href="https://twitter.com/guardianproject">@guardianproject</a>&#39;s Orbot) <a href="https://twitter.com/search?q=%23prismbreak&amp;src=hash">#prismbreak</a></p>&mdash; Richard King (@graphiclunarkid) <a href="https://twitter.com/graphiclunarkid/statuses/347658443479449601">June 20, 2013</a></blockquote>+<script src="//platform.twitter.com/widgets.js" charset="utf-8"></script> </div>  <blockquote>@@ -28,3 +30,5 @@ possible. It works perfectly for me, not a surprise since I wrote it, but still, it's a different level of "perfect" than anything I could put together before. --[[Joey]]++See also: [[design/assistant/blog/day_288__success_stories]]
+ doc/tips/Delay_Assistant_Startup_on_Login.mdwn view
@@ -0,0 +1,13 @@+# Problem+I noticed that after installing git-annex assistant, my start up times greatly increased because the assistant does a startup scan while everything else is loading.+# Solution (for people using Gnome)+The solution I came up with is to delay the assistant's startup, as well as setting its IO priority as idle. To do this in Gnome 3, run:++    gnome-session-properties+Find the "Git Annex Assistant" entry in the Startup Programs tab, then click edit. Change this:++    /usr/local/bin/git-annex assistant --autostart (your location of git-annex may be different)+to this:++    bash -c "sleep 30; ionice -c3 /usr/local/bin/git-annex assistant --autostart" (replace /usr/local/bin to wherever git-annex is installed)+The "sleep 30" command delays the startup of the assistant by 30 seconds, and "ionice -c3" sets git-annex's IO priority to "idle," the lowest level.
+ doc/tips/flickrannex/comment_10_50707f259abe5829ce075dfbecd5a4ba._comment view
@@ -0,0 +1,13 @@+[[!comment format=mdwn+ username="https://www.google.com/accounts/o8/id?id=AItOawmkBwMWvNKZZCge_YqobCSILPMeK6xbFw8"+ nickname="develop"+ subject="comment 10"+ date="2013-06-07T09:39:59Z"+ content="""+I'm not even sure if chunksize is exposed to the hooks at all.++As it is, the hook will check the filesize, and if the filesize is more than 30mbyte it will exit 1.++Chunking may be implemented down the road. I do believe joeyh might have some plans that will touch this issue, so I'd rather wait. Than re-invent the wheel yet again.++"""]]
+ doc/tips/flickrannex/comment_2_d74c4fc7edf8e47f7482564ce0ef4d12._comment view
@@ -0,0 +1,10 @@+[[!comment format=mdwn+ username="https://www.google.com/accounts/o8/id?id=AItOawmkBwMWvNKZZCge_YqobCSILPMeK6xbFw8"+ nickname="develop"+ subject="comment 2"+ date="2013-06-05T21:33:42Z"+ content="""+Get the statically linked version from here http://git-annex.branchable.com/install/Linux_standalone/++I believe the new hook format was introduced in version 4.20130521+"""]]
+ doc/tips/flickrannex/comment_2_f53d0d5520e2835e9705bea4e75556f0._comment view
@@ -0,0 +1,30 @@+[[!comment format=mdwn+ username="https://www.google.com/accounts/o8/id?id=AItOawnaH44G3QbxBAYyDwy0PbvL0ls60XoaR3Y"+ nickname="Nigel"+ subject="missing configuration for flickr-checkpresent-hook"+ date="2013-06-05T20:44:25Z"+ content="""+<https://github.com/TobiasTheViking/flickrannex/issues/3>++9 days ago: [the annex] \"hook format a few versions ago, and this is using the new hook format\".++Looks very handy. I am just starting with this, but can't seem to get it working as a remote after following the simple walkthrough. All goes well until:++    $ git annex copy . --to flickr+    copy walkthrough.sh (checking flickr...) +      missing configuration for flickr-checkpresent-hook+    git-annex: checkpresent hook misconfigured++my Ubuntu 12.04:++    $ git annex version+    git-annex version: 4.20130516.1+    build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP+    local repository version: 3+    default repository version: 3+    supported repository versions: 3 4+    upgrade supported from repository versions: 0 1 2++I guess my \"git-annex version is still too old\"? Any idea what version is needed? Even better if I can figure out which Linux distribution/release has the most up to date version of annex.++"""]]
+ doc/tips/flickrannex/comment_4_9ebba4d61140f6c2071e988c9328cf7e._comment view
@@ -0,0 +1,14 @@+[[!comment format=mdwn+ username="https://www.google.com/accounts/o8/id?id=AItOawmkBwMWvNKZZCge_YqobCSILPMeK6xbFw8"+ nickname="develop"+ subject="comment 4"+ date="2013-06-05T22:02:29Z"+ content="""+The path for the binary \"/usr/bin/python2\" is wrong.++It could be any of /usr/bin/python /usr/bin/python2.6 /usr/bin/python2.7++Or maybe in /usr/local/bin++you can try running \"which python\" or \"which python2\" to get the real path.+"""]]
+ doc/tips/flickrannex/comment_5_4470dae270613dd8712623474bc80ab0._comment view
@@ -0,0 +1,24 @@+[[!comment format=mdwn+ username="https://www.google.com/accounts/o8/id?id=AItOawnaH44G3QbxBAYyDwy0PbvL0ls60XoaR3Y"+ nickname="Nigel"+ subject="missing configuration for flickr-checkpresent-hook"+ date="2013-06-05T22:00:48Z"+ content="""+Many thanks.++I used gitannex-install and was left with a slight anomaly:++    Installing...........done+    git-annex version 4.20130601 has been installed+    $ git-annex version+    git-annex version: 4.20130531-g5df09b5++But I guess this includes the new hook format.  I get a bit further:++    $ git annex copy . --to flickr+    copy walkthrough.sh (checking flickr...) (user error (sh [\"-c\",\"/usr/bin/python2 /home/nrb/repos/gits/flickrannex/flickrannex.py\"] exited 1)) failed+    copy walkthrough.sh~ (checking flickr...) (user error (sh [\"-c\",\"/usr/bin/python2 /home/nrb/repos/gits/flickrannex/flickrannex.py\"] exited 1)) failed+    git-annex: copy: 2 failed+++"""]]
+ doc/tips/flickrannex/comment_5_d395cdcf815cb430e374ff05c1a63ff4._comment view
@@ -0,0 +1,17 @@+[[!comment format=mdwn+ username="https://www.google.com/accounts/o8/id?id=AItOawnaH44G3QbxBAYyDwy0PbvL0ls60XoaR3Y"+ nickname="Nigel"+ subject="comment 5"+ date="2013-06-05T22:11:14Z"+ content="""+Thanks, but on my machine I get:++    $ which python2+    /usr/bin/python2++I have scripted all my walkthrough commands, blowing away the test repositories and flickr settings first each time.  This re-runs the flickr scripts and git config annex.flickr-hook etc.++I can't spot anything here.+++"""]]
+ doc/tips/flickrannex/comment_6_8cf730097001ffe106f2c743edce9d0a._comment view
@@ -0,0 +1,12 @@+[[!comment format=mdwn+ username="https://www.google.com/accounts/o8/id?id=AItOawmWg4VvDTer9f49Y3z-R0AH16P4d1ygotA"+ nickname="Tobias"+ subject="comment 6"+ date="2013-06-06T09:44:11Z"+ content="""+That's weird...++You could try adding \"--dbglevel 1 --stderr\" arguments to the hook command and give me the output. But the way i read the log it seems like it doesn't even launch the python intrepreter. I might be wrong though.+++"""]]
+ doc/tips/flickrannex/comment_7_a80c8087c4e1562a4c98a24edc182e5a._comment view
@@ -0,0 +1,12 @@+[[!comment format=mdwn+ username="https://www.google.com/accounts/o8/id?id=AItOawnaH44G3QbxBAYyDwy0PbvL0ls60XoaR3Y"+ nickname="Nigel"+ subject="Unencrypted flickr can only accept picture and video files"+ date="2013-06-06T10:24:58Z"+ content="""+Thanks and sorry to trouble you, it is my error, I picked unencrypted option (thinking it would be less of an issue) and am using a text file for test, gave an error line:++    10:53:07 [flickrannex-0.1.5] main : 'Unencrypted flickr can only accept picture and video files'++I've not looked through your code yet, but could that message be printed when not in debug mode?+"""]]
+ doc/tips/flickrannex/comment_8_94f84254c32cf0f7dd1441b7da5d2bc6._comment view
@@ -0,0 +1,8 @@+[[!comment format=mdwn+ username="https://www.google.com/accounts/o8/id?id=AItOawmWg4VvDTer9f49Y3z-R0AH16P4d1ygotA"+ nickname="Tobias"+ subject="comment 8"+ date="2013-06-06T10:51:39Z"+ content="""+I'll make it so, in the next version i push.+"""]]
+ doc/tips/flickrannex/comment_9_5299b4cab4a4cb8e8fd4d2b39f0ea59c._comment view
@@ -0,0 +1,9 @@+[[!comment format=mdwn+ username="https://www.google.com/accounts/o8/id?id=AItOawleVyKk2kQsB_HgEdS7w1s0BmgRGy1aay0"+ nickname="Milan"+ subject="chunksize"+ date="2013-06-07T09:09:56Z"+ content="""+Hi! Does this backend support chunksize option? If yes, is it possible to set it after the remote has been added to the repository?+Thanks, Milan.+"""]]
doc/tips/setup_a_public_repository_on_a_web_site.mdwn view
@@ -3,7 +3,7 @@ use git-annex to manage those files. And as an added bonus, why not let anyone in the world clone your site and use `git-annex get`! -My site like this is [downloads.kitenet.net](http://downloads.kitenet.net).+My site like this is [downloads.kitenet.net](https://downloads.kitenet.net). Here's how I set it up. --[[Joey]]  1. Set up a web site. I used Apache, and configured it to follow symlinks.@@ -19,7 +19,7 @@ 6. Make sure users can still download files from the site directly. 7. Instruct advanced users to clone a http url that ends with the "/.git/"    directory. For example, for downloads.kitenet.net, the clone url-   is `http://downloads.kitenet.net/.git/`+   is `https://downloads.kitenet.net/.git/`  When users clone over http, and run git-annex, it will automatically learn all about your repository and be able to download files
+ doc/todo/Move_ssh_config_to___126____47__ssh__47__git-annex__47__config.mdwn view
@@ -0,0 +1,7 @@+### Please describe the problem.+Instead of storing config for each remote in ~/.ssh/config, which mixes the user own config with that of git-annex-assistant, which is irritating if (like me) you store your ssh config in a vcs. Since the option -F allows the choice of the config file, it should be possible to move the config into ~/.ssh/git-annex/config. The only issue I see is according to the ssh man page on my system states that the system-wide config is ignored if a config file is specified on the command line.++### What version of git-annex are you using? On what operating system?+I'm using git-annex 4.20130601 on a Debian Testing/Unstable/Experimental mix.++[[!tag design/assistant]]
doc/todo/windows_support.mdwn view
@@ -7,7 +7,8 @@ * Does not work with Cygwin's build of git (that git does not consistently   support use of DOS style paths, which git-annex uses on Windows).    Must use the upstream build of git for Windows.-* test suite doesn't work+* Test suite works and passes, but 6 tests are disabled due to failing.+* Directory and rsync special remotes are known buggy. * Bad file locking, it's probably not safe to run more than one git-annex   process at the same time on Windows. * No support for the assistant or webapp.
+ doc/todo/wishlist:_Add_to_Android_version_to_Google_Play.mdwn view
@@ -0,0 +1,9 @@+If possible a frequently updated daily build in separate package for those more adventurous of us.++It would make installing and testing much easier and no need to change configuration settings to allow untrusted source.++> While it's vaid to wish that someone might put the apk into Google Play,+> I a) don't feel it's ready b) don't know if I want to go through+> the rigamarole required to use that service and c) don't feel this+> bug tracker is an appropriate place to track what is effectively a+> nontechnical request. [[done]] --[[Joey]] 
+ doc/todo/wishlist:_Have_a_preview_of_download_or_upload_size.mdwn view
@@ -0,0 +1,7 @@+When using SSH remote repository, git-annex uses rsync to download or upload files one at a time. I would like to have a preview of the overall transfer size so that I can estimate the transfer duration.++This could be done as an option of get, move or copy, or as a separated command.++If part of get, move or copy, git-annex could print how much has been done or how much left between every files.++Thanks.
doc/videos/git-annex_assistant_archiving.mdwn view
@@ -1,5 +1,5 @@ <video controls width=400>-<source src="http://downloads.kitenet.net/videos/git-annex/git-annex-assistant-archiving.ogv">+<source src="https://downloads.kitenet.net/videos/git-annex/git-annex-assistant-archiving.ogv"> </video><br>-A <a href="http://downloads.kitenet.net/videos/git-annex/git-annex-assistant-archiving.ogv">9 minute screencast</a>+A <a href="https://downloads.kitenet.net/videos/git-annex/git-annex-assistant-archiving.ogv">9 minute screencast</a> covering archiving your files with the [[git-annex assistant|/assistant]]</a>.
doc/videos/git-annex_assistant_introduction.mdwn view
@@ -1,5 +1,5 @@ <video controls width=400>-<source src="http://downloads.kitenet.net/videos/git-annex/git-annex-assistant-intro.ogv">+<source src="https://downloads.kitenet.net/videos/git-annex/git-annex-assistant-intro.ogv"> </video><br>-A <a href="http://downloads.kitenet.net/videos/git-annex/git-annex-assistant-intro.ogv">8 minute screencast</a>+A <a href="https://downloads.kitenet.net/videos/git-annex/git-annex-assistant-intro.ogv">8 minute screencast</a> introducing the [[git-annex assistant|/assistant]]</a>.
doc/videos/git-annex_assistant_remote_sharing.mdwn view
@@ -1,6 +1,6 @@ <video controls width=400>-<source src="http://downloads.kitenet.net/videos/git-annex/git-annex-xmpp-pairing.ogv">+<source src="https://downloads.kitenet.net/videos/git-annex/git-annex-xmpp-pairing.ogv"> </video><br>-A <a href="http://downloads.kitenet.net/videos/git-annex/git-annex-xmpp-pairing.ogv">6 minute screencast</a>+A <a href="https://downloads.kitenet.net/videos/git-annex/git-annex-xmpp-pairing.ogv">6 minute screencast</a> showing how to share files between your computers in different locations, such as home and work.
git-annex.1 view
@@ -251,7 +251,7 @@ set when using initremote. For example, to add a new gpg key to the keys that can access an encrypted remote: .IP- git annex initremote mys3 encryption=friend@example.com+ git annex enableremote mys3 encryption=friend@example.com .IP .IP "trust [repository ...]" Records that a repository is trusted to not unexpectedly lose@@ -281,6 +281,10 @@ When run with an expression, configures the content that is preferred to be held in the archive. See PREFERRED CONTENT below. .IP+For example:+.IP+ git annex content . "include(*.mp3) or include(*.ogg)"+.IP Without an expression, displays the current preferred content setting of the repository. .IP@@ -554,6 +558,9 @@ .IP "\-\-debug" Show debug messages. .IP+.IP "\-\-no\-debug"+Disable debug messages.+.IP .IP "\-\-from=repository" Specifies a repository that content will be retrieved from, or that should otherwise be acted on.@@ -796,6 +803,9 @@ .IP "annex.autocommit" Set to false to prevent the git\-annex assistant from automatically committing changes to files in the repository.+.IP+.IP "annex.debug"+Set to true to enable debug logging by default. .IP .IP "annex.version" Automatically maintained, and used to automate upgrades between versions.
git-annex.cabal view
@@ -1,7 +1,7 @@ Name: git-annex-Version: 4.20130601+Version: 4.20130627 Cabal-Version: >= 1.8-License: GPL+License: GPL-3 Maintainer: Joey Hess <joey@kitenet.net> Author: Joey Hess Stability: Stable@@ -133,7 +133,7 @@    if flag(Webapp)     Build-Depends:-     yesod (< 1.2), yesod-default (< 1.2), yesod-static (< 1.2), yesod-form (< 1.3),+     yesod, yesod-default, yesod-static, yesod-form, yesod-core,      case-insensitive, http-types, transformers, wai, wai-logger, warp,      blaze-builder, crypto-api, hamlet, clientsession, aeson,      template-haskell, data-default
standalone/android/evilsplicer-headers.hs view
@@ -7,6 +7,7 @@  -} import qualified Data.Monoid import qualified Data.Map+import qualified Data.Map as Data.Map.Base import qualified Data.Foldable import qualified Data.Text import qualified Data.Text.Lazy.Builder
− standalone/android/start

binary file changed (6874 → absent bytes)

standalone/windows/build.sh view
@@ -17,7 +17,7 @@ 	PATH="$PATH:/c/cygwin/bin" "$@" } -# Don't allow build artifact from a past successfuly build to be extracted+# Don't allow build artifact from a past successful build to be extracted # if we fail. rm -f git-annex-installer.exe