packages feed

git-annex 4.20130909 → 4.20130920

raw patch · 1994 files changed

+6292/−56278 lines, 1994 filesdep +cryptohash

Dependencies added: cryptohash

This diff is very large; some files are shown as “too large to diff”. Download the raw patch for the complete diff.

Files

Annex/CatFile.hs view
@@ -8,6 +8,7 @@ module Annex.CatFile ( 	catFile, 	catObject,+	catTree, 	catObjectDetails, 	catFileHandle, 	catKey,@@ -17,6 +18,7 @@  import qualified Data.ByteString.Lazy as L import qualified Data.Map as M+import System.PosixCompat.Types  import Common.Annex import qualified Git@@ -24,6 +26,7 @@ import qualified Annex import Git.Types import Git.FilePath+import Git.FileMode  catFile :: Git.Branch -> FilePath -> Annex L.ByteString catFile branch file = do@@ -35,6 +38,11 @@ 	h <- catFileHandle 	liftIO $ Git.CatFile.catObject h ref +catTree :: Git.Ref -> Annex [(FilePath, FileMode)]+catTree ref = do+	h <- catFileHandle+	liftIO $ Git.CatFile.catTree h ref+ catObjectDetails :: Git.Ref -> Annex (Maybe (L.ByteString, Sha)) catObjectDetails ref = do 	h <- catFileHandle@@ -55,14 +63,50 @@ 			Annex.changeState $ \s -> s { Annex.catfilehandles = m' } 			return h -{- From the Sha or Ref of a symlink back to the key. -}-catKey :: Ref -> Annex (Maybe Key)-catKey ref = do-	l <- fromInternalGitPath . encodeW8 . L.unpack <$> catObject ref-	return $ if isLinkToAnnex l-		then fileKey $ takeFileName l-		else Nothing+{- From the Sha or Ref of a symlink back to the key.+ -+ - Requires a mode witness, to guarantee that the file is a symlink.+ -}+catKey :: Ref -> FileMode -> Annex (Maybe Key)+catKey = catKey' True +catKey' :: Bool -> Ref -> FileMode -> Annex (Maybe Key)+catKey' modeguaranteed ref mode+	| isSymLink mode = do+		l <- fromInternalGitPath . encodeW8 . L.unpack <$> get+		return $ if isLinkToAnnex l+			then fileKey $ takeFileName l+			else Nothing+	| otherwise = return Nothing+  where+  	-- If the mode is not guaranteed to be correct, avoid+	-- buffering the whole file content, which might be large.+	-- 8192 is enough if it really is a symlink.+  	get+		| modeguaranteed = catObject ref+		| otherwise = L.take 8192 <$> catObject ref++{- Looks up the file mode corresponding to the Ref using the running+ - cat-file.+ -+ - Currently this always has to look in HEAD, because cat-file --batch+ - does not offer a way to specify that we want to look up a tree object+ - in the index. So if the index has a file staged not as a symlink,+ - and it is a symlink in head, the wrong mode is gotten.+ - Also, we have to assume the file is a symlink if it's not yet committed+ - to HEAD. For these reasons, modeguaranteed is not set.+ -}+catKeyChecked :: Bool -> Ref -> Annex (Maybe Key)+catKeyChecked needhead ref@(Ref r) =+	catKey' False ref =<< findmode <$> catTree treeref+  where+  	pathparts = split "/" r+	dir = intercalate "/" $ take (length pathparts - 1) pathparts+	file = fromMaybe "" $ lastMaybe pathparts+	treeref = Ref $ if needhead then "HEAD" ++ dir ++ "/" else dir ++ "/"+	findmode = fromMaybe symLinkMode . headMaybe .+		 map snd . filter (\p -> fst p == file)+ {- From a file in the repository back to the key.  -  - Prefixing the file with ./ makes this work even if in a subdirectory@@ -76,7 +120,8 @@  -  - For command-line git-annex use, that doesn't matter. It's perfectly  - reasonable for things staged in the index after the currently running- - git-annex process to not be noticed by it.+ - git-annex process to not be noticed by it. However, we do want to see+ - what's in the index, since it may have uncommitted changes not in HEAD>  -  - For the assistant, this is much more of a problem, since it commits  - files and then needs to be able to immediately look up their keys.@@ -89,8 +134,8 @@ catKeyFile :: FilePath -> Annex (Maybe Key) catKeyFile f = ifM (Annex.getState Annex.daemon) 	( catKeyFileHEAD f-	, catKey $ Ref $ ":./" ++ f+	, catKeyChecked True (Ref $ ":./" ++ f) 	)  catKeyFileHEAD :: FilePath -> Annex (Maybe Key)-catKeyFileHEAD f = catKey $ Ref $ "HEAD:./" ++ f+catKeyFileHEAD f = catKeyChecked False (Ref $ "HEAD:./" ++ f)
Annex/CheckIgnore.hs view
@@ -25,7 +25,7 @@ checkIgnoreHandle = maybe startup return =<< Annex.getState Annex.checkignorehandle   where 	startup = do-		v <- inRepo $ Git.checkIgnoreStart+		v <- inRepo Git.checkIgnoreStart 		when (isNothing v) $ 			warning "The installed version of git is too old for .gitignores to be honored by git-annex." 		Annex.changeState $ \s -> s { Annex.checkignorehandle = Just v }
Annex/Content.hs view
@@ -275,7 +275,7 @@ 		thawContentDir =<< calcRepo (gitAnnexLocation key) 		thawContent src 		v <- isAnnexLink f-		if (Just key == v)+		if Just key == v 			then do 				updateInodeCache key src 				replaceFile f $ liftIO . moveFile src
Annex/Content/Direct.hs view
@@ -199,7 +199,7 @@ addContentWhenNotPresent :: Key -> FilePath -> FilePath -> Annex () addContentWhenNotPresent key contentfile associatedfile = do 	v <- isAnnexLink associatedfile-	when (Just key == v) $ do+	when (Just key == v) $ 		replaceFile associatedfile $ 			liftIO . void . copyFileExternal contentfile 	updateInodeCache key associatedfile	
Annex/Direct.hs view
@@ -15,7 +15,6 @@ import Git.Sha import Git.Types import Annex.CatFile-import Utility.FileMode import qualified Annex.Queue import Logs.Location import Backend@@ -45,8 +44,8 @@ 	{- Determine what kind of modified or deleted file this is, as 	 - efficiently as we can, by getting any key that's associated 	 - with it in git, as well as its stat info. -}-	go (file, Just sha) = do-		shakey <- catKey sha+	go (file, Just sha, Just mode) = do+		shakey <- catKey sha mode 		mstat <- liftIO $ catchMaybeIO $ getSymbolicLinkStatus file 		filekey <- isAnnexLink file 		case (shakey, filekey, mstat, toInodeCache =<< mstat) of@@ -147,10 +146,9 @@ 	  where 		go getsha getmode a araw 			| getsha item == nullSha = noop-			| isSymLink (getmode item) =+			| otherwise = 				maybe (araw f) (\k -> void $ a k f)-					=<< catKey (getsha item)-			| otherwise = araw f+					=<< catKey (getsha item) (getmode item) 		f = DiffTree.file item  	moveout = removeDirect
Annex/Environment.hs view
@@ -32,7 +32,7 @@ checkEnvironment :: Annex () checkEnvironment = do 	gitusername <- fromRepo $ Git.Config.getMaybe "user.name"-	when (gitusername == Nothing || gitusername == Just "") $+	when (isNothing gitusername || gitusername == Just "") $ 		liftIO checkEnvironmentIO  checkEnvironmentIO :: IO ()
Annex/Exception.hs view
@@ -13,6 +13,7 @@ module Annex.Exception ( 	bracketIO, 	tryAnnex,+	tryAnnexIO, 	throwAnnex, 	catchAnnex, ) where@@ -24,11 +25,15 @@  {- 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 = M.bracket (liftIO setup) (liftIO . cleanup) go+bracketIO setup cleanup = M.bracket (liftIO setup) (liftIO . cleanup)  {- try in the Annex monad -} tryAnnex :: Annex a -> Annex (Either SomeException a) tryAnnex = M.try++{- try in the Annex monad, but only catching IO exceptions -}+tryAnnexIO :: Annex a -> Annex (Either IOException a)+tryAnnexIO = M.try  {- throw in the Annex monad -} throwAnnex :: Exception e => e -> Annex a
Annex/Link.hs view
@@ -68,9 +68,9 @@ 				-- characters, or whitespace, we 				-- certianly don't have a link to a 				-- git-annex key.-				if any (`elem` s) "\0\n\r \t"-					then return ""-					else return s+				return $ if any (`elem` s) "\0\n\r \t"+					then ""+					else s  {- Creates a link on disk.  -
Annex/Quvi.hs view
@@ -14,7 +14,7 @@ import Utility.Quvi import Utility.Url -withQuviOptions :: forall a. (Query a) -> [CommandParam] -> URLString -> Annex a+withQuviOptions :: forall a. Query a -> [CommandParam] -> URLString -> Annex a withQuviOptions a ps url = do 	opts <- map Param . annexQuviOptions <$> Annex.getGitConfig 	liftIO $ a (ps++opts) url
Annex/Ssh.hs view
@@ -42,7 +42,7 @@ 	-- If the lock pool is empty, this is the first ssh of this 	-- run. There could be stale ssh connections hanging around 	-- from a previous git-annex run that was interrupted.-	cleanstale = whenM (not . any isLock . M.keys <$> getPool) $+	cleanstale = whenM (not . any isLock . M.keys <$> getPool) 		sshCleanup  {- Returns a filename to use for a ssh connection caching socket, and@@ -57,9 +57,9 @@ 			then return (Just socketfile, sshConnectionCachingParams socketfile) 			else do 				socketfile' <- liftIO $ relPathCwdToFile socketfile-				if valid_unix_socket_path socketfile'-					then return (Just socketfile', sshConnectionCachingParams socketfile')-					else return (Nothing, [])+				return $ if valid_unix_socket_path socketfile'+					then (Just socketfile', sshConnectionCachingParams socketfile')+					else (Nothing, [])  sshConnectionCachingParams :: FilePath -> [CommandParam] sshConnectionCachingParams socketfile = 
Assistant/DeleteRemote.hs view
@@ -17,8 +17,7 @@ import Assistant.DaemonStatus import qualified Remote import Remote.List-import qualified Git.Command-import qualified Git.BuildVersion+import qualified Git.Remote import Logs.Trust import qualified Annex @@ -35,15 +34,7 @@ 	remote <- fromMaybe (error "unknown remote") 		<$> liftAnnex (Remote.remoteFromUUID uuid) 	liftAnnex $ do-		inRepo $ Git.Command.run-			[ Param "remote"-			-- name of this subcommand changed-			, Param $-				if Git.BuildVersion.older "1.8.0"-					then "rm"-					else "remove"-			, Param (Remote.name remote)-			]+		inRepo $ Git.Remote.remove (Remote.name remote) 		void $ remoteListRefresh 	updateSyncRemotes 	return remote
+ Assistant/Gpg.hs view
@@ -0,0 +1,36 @@+{- git-annex assistant gpg stuff+ -+ - Copyright 2013 Joey Hess <joey@kitenet.net>+ -+ - Licensed under the GNU AGPL version 3 or higher.+ -}++{-# LANGUAGE QuasiQuotes, TemplateHaskell, OverloadedStrings #-}++module Assistant.Gpg where++import Utility.Gpg+import Utility.UserInfo+import Types.Remote (RemoteConfigKey)++import qualified Data.Map as M++{- Generates a gpg user id that is not used by any existing secret key -}+newUserId :: IO UserId+newUserId = do+	oldkeys <- secretKeys+	username <- myUserName+  	let basekeyname = username ++ "'s git-annex encryption key"+	return $ Prelude.head $ filter (\n -> M.null $ M.filter (== n) oldkeys)+		( basekeyname+		: map (\n -> basekeyname ++ show n) ([2..] :: [Int])+		)++data EnableEncryption = HybridEncryption | SharedEncryption | NoEncryption+	deriving (Eq)++{- Generates Remote configuration for encryption. -}+configureEncryption :: EnableEncryption -> (RemoteConfigKey, String)+configureEncryption SharedEncryption = ("encryption", "shared")+configureEncryption NoEncryption = ("encryption", "none")+configureEncryption HybridEncryption = ("encryption", "hybrid")
− Assistant/Install/AutoStart.o

binary file changed (5192 → absent bytes)

− Assistant/Install/Menu.o

binary file changed (15328 → absent bytes)

Assistant/MakeRemote.hs view
@@ -14,6 +14,7 @@ import qualified Remote import Remote.List import qualified Remote.Rsync as Rsync+import qualified Remote.GCrypt as GCrypt import qualified Git import qualified Git.Command import qualified Command.InitRemote@@ -23,17 +24,18 @@ import Config import Config.Cost import Creds+import Assistant.Gpg+import Utility.Gpg (KeyId)  import qualified Data.Text as T import qualified Data.Map as M -type RemoteName = String- {- Sets up and begins syncing with a new ssh or rsync remote. -} makeSshRemote :: Bool -> SshData -> Maybe Cost -> Assistant Remote makeSshRemote forcersync sshdata mcost = do 	r <- liftAnnex $-		addRemote $ maker (sshRepoName sshdata) sshurl+		addRemote $ maker (sshRepoName sshdata)+			(sshUrl forcersync sshdata) 	liftAnnex $ maybe noop (setRemoteCost r) mcost 	syncRemote r 	return r@@ -42,18 +44,24 @@ 	maker 		| rsync = makeRsyncRemote 		| otherwise = makeGitRemote-	sshurl = T.unpack $ T.concat $-		if rsync-			then [u, h, T.pack ":", sshDirectory sshdata, T.pack "/"]-			else [T.pack "ssh://", u, h, d, T.pack "/"]-	  where-		u = maybe (T.pack "") (\v -> T.concat [v, T.pack "@"]) $ sshUserName sshdata-		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]-	++{- Generates a ssh or rsync url from a SshData. -}+sshUrl :: Bool -> SshData -> String+sshUrl forcersync sshdata = addtrailingslash $ T.unpack $ T.concat $+	if (forcersync || rsyncOnly sshdata)+		then [u, h, T.pack ":", sshDirectory sshdata]+		else [T.pack "ssh://", u, h, d]+  where+	u = maybe (T.pack "") (\v -> T.concat [v, T.pack "@"]) $ sshUserName sshdata+	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]+	addtrailingslash s+		| "/" `isSuffixOf` s = s+		| otherwise = s ++ "/"+ {- Runs an action that returns a name of the remote, and finishes adding it. -} addRemote :: Annex RemoteName -> Annex Remote addRemote a = do@@ -74,6 +82,16 @@ 		[ ("encryption", "shared") 		, ("rsyncurl", location) 		, ("type", "rsync")+		]++{- Inits a gcrypt special remote, and returns its name. -}+makeGCryptRemote :: RemoteName -> String -> KeyId -> Annex RemoteName+makeGCryptRemote remotename location keyid = +	initSpecialRemote remotename GCrypt.remote $ M.fromList+		[ ("type", "gcrypt")+		, ("gitrepo", location)+		, configureEncryption HybridEncryption+		, ("keyid", keyid) 		]  type SpecialRemoteMaker = RemoteName -> RemoteType -> R.RemoteConfig -> Annex RemoteName
Assistant/Threads/Committer.hs view
@@ -319,10 +319,10 @@ 	add change@(InProcessAddChange { keySource = ks }) =  		catchDefaultIO Nothing <~> do 			sanitycheck ks $ do-				key <- liftAnnex $ do+				(mkey, mcache) <- liftAnnex $ do 					showStart "add" $ keyFilename ks 					Command.Add.ingest $ Just ks-				maybe (failedingest change) (done change $ keyFilename ks) key+				maybe (failedingest change) (done change mcache $ keyFilename ks) mkey 	add _ = return Nothing  	{- In direct mode, avoid overhead of re-injesting a renamed@@ -349,7 +349,7 @@ 	fastadd change key = do 		let source = keySource change 		liftAnnex $ Command.Add.finishIngestDirect key source-		done change (keyFilename source) key+		done change Nothing (keyFilename source) key  	removedKeysMap :: InodeComparisonType -> [Change] -> Annex (M.Map InodeCacheKey Key) 	removedKeysMap ct l = do@@ -365,11 +365,11 @@ 		liftAnnex showEndFail 		return Nothing -	done change file key = liftAnnex $ do+	done change mcache file key = liftAnnex $ do 		logStatus key InfoPresent 		link <- ifM isDirect 			( inRepo $ gitAnnexLink file key-			, Command.Add.link file key True+			, Command.Add.link file key mcache 			) 		whenM (pure DirWatcher.eventsCoalesce <||> isDirect) $ do 			stageSymlink file =<< hashSymlink link
Assistant/Threads/MountWatcher.hs view
@@ -174,14 +174,14 @@ 	pairs <- liftAnnex $ mapM (checkremote repotop) rs 	let (waschanged, rs') = unzip pairs 	when (any id waschanged) $ do-		liftAnnex $ Annex.changeState $ \s -> s { Annex.remotes = rs' }+		liftAnnex $ Annex.changeState $ \s -> s { Annex.remotes = catMaybes rs' } 		updateSyncRemotes-	return $ map snd $ filter fst pairs+	return $ catMaybes $ map snd $ filter fst pairs   where 	checkremote repotop r = case Remote.localpath r of 		Just p | dirContains dir (absPathFrom repotop p) -> 			(,) <$> pure True <*> updateRemote r-		_ -> return (False, r)+		_ -> return (False, Just r)  type MountPoints = S.Set Mntent 
Assistant/Threads/TransferScanner.hs view
@@ -81,8 +81,7 @@ {- This is a cheap scan for failed transfers involving a remote. -} failedTransferScan :: Remote -> Assistant () failedTransferScan r = do-	failed <- liftAnnex $ getFailedTransfers (Remote.uuid r)-	liftAnnex $ mapM_ removeFailedTransfer $ map fst failed+	failed <- liftAnnex $ clearFailedTransfers (Remote.uuid r) 	mapM_ retry failed   where 	retry (t, info)@@ -98,7 +97,7 @@ 			 - key, so it's not redundantly checked here. -} 			requeue t info 	requeue t info = queueTransferWhenSmall "retrying failed transfer" (associatedFile info) t r-+	 {- This is a expensive scan through the full git work tree, finding  - files to transfer. The scan is blocked when the transfer queue gets  - too large. @@ -118,8 +117,12 @@ expensiveScan urlrenderer rs = unless onlyweb $ batch <~> do 	debug ["starting scan of", show visiblers] +	let us = map Remote.uuid rs++	mapM_ (liftAnnex . clearFailedTransfers) us+ 	unwantedrs <- liftAnnex $ S.fromList-		<$> filterM inUnwantedGroup (map Remote.uuid rs)+		<$> filterM inUnwantedGroup us  	g <- liftAnnex gitRepo 	(files, cleanup) <- liftIO $ LsFiles.inRepo [] g
Assistant/WebApp/Configurators/AWS.hs view
@@ -11,7 +11,6 @@  import Assistant.WebApp.Common import Assistant.MakeRemote-import Assistant.Sync #ifdef WITH_S3 import qualified Remote.S3 as S3 #endif@@ -22,8 +21,10 @@ import qualified Types.Remote as Remote import Types.Remote (RemoteConfig) import Types.StandardGroups-import Logs.PreferredContent import Creds+import Assistant.Gpg+import Git.Remote+import Assistant.WebApp.Utility  import qualified Data.Text as T import qualified Data.Map as M@@ -124,16 +125,13 @@ 	case result of 		FormSuccess input -> liftH $ do 			let name = T.unpack $ repoName input-			makeAWSRemote initSpecialRemote S3.remote (extractCreds input) name setgroup $ M.fromList+			makeAWSRemote initSpecialRemote S3.remote TransferGroup (extractCreds input) name $ M.fromList 				[ configureEncryption $ enableEncryption input 				, ("type", "S3") 				, ("datacenter", T.unpack $ datacenter input) 				, ("storageclass", show $ storageClass input) 				] 		_ -> $(widgetFile "configurators/adds3")-  where-	setgroup r = liftAnnex $-		setStandardGroup (Remote.uuid r) TransferGroup #else postAddS3R = error "S3 not supported by this build" #endif@@ -150,15 +148,12 @@ 	case result of 		FormSuccess input -> liftH $ do 			let name = T.unpack $ repoName input-			makeAWSRemote initSpecialRemote Glacier.remote (extractCreds input) name setgroup $ M.fromList+			makeAWSRemote initSpecialRemote Glacier.remote SmallArchiveGroup (extractCreds input) name $ M.fromList 				[ configureEncryption $ enableEncryption input 				, ("type", "glacier") 				, ("datacenter", T.unpack $ datacenter input) 				] 		_ -> $(widgetFile "configurators/addglacier")-  where-	setgroup r = liftAnnex $ -		setStandardGroup (Remote.uuid r) SmallArchiveGroup #else postAddGlacierR = error "S3 not supported by this build" #endif@@ -198,7 +193,7 @@ 			m <- liftAnnex readRemoteLog 			let name = fromJust $ M.lookup "name" $ 				fromJust $ M.lookup uuid m-			makeAWSRemote enableSpecialRemote remotetype creds name (const noop) M.empty+			makeAWSRemote enableSpecialRemote remotetype SmallArchiveGroup creds name M.empty 		_ -> do 			description <- liftAnnex $ 				T.pack <$> Remote.prettyUUID uuid@@ -207,14 +202,10 @@ enableAWSRemote _ _ = error "S3 not supported by this build" #endif -makeAWSRemote :: SpecialRemoteMaker -> RemoteType -> AWSCreds -> String -> (Remote -> Handler ()) -> RemoteConfig -> Handler ()-makeAWSRemote maker remotetype (AWSCreds ak sk) name setup config = do+makeAWSRemote :: SpecialRemoteMaker -> RemoteType -> StandardGroup -> AWSCreds -> RemoteName -> RemoteConfig -> Handler ()+makeAWSRemote maker remotetype defaultgroup (AWSCreds ak sk) name config = do 	liftIO $ AWS.setCredsEnv (T.unpack ak, T.unpack sk)-	r <- liftAnnex $ addRemote $ do-		maker hostname remotetype config-	setup r-	liftAssistant $ syncRemote r-	redirect $ EditNewCloudRepositoryR $ Remote.uuid r+	setupCloudRemote defaultgroup $ maker hostname remotetype config   where 	{- AWS services use the remote name as the basis for a host 	 - name, so filter it to contain valid characters. -}
Assistant/WebApp/Configurators/Edit.hs view
@@ -11,6 +11,7 @@  import Assistant.WebApp.Common import Assistant.WebApp.Utility+import Assistant.WebApp.Gpg import Assistant.DaemonStatus import Assistant.MakeRemote (uniqueRemoteName) import Assistant.WebApp.Configurators.XMPP (xmppNeeded)@@ -33,6 +34,9 @@ import qualified Git.Config import qualified Annex import Git.Remote+import Remote.Helper.Encryptable (extractCipher)+import Types.Crypto+import Utility.Gpg  import qualified Data.Text as T import qualified Data.Map as M@@ -187,8 +191,9 @@ 			redirect DashboardR 		_ -> do 			let istransfer = repoGroup curr == RepoGroupStandard TransferGroup-			repoInfo <- getRepoInfo mremote . M.lookup uuid-				<$> liftAnnex readRemoteLog+			config <- liftAnnex $ M.lookup uuid <$> readRemoteLog+			let repoInfo = getRepoInfo mremote config+			let repoEncryption = getRepoEncryption mremote config 			$(widgetFile "configurators/editrepository")  {- Makes any directory associated with the repository. -}@@ -221,3 +226,20 @@ getGitRepoInfo r = do 	let loc = Git.repoLocation r 	[whamlet|git repository located at <tt>#{loc}</tt>|]++getRepoEncryption :: Maybe Remote.Remote -> Maybe Remote.RemoteConfig -> Widget+getRepoEncryption (Just _) (Just c) = case extractCipher c of+  	Nothing ->+		[whamlet|not encrypted|]+	(Just (SharedCipher _)) ->+		[whamlet|encrypted: encryption key stored in git repository|]+	(Just (EncryptedCipher _ _ (KeyIds { keyIds = ks }))) -> do+		knownkeys <- liftIO secretKeys+		[whamlet|+encrypted using gpg key:+<ul style="list-style: none">+  $forall k <- ks+    <li>+      ^{gpgKeyDisplay k (M.lookup k knownkeys)}+|]+getRepoEncryption _ _ = return () -- local repo
Assistant/WebApp/Configurators/IA.hs view
@@ -20,10 +20,10 @@ import qualified Types.Remote as Remote import Types.StandardGroups import Types.Remote (RemoteConfig)-import Logs.PreferredContent import Logs.Remote import qualified Utility.Url as Url import Creds+import Assistant.Gpg  import qualified Data.Text as T import qualified Data.Map as M@@ -130,7 +130,7 @@ 	case result of 		FormSuccess input -> liftH $ do 			let name = escapeBucket $ T.unpack $ itemName input-			AWS.makeAWSRemote initSpecialRemote S3.remote (extractCreds input) name setgroup $+			AWS.makeAWSRemote initSpecialRemote S3.remote PublicGroup (extractCreds input) name $ 				M.fromList $ catMaybes 					[ Just $ configureEncryption NoEncryption 					, Just ("type", "S3")@@ -146,9 +146,6 @@ 					, Just ("preferreddir", name) 					] 		_ -> $(widgetFile "configurators/addia")-  where-	setgroup r = liftAnnex $-		setStandardGroup (Remote.uuid r) PublicGroup #else postAddIAR = error "S3 not supported by this build" #endif@@ -174,7 +171,7 @@ 			m <- liftAnnex readRemoteLog 			let name = fromJust $ M.lookup "name" $ 				fromJust $ M.lookup uuid m-			AWS.makeAWSRemote enableSpecialRemote S3.remote creds name (const noop) M.empty+			AWS.makeAWSRemote enableSpecialRemote S3.remote PublicGroup creds name M.empty 		_ -> do 			description <- liftAnnex $ 				T.pack <$> Remote.prettyUUID uuid
Assistant/WebApp/Configurators/Local.hs view
@@ -11,6 +11,7 @@  import Assistant.WebApp.Common import Assistant.WebApp.OtherRepos+import Assistant.WebApp.Gpg import Assistant.MakeRemote import Assistant.Sync import Init@@ -34,10 +35,15 @@ import Logs.UUID import Utility.UserInfo import Config+import Utility.Gpg+import qualified Annex.Branch+import qualified Remote.GCrypt as GCrypt+import qualified Types.Remote  import qualified Data.Text as T import qualified Data.Map as M import Data.Char+import Data.Ord import qualified Text.Hamlet as Hamlet  data RepositoryPath = RepositoryPath Text@@ -189,8 +195,8 @@ 		mainrepo <- fromJust . relDir <$> liftH getYesod 		$(widgetFile "configurators/newrepository/combine") -getCombineRepositoryR :: FilePathAndUUID -> Handler Html-getCombineRepositoryR (FilePathAndUUID newrepopath newrepouuid) = do+getCombineRepositoryR :: FilePath -> UUID -> Handler Html+getCombineRepositoryR newrepopath newrepouuid = do 	r <- combineRepos newrepopath remotename 	liftAssistant $ syncRemote r 	redirect $ EditRepositoryR newrepouuid@@ -236,46 +242,85 @@ {- 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. -}+ - the user must confirm the repository merge.+ -+ - If the repo does not already exist on the drive, prompt about+ - encryption. -} getConfirmAddDriveR :: RemovableDrive -> Handler Html-getConfirmAddDriveR drive = do-	ifM (needconfirm)-		( page "Combine repositories?" (Just Configuration) $-			$(widgetFile "configurators/adddrive/confirm")-		, do-			getFinishAddDriveR drive-		)+getConfirmAddDriveR drive = ifM (liftIO $ probeRepoExists dir)+	( do+		mu <- liftIO $ probeUUID dir+		case mu of+			Nothing -> maybe askcombine isknownuuid+				=<< liftAnnex (probeGCryptRemoteUUID dir)+			Just driveuuid -> isknownuuid driveuuid+	, newrepo+	)   where   	dir = removableDriveRepository drive-	needconfirm = ifM (liftIO $ doesDirectoryExist dir)-		( liftAnnex $ do-			mu <- liftIO $ catchMaybeIO $-				inDir dir $ getUUID-			case mu of-				Nothing -> return False-				Just driveuuid -> not .-					M.member driveuuid <$> uuidMap-		, return False-		)+  	newrepo = do+		secretkeys <- sortBy (comparing snd) . M.toList+			<$> liftIO secretKeys+		page "Encrypt repository?" (Just Configuration) $+			$(widgetFile "configurators/adddrive/encrypt")+	knownrepo = getFinishAddDriveR drive NoRepoKey+	askcombine = page "Combine repositories?" (Just Configuration) $+		$(widgetFile "configurators/adddrive/combine")+	isknownuuid driveuuid =+		ifM (M.member driveuuid <$> liftAnnex uuidMap)+			( knownrepo+			, askcombine+			) -cloneModal :: Widget-cloneModal = $(widgetFile "configurators/adddrive/clonemodal")+setupDriveModal :: Widget+setupDriveModal = $(widgetFile "configurators/adddrive/setupmodal") -getFinishAddDriveR :: RemovableDrive -> Handler Html-getFinishAddDriveR drive = make >>= redirect . EditNewRepositoryR+getGenKeyForDriveR :: RemovableDrive -> Handler Html+getGenKeyForDriveR drive = withNewSecretKey $ \keyid -> do+	{- Generating a key takes a long time, and +	 - the removable drive may have been disconnected+	 - in the meantime. Check that it is still mounted+	 - before finishing. -}+	ifM (liftIO $ any (\d -> mountPoint d == mountPoint drive) <$> driveList)+		( getFinishAddDriveR drive (RepoKey keyid)+		, getAddDriveR+		)++getFinishAddDriveR :: RemovableDrive -> RepoKey -> Handler Html+getFinishAddDriveR drive = go   where-  	make = do+  	{- Set up new gcrypt special remote. -}+	go (RepoKey keyid) = whenGcryptInstalled $ makewith $ const $ do+		r <- liftAnnex $ addRemote $+			makeGCryptRemote remotename dir keyid+		return (Types.Remote.uuid r, r)+	go NoRepoKey = checkGCryptRepoEncryption dir makeunencrypted $ do+			mu <- liftAnnex $ probeGCryptRemoteUUID dir+			case mu of+				Just u -> enableexistinggcryptremote u+				Nothing -> error "The drive contains a gcrypt repository that is not a git-annex special remote. This is not supported."+	enableexistinggcryptremote u = do+		remotename' <- liftAnnex $ getGCryptRemoteName u dir+		makewith $ const $ do+			r <- liftAnnex $ addRemote $+				enableSpecialRemote remotename' GCrypt.remote $ M.fromList+					[("gitrepo", dir)]+			return (u, r)+	{- Making a new unencrypted repo, or combining with an existing one. -}+	makeunencrypted = makewith $ \isnew -> (,)+		<$> liftIO (initRepo isnew False dir $ Just remotename)+		<*> combineRepos dir remotename+	makewith a = do 		liftIO $ createDirectoryIfMissing True dir 		isnew <- liftIO $ makeRepo dir True-		u <- liftIO $ initRepo isnew False dir $ Just remotename 		{- Removable drives are not reliable media, so enable fsync. -} 		liftIO $ inDir dir $ 			setConfig (ConfigKey "core.fsyncobjectfiles") 				(Git.Config.boolConfig True)-		r <- combineRepos dir remotename+		(u, r) <- a isnew 		liftAnnex $ setStandardGroup u TransferGroup 		liftAssistant $ syncRemote r-		return u+		redirect $ EditNewRepositoryR u   	mountpoint = T.unpack (mountPoint drive) 	dir = removableDriveRepository drive 	remotename = takeFileName mountpoint@@ -344,7 +389,7 @@ {- Makes a new git repository. Or, if a git repository already  - exists, returns False. -} makeRepo :: FilePath -> Bool -> IO Bool-makeRepo path bare = ifM alreadyexists+makeRepo path bare = ifM (probeRepoExists path) 	( return False 	, do 		(transcript, ok) <-@@ -354,14 +399,12 @@ 		return True 	)   where-  	alreadyexists = isJust <$> -		catchDefaultIO Nothing (Git.Construct.checkForRepo path) 	baseparams = [Param "init", Param "--quiet"] 	params 		| bare = baseparams ++ [Param "--bare", File path] 		| otherwise = baseparams ++ [File path] -{- Runs an action in the git-annex repository in the specified directory. -}+{- Runs an action in the git repository in the specified directory. -} inDir :: FilePath -> Annex a -> IO a inDir dir a = do 	state <- Annex.new =<< Git.Config.read =<< Git.Construct.fromPath dir@@ -398,8 +441,12 @@  initRepo' :: Maybe String -> Annex () initRepo' desc = do-	unlessM isInitialized $+	unlessM isInitialized $ do 		initialize desc+		{- Ensure branch gets committed right away so it is+		 - available for merging when a removable drive repo is being+		 - added. -}+		Annex.Branch.commit "update"  {- Checks if the user can write to a directory.  -@@ -410,3 +457,15 @@ 	tocheck <- ifM (doesDirectoryExist dir) 		(return dir, return $ parentDir dir) 	catchBoolIO $ fileAccess tocheck False True False++{- Checks if a git repo exists at a location. -}+probeRepoExists :: FilePath -> IO Bool+probeRepoExists dir = isJust <$>+	catchDefaultIO Nothing (Git.Construct.checkForRepo dir)++{- Gets the UUID of the git repo at a location, which may not exist, or+ - not be a git-annex repo. -}+probeUUID :: FilePath -> IO (Maybe UUID)+probeUUID dir = catchDefaultIO Nothing $ inDir dir $ do+	u <- getUUID+	return $ if u == NoUUID then Nothing else Just u
Assistant/WebApp/Configurators/Pairing.hs view
@@ -300,7 +300,7 @@ secretProblem s 	| B.null s = Just "The secret phrase cannot be left empty. (Remember that punctuation and white space is ignored.)" 	| B.length s < 6 = Just "Enter a longer secret phrase, at least 6 characters, but really, a phrase is best! This is not a password you'll need to enter every day."-	| s == toSecret sampleQuote = Just "Speaking of foolishness, don't paste in the example I gave. Enter a different phrase, please!"+	| s == toSecret sampleQuote = Just "Speaking of foolishness, don't paste in the example I gave. Enter a different phrase, please!" 	| otherwise = Nothing  toSecret :: Text -> Secret
Assistant/WebApp/Configurators/Ssh.hs view
@@ -11,6 +11,7 @@ module Assistant.WebApp.Configurators.Ssh where  import Assistant.WebApp.Common+import Assistant.WebApp.Gpg import Assistant.Ssh import Assistant.MakeRemote import Utility.Rsync (rsyncUrlIsShell)@@ -19,10 +20,16 @@ import Logs.PreferredContent import Types.StandardGroups import Utility.UserInfo+import Utility.Gpg+import Types.Remote (RemoteConfigKey)+import Git.Remote+import Assistant.WebApp.Utility+import qualified Remote.GCrypt as GCrypt  import qualified Data.Text as T import qualified Data.Map as M import Network.Socket+import Data.Ord  sshConfigurator :: Widget -> Handler Html sshConfigurator = page "Add a remote server" (Just Configuration)@@ -127,32 +134,48 @@ sshTestModal :: Widget sshTestModal = $(widgetFile "configurators/ssh/testmodal") -{- To enable an existing rsync special remote, parse the SshInput from- - its rsyncurl, and display a form whose only real purpose is to check- - if ssh public keys need to be set up. From there, we can proceed with- - the usual repo setup; all that code is idempotent.- -- - Note that there's no EnableSshR because ssh remotes are not special+{- 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 Html getEnableRsyncR = postEnableRsyncR postEnableRsyncR :: UUID -> Handler Html-postEnableRsyncR u = do+postEnableRsyncR = enableSpecialSshRemote "rsyncurl" enableRsyncNet enablersync+  where+	enablersync sshdata = redirect $ ConfirmSshR $+		sshdata { rsyncOnly = True }++{- This only handles gcrypt repositories that are located on ssh servers;+ - ones on local drives are handled via another part of the UI. -}+getEnableGCryptR :: UUID -> Handler Html+getEnableGCryptR = postEnableGCryptR+postEnableGCryptR :: UUID -> Handler Html+postEnableGCryptR u = whenGcryptInstalled $+	enableSpecialSshRemote "gitrepo" enableRsyncNetGCrypt enablersync u+  where+  	enablersync sshdata = error "TODO enable ssh gcrypt remote"++{- To enable an special remote that uses ssh as its transport, + - parse a config key to get its url, and display a form whose+ - only real purpose is to check if ssh public keys need to be+ - set up.+ -}+enableSpecialSshRemote :: RemoteConfigKey -> (SshInput -> RemoteName -> Handler Html) -> (SshData -> Handler ()) -> UUID -> Handler Html+enableSpecialSshRemote urlkey rsyncnetsetup genericsetup u = do 	m <- fromMaybe M.empty . M.lookup u <$> liftAnnex readRemoteLog-	case (parseSshRsyncUrl =<< M.lookup "rsyncurl" m, M.lookup "name" m) of+	case (parseSshRsyncUrl =<< M.lookup urlkey m, M.lookup "name" m) of 		(Just sshinput, Just reponame) -> sshConfigurator $ do 			((result, form), enctype) <- liftH $ 				runFormPost $ renderBootstrap $ sshInputAForm textField sshinput 			case result of 				FormSuccess sshinput' 					| isRsyncNet (inputHostname sshinput') ->-						void $ liftH $ makeRsyncNet sshinput' reponame (const noop)+						void $ liftH $ rsyncnetsetup sshinput' reponame 					| otherwise -> do 						s <- liftIO $ testServer sshinput' 						case s of 							Left status -> showform form enctype status-							Right sshdata -> enable sshdata+							Right sshdata -> liftH $ genericsetup sshdata 								{ sshRepoName = reponame } 				_ -> showform form enctype UntestedServer 		_ -> redirect AddSshR@@ -160,8 +183,6 @@ 	showform form enctype status = do 		description <- liftAnnex $ T.pack <$> prettyUUID u 		$(widgetFile "configurators/ssh/enable")-	enable sshdata = liftH $ redirect $ ConfirmSshR $-		sshdata { rsyncOnly = True }  {- Converts a rsyncurl value to a SshInput. But only if it's a ssh rsync  - url; rsync:// urls or bare path names are not supported.@@ -274,26 +295,26 @@ 	redirect $ either (const $ ConfirmSshR sshdata) ConfirmSshR s  getMakeSshGitR :: SshData -> Handler Html-getMakeSshGitR = makeSsh False setupGroup+getMakeSshGitR = makeSsh False  getMakeSshRsyncR :: SshData -> Handler Html-getMakeSshRsyncR = makeSsh True setupGroup+getMakeSshRsyncR = makeSsh True -makeSsh :: Bool -> (Remote -> Handler ()) -> SshData -> Handler Html-makeSsh rsync setup sshdata+makeSsh :: Bool -> SshData -> Handler Html+makeSsh rsync sshdata 	| needsPubKey sshdata = do 		keypair <- liftIO genSshKeyPair 		sshdata' <- liftIO $ setupSshKeyPair keypair sshdata-		makeSsh' rsync setup sshdata sshdata' (Just keypair)+		makeSsh' rsync sshdata sshdata' (Just keypair) 	| sshPort sshdata /= 22 = do 		sshdata' <- liftIO $ setSshConfig sshdata []-		makeSsh' rsync setup sshdata sshdata' Nothing-	| otherwise = makeSsh' rsync setup sshdata sshdata Nothing+		makeSsh' rsync sshdata sshdata' Nothing+	| otherwise = makeSsh' rsync sshdata sshdata Nothing -makeSsh' :: Bool -> (Remote -> Handler ()) -> SshData -> SshData -> Maybe SshKeyPair -> Handler Html-makeSsh' rsync setup origsshdata sshdata keypair = do+makeSsh' :: Bool -> SshData -> SshData -> Maybe SshKeyPair -> Handler Html+makeSsh' rsync origsshdata sshdata keypair = do 	sshSetup ["-p", show (sshPort origsshdata), sshhost, remoteCommand] "" $-		makeSshRepo rsync setup sshdata+		makeSshRepo rsync sshdata   where 	sshhost = genSshHost (sshHostName origsshdata) (sshUserName origsshdata) 	remotedir = T.unpack $ sshDirectory sshdata@@ -307,10 +328,10 @@ 			else Nothing 		] -makeSshRepo :: Bool -> (Remote -> Handler ()) -> SshData -> Handler Html-makeSshRepo forcersync setup sshdata = do+makeSshRepo :: Bool -> SshData -> Handler Html+makeSshRepo forcersync sshdata = do 	r <- liftAssistant $ makeSshRemote forcersync sshdata Nothing-	setup r+	liftAnnex $ setStandardGroup (Remote.uuid r) TransferGroup 	redirect $ EditNewCloudRepositoryR $ Remote.uuid r  getAddRsyncNetR :: Handler Html@@ -320,19 +341,18 @@ 	((result, form), enctype) <- runFormPost $ 		renderBootstrap $ sshInputAForm hostnamefield $ 			SshInput Nothing Nothing Nothing 22-	let showform status = page "Add a Rsync.net repository" (Just Configuration) $-		$(widgetFile "configurators/addrsync.net")+	let showform status = inpage $+		$(widgetFile "configurators/rsync.net/add") 	case result of 		FormSuccess sshinput-			| isRsyncNet (inputHostname sshinput) -> do-				let reponame = genSshRepoName "rsync.net" -					(maybe "" T.unpack $ inputDirectory sshinput)-				makeRsyncNet sshinput reponame setupGroup+			| isRsyncNet (inputHostname sshinput) ->+				go sshinput 			| otherwise -> 				showform $ UnusableServer 					"That is not a rsync.net host name." 		_ -> showform UntestedServer   where+  	inpage = page "Add a Rsync.net repository" (Just Configuration) 	hostnamefield = textField `withExpandableNote` ("Help", help) 	help = [whamlet| <div>@@ -342,9 +362,65 @@   The host name will be something like "usw-s001.rsync.net", and the #   user name something like "7491" |]+	go sshinput = do+		let reponame = genSshRepoName "rsync.net" +			(maybe "" T.unpack $ inputDirectory sshinput)+		prepRsyncNet sshinput reponame $ \sshdata -> inpage $ +			checkexistinggcrypt sshdata $ do+				secretkeys <- sortBy (comparing snd) . M.toList+					<$> liftIO secretKeys+				$(widgetFile "configurators/rsync.net/encrypt")+	{- Detect if the user entered an existing gcrypt repository,+	 - and enable it. -}+	checkexistinggcrypt sshdata a = ifM (liftIO isGcryptInstalled)+		( checkGCryptRepoEncryption repourl a $ do+			mu <- liftAnnex $ probeGCryptRemoteUUID repourl+			case mu of+				Just u -> do+					reponame <- liftAnnex $ getGCryptRemoteName u repourl+					void $ liftH $ enableRsyncNetGCrypt' sshdata reponame+				Nothing -> error "The location contains a gcrypt repository that is not a git-annex special remote. This is not supported."+		, a+		)+	  where+	  	repourl = sshUrl True sshdata -makeRsyncNet :: SshInput -> String -> (Remote -> Handler ()) -> Handler Html-makeRsyncNet sshinput reponame setup = do+getMakeRsyncNetSharedR :: SshData -> Handler Html+getMakeRsyncNetSharedR sshdata = makeSshRepo True sshdata++{- Make a gcrypt special remote on rsync.net. -}+getMakeRsyncNetGCryptR :: SshData -> RepoKey -> Handler Html+getMakeRsyncNetGCryptR sshdata NoRepoKey = whenGcryptInstalled $+	withNewSecretKey $ getMakeRsyncNetGCryptR sshdata . RepoKey+getMakeRsyncNetGCryptR sshdata (RepoKey keyid) = whenGcryptInstalled $ do+	sshSetup [sshhost, gitinit] [] $+		setupCloudRemote TransferGroup $ +			makeGCryptRemote (sshRepoName sshdata) (sshUrl True sshdata) keyid+  where+	sshhost = genSshHost (sshHostName sshdata) (sshUserName sshdata)+	gitinit = "git init --bare " ++ T.unpack (sshDirectory sshdata)++enableRsyncNet :: SshInput -> String -> Handler Html+enableRsyncNet sshinput reponame = +	prepRsyncNet sshinput reponame $ makeSshRepo True++enableRsyncNetGCrypt :: SshInput -> RemoteName -> Handler Html+enableRsyncNetGCrypt sshinput reponame = +	prepRsyncNet sshinput reponame $ \sshdata ->+		checkGCryptRepoEncryption (sshUrl True sshdata) notencrypted $+			enableRsyncNetGCrypt' sshdata reponame+  where+	notencrypted = error "Unexpectedly found a non-encrypted git repository, instead of the expected encrypted git repository."+enableRsyncNetGCrypt' :: SshData -> RemoteName -> Handler Html+enableRsyncNetGCrypt' sshdata reponame = +	setupCloudRemote TransferGroup $ +		enableSpecialRemote reponame GCrypt.remote $ M.fromList+			[("gitrepo", sshUrl True sshdata)]++{- Prepares rsync.net ssh key, and if successful, runs an action with+ - its SshData. -}+prepRsyncNet :: SshInput -> String -> (SshData -> Handler Html) -> Handler Html+prepRsyncNet sshinput reponame a = do 	knownhost <- liftIO $ maybe (return False) knownHost (inputHostname sshinput) 	keypair <- liftIO $ genSshKeyPair 	sshdata <- liftIO $ setupSshKeyPair keypair $@@ -371,12 +447,8 @@ 		, genSshHost (sshHostName sshdata) (sshUserName sshdata) 		, remotecommand 		]-	sshSetup sshopts (sshPubKey keypair) $-		makeSshRepo True setup sshdata+	sshSetup sshopts (sshPubKey keypair) $ a sshdata  isRsyncNet :: Maybe Text -> Bool isRsyncNet Nothing = False isRsyncNet (Just host) = ".rsync.net" `T.isSuffixOf` T.toLower host--setupGroup :: Remote -> Handler ()-setupGroup r = liftAnnex $ setStandardGroup (Remote.uuid r) TransferGroup
Assistant/WebApp/Configurators/WebDAV.hs view
@@ -14,12 +14,13 @@ #ifdef WITH_WEBDAV import qualified Remote.WebDAV as WebDAV import Assistant.MakeRemote-import Assistant.Sync import qualified Remote import Types.Remote (RemoteConfig) import Types.StandardGroups-import Logs.PreferredContent import Logs.Remote+import Assistant.Gpg+import Assistant.WebApp.Utility+import Git.Remote  import qualified Data.Map as M #endif@@ -69,7 +70,7 @@ 		runFormPost $ renderBootstrap $ boxComAForm defcreds 	case result of 		FormSuccess input -> liftH $ -			makeWebDavRemote initSpecialRemote "box.com" (toCredPair input) setgroup $ M.fromList+			makeWebDavRemote initSpecialRemote "box.com" (toCredPair input) $ M.fromList 				[ configureEncryption $ enableEncryption input 				, ("embedcreds", if embedCreds input then "yes" else "no") 				, ("type", "webdav")@@ -80,9 +81,6 @@ 				, ("chunksize", "10mb") 				] 		_ -> $(widgetFile "configurators/addbox.com")-  where-	setgroup r = liftAnnex $-		setStandardGroup (Remote.uuid r) TransferGroup #else postAddBoxComR = error "WebDAV not supported by this build" #endif@@ -100,7 +98,7 @@ 		getRemoteCredPairFor "webdav" c (WebDAV.davCreds uuid) 	case mcreds of 		Just creds -> webDAVConfigurator $ liftH $-			makeWebDavRemote enableSpecialRemote name creds (const noop) M.empty+			makeWebDavRemote enableSpecialRemote name creds M.empty 		Nothing 			| "box.com/" `isInfixOf` url -> 				boxConfigurator $ showform name url@@ -115,7 +113,7 @@ 			runFormPost $ renderBootstrap $ webDAVCredsAForm defcreds 		case result of 			FormSuccess input -> liftH $-				makeWebDavRemote enableSpecialRemote name (toCredPair input) (const noop) M.empty+				makeWebDavRemote enableSpecialRemote name (toCredPair input) M.empty 			_ -> do 				description <- liftAnnex $ 					T.pack <$> Remote.prettyUUID uuid@@ -125,13 +123,10 @@ #endif  #ifdef WITH_WEBDAV-makeWebDavRemote :: SpecialRemoteMaker -> String -> CredPair -> (Remote -> Handler ()) -> RemoteConfig -> Handler ()-makeWebDavRemote maker name creds setup config = do+makeWebDavRemote :: SpecialRemoteMaker -> RemoteName -> CredPair -> RemoteConfig -> Handler ()+makeWebDavRemote maker name creds config = do 	liftIO $ WebDAV.setCredsEnv creds-	r <- liftAnnex $ addRemote $ maker name WebDAV.remote config-	setup r-	liftAssistant $ syncRemote r-	redirect $ EditNewCloudRepositoryR $ Remote.uuid r+	setupCloudRemote TransferGroup $ maker name WebDAV.remote config  {- Only returns creds previously used for the same hostname. -} previouslyUsedWebDAVCreds :: String -> Annex (Maybe CredPair)
Assistant/WebApp/Form.hs view
@@ -12,8 +12,8 @@  module Assistant.WebApp.Form where -import Types.Remote (RemoteConfigKey) import Assistant.WebApp.Types+import Assistant.Gpg  import Yesod hiding (textField, passwordField) import Yesod.Form.Fields as F@@ -75,9 +75,6 @@   where   	ident = "toggle_" ++ toggle -data EnableEncryption = SharedEncryption | NoEncryption-	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@@ -91,8 +88,3 @@ 		[ ("Encrypt all data", SharedEncryption) 		, ("Disable encryption", NoEncryption) 		]--{- Generates Remote configuration for encryption. -}-configureEncryption :: EnableEncryption -> (RemoteConfigKey, String)-configureEncryption SharedEncryption = ("encryption", "shared")-configureEncryption NoEncryption = ("encryption", "none")
+ Assistant/WebApp/Gpg.hs view
@@ -0,0 +1,96 @@+{- git-annex webapp gpg stuff+ -+ - Copyright 2013 Joey Hess <joey@kitenet.net>+ -+ - Licensed under the GNU AGPL version 3 or higher.+ -}++{-# LANGUAGE QuasiQuotes, TemplateHaskell, OverloadedStrings #-}++module Assistant.WebApp.Gpg where++import Assistant.WebApp.Common+import Assistant.Gpg+import Utility.Gpg+import qualified Git.Command+import qualified Git.Remote+import qualified Git.Construct+import qualified Annex.Branch+import qualified Git.GCrypt+import qualified Remote.GCrypt as GCrypt+import Assistant.MakeRemote+import Logs.Remote++import qualified Data.Map as M++gpgKeyDisplay :: KeyId -> Maybe UserId -> Widget+gpgKeyDisplay keyid userid = [whamlet|+  <span title="key id #{keyid}">+    <i .icon-user></i> #+      $maybe name <- userid+        #{name}+      $nothing+        key id #{keyid}+|]++genKeyModal :: Widget+genKeyModal = $(widgetFile "configurators/genkeymodal")++isGcryptInstalled :: IO Bool+isGcryptInstalled = inPath "git-remote-gcrypt"++whenGcryptInstalled :: Handler Html -> Handler Html+whenGcryptInstalled a = ifM (liftIO isGcryptInstalled)+	( a+	, page "Need git-remote-gcrypt" (Just Configuration) $+		$(widgetFile "configurators/needgcrypt")+	)++withNewSecretKey :: (KeyId -> Handler Html) -> Handler Html+withNewSecretKey use = do+	userid <- liftIO $ newUserId+	liftIO $ genSecretKey RSA "" userid maxRecommendedKeySize+	results <- M.keys . M.filter (== userid) <$> liftIO secretKeys+	case results of+		[] -> error "Failed to generate gpg key!"+		(key:_) -> use key++{- Tries to find the name used in remote.log for a gcrypt repository+ - with a given uuid.+ -+ - The gcrypt remote may not be on that is listed in the local remote.log+ - (or the info may be out of date), so this actually fetches the git-annex+ - branch from the gcrypt remote and merges it in, and then looks up+ - the name.+ -}+getGCryptRemoteName :: UUID -> String -> Annex Git.Remote.RemoteName+getGCryptRemoteName u repoloc = do+	tmpremote <- uniqueRemoteName "tmpgcryptremote" 0 <$> gitRepo+	void $ inRepo $ Git.Command.runBool+		[Params "remote add", Param tmpremote, Param $ Git.GCrypt.urlPrefix ++ repoloc]+	mname <- ifM (inRepo $ Git.Command.runBool [Param "fetch", Param tmpremote])+		( do+			void $ Annex.Branch.forceUpdate+			(M.lookup "name" <=< M.lookup u) <$> readRemoteLog+		, return Nothing+		)+	void $ inRepo $ Git.Remote.remove tmpremote+	maybe missing return mname+  where+	missing = error $ "Cannot find configuration for the gcrypt remote at " ++ repoloc++checkGCryptRepoEncryption :: (Monad m, LiftAnnex m) => String -> m a -> m a -> m a+checkGCryptRepoEncryption location notencrypted encrypted = +	dispatch =<< liftAnnex (inRepo $ Git.GCrypt.probeRepo location)+  where+	dispatch Git.GCrypt.Decryptable = encrypted+	dispatch Git.GCrypt.NotEncrypted = notencrypted+	dispatch Git.GCrypt.NotDecryptable =+		error "This git repository is encrypted with a GnuPG key that you do not have."++{- Gets the UUID of the gcrypt repo at a location, which may not exist.+ - Only works if the gcrypt repo was created as a git-annex remote. -}+probeGCryptRemoteUUID :: String -> Annex (Maybe UUID)+probeGCryptRemoteUUID repolocation = do+	r <- inRepo $ Git.Construct.fromRemoteLocation repolocation+	GCrypt.getGCryptUUID False r
Assistant/WebApp/Notifications.hs view
@@ -80,7 +80,7 @@ getNotifierRepoListR :: RepoSelector -> Handler RepPlain getNotifierRepoListR reposelector = notifierUrl route getRepoListBroadcaster   where-	route nid = RepoListR $ RepoListNotificationId nid reposelector+	route nid = RepoListR nid reposelector  getTransferBroadcaster :: Assistant NotificationBroadcaster getTransferBroadcaster = transferNotifier <$> getDaemonStatus
Assistant/WebApp/RepoList.hs view
@@ -24,8 +24,10 @@ import Logs.Group import Config import Git.Config+import Git.Remote import Assistant.Sync import Config.Cost+import Utility.NotificationBroadcaster import qualified Git #ifdef WITH_XMPP #endif@@ -82,8 +84,8 @@  -  - Returns a div, which will be inserted into the calling page.  -}-getRepoListR :: RepoListNotificationId -> Handler Html-getRepoListR (RepoListNotificationId nid reposelector) = do+getRepoListR :: NotificationId -> RepoSelector -> Handler Html+getRepoListR nid reposelector = do 	waitNotifier getRepoListBroadcaster nid 	p <- widgetToPageContent $ repoListDisplay reposelector 	giveUrlRenderer $ [hamlet|^{pageBody p}|]@@ -156,8 +158,9 @@ 				else return l 	unconfigured = liftAnnex $ do 		m <- readRemoteLog+		g <- gitRepo 		map snd . catMaybes . filter selectedremote -			. map (findinfo m)+			. map (findinfo m g) 			<$> (trustExclude DeadTrusted $ M.keys m) 	selectedrepo r 		| Remote.readonly r = False@@ -167,7 +170,7 @@ 	selectedremote (Just (iscloud, _)) 		| onlyCloud reposelector = iscloud 		| otherwise = True-	findinfo m u = case M.lookup "type" =<< M.lookup u m of+	findinfo m g u = case getconfig "type" of 		Just "rsync" -> val True EnableRsyncR 		Just "directory" -> val False EnableDirectoryR #ifdef WITH_S3@@ -177,8 +180,16 @@ #ifdef WITH_WEBDAV 		Just "webdav" -> val True EnableWebDAVR #endif+		Just "gcrypt" ->+			-- Skip gcrypt repos on removable drives;+			-- handled separately.+			case getconfig "gitrepo" of+				Just rr	| remoteLocationIsUrl (parseRemoteLocation rr g) ->+					val True EnableGCryptR+				_ -> Nothing 		_ -> Nothing 	  where+	  	getconfig k = M.lookup k =<< M.lookup u m 		val iscloud r = Just (iscloud, (u, DisabledRepoActions $ r u)) 	list l = liftAnnex $ do 		let l' = nubBy (\x y -> fst x == fst y) l
Assistant/WebApp/Types.hs view
@@ -21,6 +21,7 @@ import Utility.WebApp import Utility.Yesod import Logs.Transfer+import Utility.Gpg (KeyId) import Build.SysConfig (packageversion)  import Yesod.Static@@ -149,9 +150,6 @@ 	} 	deriving (Read, Show, Eq) -data RepoListNotificationId = RepoListNotificationId NotificationId RepoSelector-	deriving (Read, Show, Eq)- data RemovableDrive = RemovableDrive  	{ diskFree :: Maybe Integer 	, mountPoint :: Text@@ -159,16 +157,14 @@ 	} 	deriving (Read, Show, Eq, Ord) -{- Only needed to work around old-yesod bug that emits a warning message- - when a route has two parameters. -}-data FilePathAndUUID = FilePathAndUUID FilePath UUID-	deriving (Read, Show, Eq)+data RepoKey = RepoKey KeyId | NoRepoKey+	deriving (Read, Show, Eq, Ord) -instance PathPiece FilePathAndUUID where+instance PathPiece RemovableDrive where 	toPathPiece = pack . show 	fromPathPiece = readish . unpack -instance PathPiece RemovableDrive where+instance PathPiece RepoKey where 	toPathPiece = pack . show 	fromPathPiece = readish . unpack @@ -205,10 +201,6 @@ 	fromPathPiece = readish . unpack  instance PathPiece PairKey where-	toPathPiece = pack . show-	fromPathPiece = readish . unpack--instance PathPiece RepoListNotificationId where 	toPathPiece = pack . show 	fromPathPiece = readish . unpack 
Assistant/WebApp/Utility.hs view
@@ -24,11 +24,16 @@ import Git.Config import Assistant.Threads.Watcher import Assistant.NamedThread+import Types.StandardGroups+import Git.Remote+import Logs.PreferredContent+import Assistant.MakeRemote  import qualified Data.Map as M import Control.Concurrent import System.Posix.Signals (signalProcessGroup, sigTERM, sigKILL) import System.Posix.Process (getProcessGroupIDOf)+import Utility.Yesod  {- Use Nothing to change autocommit setting; or a remote to change  - its sync setting. -}@@ -118,3 +123,14 @@  getCurrentTransfers :: Handler TransferMap getCurrentTransfers = currentTransfers <$> liftAssistant getDaemonStatus++{- Runs an action that creates or enables a cloud remote,+ - and finishes setting it up; adding it to a group if it's not already in+ - one, starts syncing with it, and finishes by displaying the page to edit+ - it. -}+setupCloudRemote :: StandardGroup -> Annex RemoteName -> Handler a+setupCloudRemote defaultgroup maker = do+	r <- liftAnnex $ addRemote maker+	liftAnnex $ setStandardGroup (Remote.uuid r) defaultgroup+	liftAssistant $ syncRemote r+	redirect $ EditNewCloudRepositoryR $ Remote.uuid r
Assistant/WebApp/routes view
@@ -26,7 +26,7 @@ /config/repository/new/androidcamera AndroidCameraRepositoryR GET /config/repository/switcher RepositorySwitcherR GET /config/repository/switchto/#FilePath SwitchToRepositoryR GET-/config/repository/combine/#FilePathAndUUID CombineRepositoryR GET+/config/repository/combine/#FilePath/#UUID CombineRepositoryR GET /config/repository/edit/#UUID EditRepositoryR GET POST /config/repository/edit/new/#UUID EditNewRepositoryR GET POST /config/repository/edit/new/cloud/#UUID EditNewCloudRepositoryR GET POST@@ -37,13 +37,16 @@  /config/repository/add/drive AddDriveR GET POST /config/repository/add/drive/confirm/#RemovableDrive ConfirmAddDriveR GET-/config/repository/add/drive/finish/#RemovableDrive FinishAddDriveR GET+/config/repository/add/drive/genkey/#RemovableDrive GenKeyForDriveR GET+/config/repository/add/drive/finish/#RemovableDrive/#RepoKey FinishAddDriveR GET /config/repository/add/ssh AddSshR GET POST /config/repository/add/ssh/confirm/#SshData ConfirmSshR GET /config/repository/add/ssh/retry/#SshData RetrySshR GET /config/repository/add/ssh/make/git/#SshData MakeSshGitR GET /config/repository/add/ssh/make/rsync/#SshData MakeSshRsyncR GET /config/repository/add/cloud/rsync.net AddRsyncNetR GET POST+/config/repository/add/cloud/rsync.net/shared/#SshData MakeRsyncNetSharedR GET+/config/repository/add/cloud/rsync.net/gcrypt/#SshData/#RepoKey MakeRsyncNetGCryptR GET /config/repository/add/cloud/S3 AddS3R GET POST /config/repository/add/cloud/IA AddIAR GET POST /config/repository/add/cloud/glacier AddGlacierR GET POST@@ -62,6 +65,7 @@ /config/repository/pair/xmpp/friend/finish/#PairKey FinishXMPPPairFriendR GET  /config/repository/enable/rsync/#UUID EnableRsyncR GET POST+/config/repository/enable/gcrypt/#UUID EnableGCryptR GET POST /config/repository/enable/directory/#UUID EnableDirectoryR GET /config/repository/enable/S3/#UUID EnableS3R GET POST /config/repository/enable/IA/#UUID EnableIAR GET POST@@ -86,7 +90,7 @@ /buddylist/#NotificationId BuddyListR GET /notifier/buddylist NotifierBuddyListR GET -/repolist/#RepoListNotificationId RepoListR GET+/repolist/#NotificationId/#RepoSelector RepoListR GET /notifier/repolist/#RepoSelector NotifierRepoListR GET  /alert/close/#AlertId CloseAlert GET
Backend/SHA.hs view
@@ -1,6 +1,6 @@ {- git-annex SHA backends  -- - Copyright 2011,2012 Joey Hess <joey@kitenet.net>+ - Copyright 2011-2013 Joey Hess <joey@kitenet.net>  -  - Licensed under the GNU GPL version 3 or higher.  -}@@ -12,10 +12,10 @@ import Types.Backend import Types.Key import Types.KeySource+import Utility.Hash import Utility.ExternalSHA  import qualified Build.SysConfig as SysConfig-import Data.Digest.Pure.SHA import qualified Data.ByteString.Lazy as L import Data.Char @@ -31,11 +31,11 @@ backends = catMaybes $ map genBackendE sizes ++ map genBackend sizes  genBackend :: SHASize -> Maybe Backend-genBackend size = Just $ Backend+genBackend size = Just Backend 	{ name = shaName size 	, getKey = keyValue size 	, fsckKey = Just $ checkKeyChecksum size-	, canUpgradeKey = Just $ needsUpgrade+	, canUpgradeKey = Just needsUpgrade 	}  genBackendE :: SHASize -> Maybe Backend@@ -70,12 +70,14 @@ 	| shasize == 512 = use SysConfig.sha512 sha512 	| otherwise = error $ "bad sha size " ++ show shasize   where-	use Nothing sha = Left $ showDigest . sha-	use (Just c) sha-		{- use builtin, but slower sha for small files-		 - benchmarking indicates it's faster up to-		 - and slightly beyond 50 kb files -}-		| filesize < 51200 = use Nothing sha+	use Nothing hasher = Left $ show . hasher+	use (Just c) hasher+		{- Use builtin, but slightly slower hashing for+		 - smallish files. Cryptohash benchmarks 90 to 101%+		 - faster than external hashers, depending on the hash+		 - and system. So there is no point forking an external+		 - process unless the file is large. -}+		| filesize < 1048576 = use Nothing hasher 		| otherwise = Right c  {- A key is a checksum of its contents. -}
Build/BundledPrograms.hs view
@@ -35,6 +35,7 @@ 	, ifset SysConfig.wget "wget" 	, ifset SysConfig.bup "bup" 	, SysConfig.lsof+	, SysConfig.gcrypt 	, SysConfig.sha1 	, SysConfig.sha256 	, SysConfig.sha512
Build/Configure.hs view
@@ -38,6 +38,7 @@ 		[ ("gpg", "--version >/dev/null") 		, ("gpg2", "--version >/dev/null") ] 	, TestCase "lsof" $ findCmdPath "lsof" "lsof"+	, TestCase "gcrypt" $ findCmdPath "gcrypt" "git-remote-gcrypt" 	, TestCase "ssh connection caching" getSshConnectionCaching 	] ++ shaTestCases 	[ (1, "da39a3ee5e6b4b0d3255bfef95601890afd80709")
− Build/Configure.o

binary file changed (95744 → absent bytes)

− Build/DesktopFile.o

binary file changed (24176 → absent bytes)

Build/EvilSplicer.hs view
@@ -294,6 +294,8 @@ {- Tweaks code output by GHC in splices to actually build. Yipes. -} mangleCode :: String -> String mangleCode = flip_colon+	. remove_unnecessary_type_signatures+	. lambdaparenhack 	. lambdaparens 	. declaration_parens 	. case_layout@@ -331,6 +333,12 @@ 		preindent <- many1 $ oneOf " \n" 		string "\\ " 		lambdaparams <- restofline+		continuedlambdaparams <- many $ try $ do+			indent <- many1 $ char ' '+			p <- satisfy isLetter+			aram <- many $ satisfy isAlphaNum <|> oneOf "_"+			newline+			return $ indent ++ p:aram ++ "\n" 		indent <- many1 $ char ' ' 		string "-> " 		firstline <- restofline@@ -342,10 +350,46 @@ 		return $ concat  			[ prefix:preindent 			, "(\\ " ++ lambdaparams ++ "\n"+			, concat continuedlambdaparams 			, indent ++ "-> " 			, lambdaparens $ intercalate "\n" (firstline:lambdalines) 			, ")\n" 			]+	+	{- Hack to add missing parens in a specific case in yesod+	 - static route code.+	 -+	 -     StaticR+	 -     yesod_dispatch_env_a4iDV+	 -     (\ p_a4iE2 r_a4iE3+	 -        -> r_a4iE3 {Network.Wai.pathInfo = p_a4iE2}+	 -        xrest_a4iDT req_a4iDW)) }+	 -+	 - Need to add another paren around the lambda, and close it+	 - before its parameters. lambdaparens misses this one because+	 - there is already one paren present.+	 -+	 - FIXME: This is a hack. lambdaparens could just always add a+	 - layer of parens even when a lambda seems to be in parent.+	 -}+	lambdaparenhack = parsecAndReplace $ do+		indent <- many1 $ char ' '+		staticr <- string "StaticR"+		newline+		string indent+		yesod_dispatch_env <- restofline+		string indent+		lambdaprefix <- string "(\\ "+		l1 <- restofline+		string indent+		lambdaarrow <- string "   ->"+		l2 <- restofline+		return $ unlines+			[ indent ++ staticr+			, indent ++ yesod_dispatch_env+			, indent ++ "(" ++ lambdaprefix ++ l1+			, indent ++ lambdaarrow ++ l2 ++ ")"+			]  	restofline = manyTill (noneOf "\n") newline @@ -438,6 +482,19 @@ 	{- GHC does not properly parenthesise generated data type 	 - declarations. -} 	declaration_parens = replace "StaticR Route Static" "StaticR (Route Static)"++	{- A type signature is sometimes given for an entire lambda,+	 - which is not properly parenthesized or laid out. This is a+	 - hack to remove one specific case where this happens and the+	 - signature is easily inferred, so is just removed.+	 -}+	remove_unnecessary_type_signatures = parsecAndReplace $ do+		string " ::"+		newline+		many1 $ char ' '+		string "Text.Css.Block Text.Css.Resolved"+		newline+		return ""  	{- GHC may add full package and version qualifications for 	 - symbols from unimported modules. We don't want these.
− Build/InstallDesktopFile.o

binary file changed (4000 → absent bytes)

− Build/TestConfig.o

binary file changed (56512 → absent bytes)

Build/make-sdist.sh view
@@ -10,6 +10,7 @@ find . \( -name .git -or -name dist -or -name cabal-dev \) -prune \ 	-or -not -name \\*.orig -not -type d -print \ | perl -ne "print unless length >= 100 - length q{$sdist_dir}" \+| grep -v /doc/ \ | xargs cp --parents --target-directory dist/$sdist_dir  cd dist
Build/mdwn2man view
@@ -8,6 +8,7 @@  while (<>) { 	s{(\\?)\[\[([^\s\|\]]+)(\|[^\s\]]+)?\]\]}{$1 ? "[[$2]]" : $2}eg;+	s/\`([^\`]*)\`/\\fB$1\\fP/g; 	s/\`//g; 	s/^\s*\./\\&./g; 	if (/^#\s/) {@@ -25,7 +26,7 @@ 		$inlist=1; 		$spippara=0; 	}-	elsif (/.SH/) {+	elsif (/^.SH/) { 		$skippara=0; 		$inlist=0; 	}
CHANGELOG view
@@ -1,3 +1,57 @@+git-annex (4.20130921) UNRELEASED; urgency=low++  * Note that the layout of gcrypt repositories has changed, and+    if you created one you must manually upgrade it.+    See http://git-annex.branchable.com/upgrades/gcrypt/+  * git-annex-shell: Added support for operating inside gcrypt repositories.+  * import: Preserve top-level directory structure.+  * Use cryptohash rather than SHA for hashing when no external hash program+    is available. This is a significant speedup for SHA256 on OSX, for+    example.+  * Android build redone from scratch, many dependencies updated,+    and entire build can now be done using provided scripts.+  * assistant: Clear the list of failed transfers when doing a full transfer+    scan. This prevents repeated retries to download files that are not+    available, or are not referenced by the current git tree.+  * indirect: Better behavior when a file in direct mode is not owned by+    the user running the conversion.+  * add, import, assistant: Better preserve the mtime of symlinks,+    when when adding content that gets deduplicated.+  * webapp: Support storing encrypted git repositories on rsync.net.++ -- Joey Hess <joeyh@debian.org>  Sun, 22 Sep 2013 19:42:29 -0400++git-annex (4.20130920) unstable; urgency=low++  * webapp: Initial support for setting up encrypted removable drives.+  * Recommend using my patched gcrypt, which fixes some bugs:+    https://github.com/joeyh/git-remote-gcrypt+  * Support hot-swapping of removable drives containing gcrypt repositories.+  * list: New command, displays a compact table of remotes that+    contain files.+    (Thanks, anarcat for display code and mastensg for inspiration.)+  * fsck: Fix detection and fixing of present direct mode files that are+    wrongly represented as standin symlinks on crippled filesystems.+  * sync: Fix bug that caused direct mode mappings to not be updated+    when merging files into the tree on Windows.+  * sync: Don't fail if the directory it is run in gets removed by the+    sync.+  * addurl: Fix quvi audodetection, broken in last release.+  * status: In local mode, displays information about variance from configured+    numcopies levels. (--fast avoids calculating these)+  * gcrypt: Ensure that signing key is set to one of the participants keys.+  * webapp: Show encryption information when editing a remote.+  * Avoid unnecessarily catting non-symlink files from git, which can be+    so large it runs out of memory.++ -- Joey Hess <joeyh@debian.org>  Fri, 20 Sep 2013 10:34:51 -0400++git-annex (4.20130911) unstable; urgency=low++  * Fix problem with test suite in non-unicode locale.++ -- Joey Hess <joeyh@debian.org>  Wed, 11 Sep 2013 12:14:16 -0400+ git-annex (4.20130909) unstable; urgency=low    * initremote: Syntax change when setting up an encrypted special remote.
Command.hs view
@@ -111,7 +111,7 @@ 		Just n -> return $ Just n 		Nothing -> readish <$> checkAttr "annex.numcopies" file -numCopiesCheck :: FilePath -> Key -> (Int -> Int -> Bool) -> Annex Bool+numCopiesCheck :: FilePath -> Key -> (Int -> Int -> v) -> Annex v numCopiesCheck file key vs = do 	numcopiesattr <- numCopies file 	needed <- getNumCopies numcopiesattr
Command/Add.hs view
@@ -77,7 +77,7 @@ 		-- is present but not yet added to git 		showStart "add" file 		liftIO $ removeFile file-		next $ next $ cleanup file key =<< inAnnex key+		next $ next $ cleanup file key Nothing =<< inAnnex key  {- The file that's being added is locked down before a key is generated,  - to prevent it from being modified in between. This lock down is not@@ -98,13 +98,13 @@  - Lockdown can fail if a file gets deleted, and Nothing will be returned.  -} lockDown :: FilePath -> Annex (Maybe KeySource)-lockDown file = ifM (crippledFileSystem)+lockDown file = ifM crippledFileSystem 	( liftIO $ catchMaybeIO nohardlink 	, do 		tmp <- fromRepo gitAnnexTmpDir 		createAnnexDirectory tmp-		unlessM (isDirect) $ liftIO $-			void $ tryIO $ preventWrite file+		unlessM isDirect $ +			void $ liftIO $ tryIO $ preventWrite file 		liftIO $ catchMaybeIO $ do 			(tmpfile, h) <- openTempFile tmp $ 				relatedTemplate $ takeFileName file@@ -115,7 +115,7 @@   where   	nohardlink = do 		cache <- genInodeCache file-		return $ KeySource+		return KeySource 			{ keyFilename = file 			, contentLocation = file 			, inodeCache = cache@@ -123,7 +123,7 @@ 	withhardlink tmpfile = do 		createLink file tmpfile 		cache <- genInodeCache tmpfile-		return $ KeySource+		return KeySource 			{ keyFilename = file 			, contentLocation = tmpfile 			, inodeCache = cache@@ -134,8 +134,8 @@  - In direct mode, leaves the file alone, and just updates bookkeeping  - information.  -}-ingest :: (Maybe KeySource) -> Annex (Maybe Key)-ingest Nothing = return Nothing+ingest :: Maybe KeySource -> Annex (Maybe Key, Maybe InodeCache)+ingest Nothing = return (Nothing, Nothing) ingest (Just source) = do 	backend <- chooseBackend $ keyFilename source 	k <- genKey source backend@@ -147,24 +147,24 @@   where 	go k cache = ifM isDirect ( godirect k cache , goindirect k cache ) -	goindirect (Just (key, _)) _ = do+	goindirect (Just (key, _)) mcache = do 		catchAnnex (moveAnnex key $ contentLocation source) 			(undo (keyFilename source) key) 		liftIO $ nukeFile $ keyFilename source-		return $ Just key+		return $ (Just key, mcache) 	goindirect Nothing _ = failure "failed to generate a key"  	godirect (Just (key, _)) (Just cache) = do 		addInodeCache key cache 		finishIngestDirect key source-		return $ Just key+		return $ (Just key, Just cache) 	godirect _ _ = failure "failed to generate a key"  	failure msg = do 		warning $ keyFilename source ++ " " ++ msg 		when (contentLocation source /= keyFilename source) $ 			liftIO $ nukeFile $ contentLocation source-		return Nothing		+		return (Nothing, Nothing)  finishIngestDirect :: Key -> KeySource -> Annex () finishIngestDirect key source = do@@ -178,9 +178,10 @@ 		addContentWhenNotPresent key (keyFilename source)  perform :: FilePath -> CommandPerform-perform file = -	maybe stop (\key -> next $ cleanup file key True)-		=<< ingest =<< lockDown file+perform file = lockDown file >>= ingest >>= go+  where+  	go (Just key, cache) = next $ cleanup file key cache True+	go (Nothing, _) = stop  {- On error, put the file back so it doesn't seem to have vanished.  - This can be called before or after the symlink is in place. -}@@ -199,18 +200,17 @@ 		liftIO $ moveFile src file  {- Creates the symlink to the annexed content, returns the link target. -}-link :: FilePath -> Key -> Bool -> Annex String-link file key hascontent = flip catchAnnex (undo file key) $ do+link :: FilePath -> Key -> Maybe InodeCache -> Annex String+link file key mcache = flip catchAnnex (undo file key) $ do 	l <- inRepo $ gitAnnexLink file key 	replaceFile file $ makeAnnexLink l  #ifndef __ANDROID__-	when hascontent $ do-		-- touch the symlink to have the same mtime as the-		-- file it points to-		liftIO $ do-			mtime <- modificationTime <$> getFileStatus file-			touch file (TimeSpec mtime) False+	-- touch symlink to have same time as the original file,+	-- as provided in the InodeCache+	case mcache of+		Just c -> liftIO $ touch file (TimeSpec $ inodeCacheToMtime c) False+		Nothing -> noop #endif  	return l@@ -224,28 +224,28 @@  - Also, using git add allows it to skip gitignored files, unless forced  - to include them.  -}-addLink :: FilePath -> Key -> Bool -> Annex ()-addLink file key hascontent = ifM (coreSymlinks <$> Annex.getGitConfig)+addLink :: FilePath -> Key -> Maybe InodeCache -> Annex ()+addLink file key mcache = ifM (coreSymlinks <$> Annex.getGitConfig) 	( do-		_ <- link file key hascontent+		_ <- link file key mcache 		params <- ifM (Annex.getState Annex.force) 			( return [Param "-f"] 			, return [] 			) 		Annex.Queue.addCommand "add" (params++[Param "--"]) [file] 	, do-		l <- link file key hascontent+		l <- link file key mcache 		addAnnexLink l file 	) -cleanup :: FilePath -> Key -> Bool -> CommandCleanup-cleanup file key hascontent = do+cleanup :: FilePath -> Key -> Maybe InodeCache -> Bool -> CommandCleanup+cleanup file key mcache hascontent = do 	when hascontent $ 		logStatus key InfoPresent 	ifM (isDirect <&&> pure hascontent) 		( do 			l <- inRepo $ gitAnnexLink file key 			stageSymlink file =<< hashSymlink l-		, addLink file key hascontent+		, addLink file key mcache 		) 	return True
Command/AddUnused.hs view
@@ -29,7 +29,7 @@ perform :: Key -> CommandPerform perform key = next $ do 	logStatus key InfoPresent-	Command.Add.addLink file key False+	Command.Add.addLink file key Nothing 	return True   where 	file = "unused." ++ key2file key
Command/AddUrl.hs view
@@ -64,7 +64,7 @@ 	go url = case downloader of 		QuviDownloader -> usequvi 		DefaultDownloader -> -#ifdef WITH_QIVI+#ifdef WITH_QUVI 			ifM (liftIO $ Quvi.supported s') 				( usequvi 				, regulardownload url@@ -189,7 +189,7 @@ 	when (isJust mtmp) $ 		logStatus key InfoPresent 	setUrlPresent key url-	Command.Add.addLink file key False+	Command.Add.addLink file key Nothing 	whenM isDirect $ do 		void $ addAssociatedFile key file 		{- For moveAnnex to work in direct mode, the symlink
Command/ConfigList.hs view
@@ -10,6 +10,8 @@ import Common.Annex import Command import Annex.UUID+import qualified Git.Config+import Remote.GCrypt (coreGCryptId)  def :: [Command] def = [noCommit $ command "configlist" paramNothing seek@@ -21,5 +23,8 @@ start :: CommandStart start = do 	u <- getUUID-	liftIO $ putStrLn $ "annex.uuid=" ++ fromUUID u+	showConfig "annex.uuid" $ fromUUID u+	showConfig coreGCryptId =<< fromRepo (Git.Config.get coreGCryptId "") 	stop+  where+  	showConfig k v = liftIO $ putStrLn $ k ++ "=" ++ v
Command/EnableRemote.hs view
@@ -43,7 +43,7 @@ 	error $ prefix ++ 		if null names 			then ""-			else " Known special remotes: " ++ intercalate " " names+			else " Known special remotes: " ++ unwords names  perform :: RemoteType -> UUID -> R.RemoteConfig -> CommandPerform perform t u c = do
Command/Fsck.hs view
@@ -104,7 +104,7 @@ 				Nothing -> noop 				Just started -> do 					now <- liftIO getPOSIXTime-					when (now - realToFrac started >= delta) $+					when (now - realToFrac started >= delta) 						resetStartTime 		return True @@ -187,7 +187,7 @@ 	]  check :: [Annex Bool] -> Annex Bool-check cs = all id <$> sequence cs+check cs = and <$> sequence cs  {- Checks that the file's link points correctly to the content.  -@@ -225,7 +225,7 @@  	{- In direct mode, modified files will show up as not present, 	 - but that is expected and not something to do anything about. -}-	if (direct && not present)+	if direct && not present 		then return True 		else verifyLocationLog' key desc present u (logChange key u) @@ -271,7 +271,7 @@ {- Ensures that files whose content is available are in direct mode. -} verifyDirectMode :: Key -> FilePath -> Annex Bool verifyDirectMode key file = do-	whenM (isDirect <&&> islink) $ do+	whenM (isDirect <&&> isJust <$> isAnnexLink file) $ do 		v <- toDirectGen key file 		case v of 			Nothing -> noop@@ -279,8 +279,6 @@ 				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.@@ -347,7 +345,7 @@ checkBackendRemote :: Backend -> Key -> Remote -> Maybe FilePath -> Annex Bool checkBackendRemote backend key remote = maybe (return True) go   where-	go file = checkBackendOr (badContentRemote remote) backend key file+	go = checkBackendOr (badContentRemote remote) backend key  checkBackendOr :: (Key -> Annex String) -> Backend -> Key -> FilePath -> Annex Bool checkBackendOr bad backend key file =@@ -408,7 +406,7 @@ badContentDirect file key = do 	void $ liftIO $ catchMaybeIO $ touchFile file 	logStatus key InfoMissing-	return $ "left in place for you to examine"+	return "left in place for you to examine"  badContentRemote :: Remote -> Key -> Annex String badContentRemote remote key = do
Command/Get.hs view
@@ -75,7 +75,7 @@ 			( docopy r (trycopy full rs) 			, trycopy full rs 			)-	showlocs = Remote.showLocations key [] $+	showlocs = Remote.showLocations key [] 		"No other repository is known to contain the file." 	-- This check is to avoid an ugly message if a remote is a 	-- drive that is not mounted.
Command/ImportFeed.hs view
@@ -50,8 +50,7 @@ 	v <- findEnclosures url 	case v of 		Just l | not (null l) -> do-			ok <- all id-				<$> mapM (downloadEnclosure relaxed cache) l+			ok <- and <$> mapM (downloadEnclosure relaxed cache) l 			unless ok $ 				feedProblem url "problem downloading item" 			next $ cleanup url True
Command/Indirect.hs view
@@ -8,12 +8,14 @@ module Command.Indirect where  import System.PosixCompat.Files+import Control.Exception.Extensible  import Common.Annex import Command import qualified Git import qualified Git.Command import qualified Git.LsFiles+import Git.FileMode import Config import qualified Annex import Annex.Direct@@ -21,7 +23,9 @@ import Annex.CatFile import Annex.Version import Annex.Perms+import Annex.Exception import Init+import qualified Command.Add  def :: [Command] def = [notBareRepo $ noDaemonRunning $@@ -45,7 +49,7 @@ perform :: CommandPerform perform = do 	showStart "commit" ""-	whenM (stageDirect) $ do+	whenM stageDirect $ do 		showOutput 		void $ inRepo $ Git.Command.runBool 			[ Param "commit"@@ -67,8 +71,7 @@ 	{- Walk tree from top and move all present direct mode files into 	 - the annex, replacing with symlinks. Also delete direct mode 	 - caches and mappings. -}-	go (_, Nothing) = noop-	go (f, Just sha) = do+	go (f, Just sha, Just mode) | isSymLink mode = do 		r <- liftIO $ catchMaybeIO $ getSymbolicLinkStatus f 		case r of 			Just s@@ -78,23 +81,33 @@ 						return Nothing 				| otherwise ->  					maybe noop (fromdirect f)-						=<< catKey sha+						=<< catKey sha mode 			_ -> noop+	go _ = noop  	fromdirect f k = do 		showStart "indirect" f 		thawContentDir =<< calcRepo (gitAnnexLocation k) 		cleandirect k -- clean before content directory gets frozen 		whenM (liftIO $ not . isSymbolicLink <$> getSymbolicLinkStatus f) $ do-			moveAnnex k f-			l <- inRepo $ gitAnnexLink f k-			liftIO $ createSymbolicLink l f+			v <-tryAnnexIO (moveAnnex k f)+			case v of+				Right _ -> do +					l <- inRepo $ gitAnnexLink f k+					liftIO $ createSymbolicLink l f+				Left e -> catchAnnex (Command.Add.undo f k e)+					warnlocked 		showEndOk + 	warnlocked :: SomeException -> Annex ()+	warnlocked e = do+		warning $ show e+		warning "leaving this file as-is; correct this problem and run git annex add on it"+ 	cleandirect k = do 		liftIO . nukeFile =<< calcRepo (gitAnnexInodeCache k) 		liftIO . nukeFile =<< calcRepo (gitAnnexMapping k)-+	 cleanup :: CommandCleanup cleanup = do 	setVersion defaultVersion
+ Command/List.hs view
@@ -0,0 +1,88 @@+{- git-annex command+ -+ - Copyright 2013 Joey Hess <joey@kitenet.net>+ - Copyright 2013 Antoine Beaupré+ -+ - Licensed under the GNU GPL version 3 or higher.+ -}++module Command.List where++import qualified Data.Set as S+import qualified Data.Map as M+import Data.Function+import Data.Tuple.Utils+import Data.Ord++import Common.Annex+import Command+import Remote+import Logs.Trust+import Logs.UUID+import Annex.UUID+import qualified Option+import qualified Annex+import Git.Remote++def :: [Command]+def = [noCommit $ withOptions [allrepos] $ command "list" paramPaths seek+	SectionQuery "show which remotes contain files"]++allrepos :: Option+allrepos = Option.flag [] "allrepos" "show all repositories, not only remotes"++seek :: [CommandSeek]+seek = +	[ withValue getList $ withNothing . startHeader+	, withValue getList $ withFilesInGit . whenAnnexed . start+	]++getList :: Annex [(UUID, RemoteName, TrustLevel)]+getList = ifM (Annex.getFlag $ Option.name allrepos)+	( nubBy ((==) `on` fst3) <$> ((++) <$> getRemotes <*> getAll)+	, getRemotes+	)+  where+	getRemotes = do+		rs <- remoteList+		ts <- mapM (lookupTrust . uuid) rs+		hereu <- getUUID+		heretrust <- lookupTrust hereu+		return $ (hereu, "here", heretrust) : zip3 (map uuid rs) (map name rs) ts+	getAll = do+		rs <- M.toList <$> uuidMap+		rs3 <- forM rs $ \(u, n) -> (,,)+			<$> pure u+			<*> pure n+			<*> lookupTrust u+		return $ sortBy (comparing snd3) $+			filter (\t -> thd3 t /= DeadTrusted) rs3++startHeader :: [(UUID, RemoteName, TrustLevel)] -> CommandStart+startHeader l = do+	liftIO $ putStrLn $ header $ map (\(_, n, t) -> (n, t)) l+	stop++start :: [(UUID, RemoteName, TrustLevel)] -> FilePath -> (Key, Backend) -> CommandStart+start l file (key, _) = do+	ls <- S.fromList <$> keyLocations key+	liftIO $ putStrLn $ format (map (\(u, _, t) -> (t, S.member u ls)) l) file+	stop++type Present = Bool++header :: [(RemoteName, TrustLevel)] -> String+header remotes = unlines (zipWith formatheader [0..] remotes) ++ pipes (length remotes)+  where+    formatheader n (remotename, trustlevel) = pipes n ++ remotename ++ trust trustlevel+    pipes = flip replicate '|'+    trust UnTrusted = " (untrusted)"+    trust _ = ""++format :: [(TrustLevel, Present)] -> FilePath -> String+format remotes file = thereMap ++ " " ++ file+  where +    thereMap = concatMap there remotes+    there (UnTrusted, True) = "x"+    there (_, True) = "X"+    there (_, False) = "_"
Command/Map.hs view
@@ -20,7 +20,7 @@ import Annex.UUID import Logs.UUID import Logs.Trust-import Remote.Helper.Ssh+import qualified Remote.Helper.Ssh as Ssh import qualified Utility.Dot as Dot  -- a link from the first repository to the second (its remote)@@ -203,9 +203,9 @@ 	  where 		p = proc cmd $ toCommand params -	configlist = onRemote r (pipedconfig, Nothing) "configlist" [] []+	configlist = Ssh.onRemote r (pipedconfig, Nothing) "configlist" [] [] 	manualconfiglist = do-		sshparams <- sshToRepo r [Param sshcmd]+		sshparams <- Ssh.toRepo r [Param sshcmd] 		liftIO $ pipedconfig "ssh" sshparams 	  where 		sshcmd = cddir ++ " && " ++
Command/Merge.hs view
@@ -11,7 +11,7 @@ import Command import qualified Annex.Branch import qualified Git.Branch-import Command.Sync (mergeLocal)+import Command.Sync (prepMerge, mergeLocal)  def :: [Command] def = [command "merge" paramNothing seek SectionMaintenance@@ -35,4 +35,5 @@ mergeSynced :: CommandStart mergeSynced = do 	branch <- inRepo Git.Branch.current+	prepMerge 	maybe stop mergeLocal branch
Command/Move.hs view
@@ -38,7 +38,7 @@ start to from move file (key, _) = start' to from move (Just file) key  startKey :: Maybe Remote -> Maybe Remote -> Bool -> Key -> CommandStart-startKey to from move key = start' to from move Nothing key+startKey to from move = start' to from move Nothing  start' :: Maybe Remote -> Maybe Remote -> Bool -> AssociatedFile -> Key -> CommandStart start' to from move afile key = do
Command/PreCommit.hs view
@@ -24,7 +24,7 @@ seek :: [CommandSeek] seek = 	-- fix symlinks to files being committed-	[ whenNotDirect $ withFilesToBeCommitted $ whenAnnexed $ Command.Fix.start+	[ whenNotDirect $ withFilesToBeCommitted $ whenAnnexed Command.Fix.start 	-- inject unlocked files into the annex 	, whenNotDirect $ withFilesUnlockedToBeCommitted startIndirect 	-- update direct mode mappings for committed files@@ -44,11 +44,11 @@ 	next $ liftIO clean   where 	go diff = do-		withkey (Git.DiffTree.srcsha diff) removeAssociatedFile-		withkey (Git.DiffTree.dstsha diff) addAssociatedFile+		withkey (Git.DiffTree.srcsha diff) (Git.DiffTree.srcmode diff) removeAssociatedFile+		withkey (Git.DiffTree.dstsha diff) (Git.DiffTree.dstmode diff) addAssociatedFile 	  where-		withkey sha a = when (sha /= nullSha) $ do-			k <- catKey sha+		withkey sha mode a = when (sha /= nullSha) $ do+			k <- catKey sha mode 			case k of 				Nothing -> noop 				Just key -> void $ a key (Git.DiffTree.file diff)
Command/ReKey.hs view
@@ -66,6 +66,6 @@  	-- Update symlink to use the new key. 	liftIO $ removeFile file-	Command.Add.addLink file newkey True+	Command.Add.addLink file newkey Nothing 	logStatus newkey InfoPresent 	return True
Command/RecvKey.hs view
@@ -32,7 +32,7 @@ start :: Key -> CommandStart start key = ifM (inAnnex key) 	( error "key is already present in annex"-	, fieldTransfer Download key $ \_p -> do+	, fieldTransfer Download key $ \_p -> 		ifM (getViaTmp key go) 			( do 				-- forcibly quit after receiving one key,
Command/Reinject.hs view
@@ -34,7 +34,7 @@ start _ = error "specify a src file and a dest file"  perform :: FilePath -> FilePath -> (Key, Backend) -> CommandPerform-perform src _dest (key, backend) = do+perform src _dest (key, backend) = 	{- Check the content before accepting it. -} 	ifM (Command.Fsck.checkKeySizeOr reject key src 		<&&> Command.Fsck.checkBackendOr reject backend key src)
Command/SendKey.hs view
@@ -46,6 +46,6 @@ 	ok <- maybe (a $ const noop) 		(\u -> runTransfer (Transfer direction (toUUID u) key) afile noRetry a) 		=<< Fields.getField Fields.remoteUUID-	if ok-		then liftIO exitSuccess-		else liftIO exitFailure+	liftIO $ if ok+		then exitSuccess+		else exitFailure
Command/Status.hs view
@@ -13,6 +13,7 @@ import qualified Data.Map as M import Text.JSON import Data.Tuple+import Data.Ord import System.PosixCompat.Files  import Common.Annex@@ -49,10 +50,23 @@ 	, backendsKeys :: M.Map String Integer 	} +data NumCopiesStats = NumCopiesStats+	{ numCopiesVarianceMap :: M.Map Variance Integer+	}++newtype Variance = Variance Int+	deriving (Eq, Ord)++instance Show Variance where+	show (Variance n)+		| n >= 0 = "numcopies +" ++ show n+		| otherwise = "numcopies " ++ show n+ -- cached info that multiple Stats use data StatInfo = StatInfo 	{ presentData :: Maybe KeyData 	, referencedData :: Maybe KeyData+	, numCopiesStats :: Maybe NumCopiesStats 	}  -- a state monad for running Stats in@@ -77,20 +91,26 @@  globalStatus :: Annex () globalStatus = do-	fast <- Annex.getState Annex.fast-	let stats = if fast-		then global_fast_stats-		else global_fast_stats ++ global_slow_stats+	stats <- selStats global_fast_stats global_slow_stats 	showCustom "status" $ do-		evalStateT (mapM_ showStat stats) (StatInfo Nothing Nothing)+		evalStateT (mapM_ showStat stats) (StatInfo Nothing Nothing Nothing) 		return True  localStatus :: FilePath -> Annex () localStatus dir = showCustom (unwords ["status", dir]) $ do-	let stats = map (\s -> s dir) local_stats+	stats <- selStats (tostats local_fast_stats) (tostats local_slow_stats) 	evalStateT (mapM_ showStat stats) =<< getLocalStatInfo dir 	return True+  where+  	tostats = map (\s -> s dir) +selStats :: [Stat] -> [Stat] -> Annex [Stat]+selStats fast_stats slow_stats = do+	fast <- Annex.getState Annex.fast+	return $ if fast+		then fast_stats+		else fast_stats ++ slow_stats+ {- Order is significant. Less expensive operations, and operations  - that share data go together.  -}@@ -116,14 +136,18 @@ 	, bloom_info 	, backend_usage 	]-local_stats :: [FilePath -> Stat]-local_stats =+local_fast_stats :: [FilePath -> Stat]+local_fast_stats = 	[ local_dir 	, const local_annex_keys 	, const local_annex_size 	, const known_annex_keys 	, const known_annex_size 	]+local_slow_stats :: [FilePath -> Stat]+local_slow_stats =+	[ const numcopies_stats+	]  stat :: String -> (String -> StatState String) -> Stat stat desc a = return $ Just (desc, a desc)@@ -214,10 +238,10 @@ transfer_list = stat "transfers in progress" $ nojson $ lift $ do 	uuidmap <- Remote.remoteMap id 	ts <- getTransfers-	if null ts-		then return "none"-		else return $ multiLine $-			map (\(t, i) -> line uuidmap t i) $ sort ts+	return $ if null ts+		then "none"+		else multiLine $+			map (uncurry $ line uuidmap) $ sort ts   where 	line uuidmap t i = unwords 		[ showLcDirection (transferDirection t) ++ "ing"@@ -255,6 +279,14 @@ 		reverse $ sort $ map swap $ M.toList $ 		M.unionWith (+) x y +numcopies_stats :: Stat+numcopies_stats = stat "numcopies stats" $ nojson $+	calc <$> (maybe M.empty numCopiesVarianceMap <$> cachedNumCopiesStats)+  where+	calc = multiLine+		. map (\(variance, count) -> show variance ++ ": " ++ show count)+		. reverse . sortBy (comparing snd) . M.toList+ cachedPresentData :: StatState KeyData cachedPresentData = do 	s <- get@@ -276,29 +308,40 @@ 			put s { referencedData = Just v } 			return v +-- currently only available for local status+cachedNumCopiesStats :: StatState (Maybe NumCopiesStats)+cachedNumCopiesStats = numCopiesStats <$> get+ getLocalStatInfo :: FilePath -> Annex StatInfo getLocalStatInfo dir = do+	fast <- Annex.getState Annex.fast 	matcher <- Limit.getMatcher-	(presentdata, referenceddata) <-+	(presentdata, referenceddata, numcopiesstats) <- 		Command.Unused.withKeysFilesReferencedIn dir initial-			(update matcher)-	return $ StatInfo (Just presentdata) (Just referenceddata)+			(update matcher fast)+	return $ StatInfo (Just presentdata) (Just referenceddata) (Just numcopiesstats)   where-	initial = (emptyKeyData, emptyKeyData)-	update matcher key file vs@(presentdata, referenceddata) =+	initial = (emptyKeyData, emptyKeyData, emptyNumCopiesStats)+	update matcher fast key file vs@(presentdata, referenceddata, numcopiesstats) = 		ifM (matcher $ FileInfo file file)-			( (,)+			( (,,) 				<$> ifM (inAnnex key) 					( return $ addKey key presentdata 					, return presentdata 					) 				<*> pure (addKey key referenceddata)+				<*> if fast+					then return numcopiesstats+					else updateNumCopiesStats key file numcopiesstats 			, return vs 			)  emptyKeyData :: KeyData emptyKeyData = KeyData 0 0 0 M.empty +emptyNumCopiesStats :: NumCopiesStats+emptyNumCopiesStats = NumCopiesStats M.empty+ foldKeys :: [Key] -> KeyData foldKeys = foldl' (flip addKey) emptyKeyData @@ -313,6 +356,13 @@ 	!size' = maybe size (+ size) ks 	!unknownsize' = maybe (unknownsize + 1) (const unknownsize) ks 	ks = keySize key++updateNumCopiesStats :: Key -> FilePath -> NumCopiesStats -> Annex NumCopiesStats+updateNumCopiesStats key file stats = do+	variance <- Variance <$> numCopiesCheck file key (-)+	return $ stats { numCopiesVarianceMap = update (numCopiesVarianceMap stats) variance }+  where+  	update m variance = M.insertWith' (+) variance 1 m  showSizeKeys :: KeyData -> String showSizeKeys d = total ++ missingnote
Command/Sync.hs view
@@ -29,6 +29,7 @@ import Types.Key import Config import Annex.ReplaceFile+import Git.FileMode  import Data.Hash.MD5 @@ -39,6 +40,7 @@ -- syncing involves several operations, any of which can independently fail seek :: CommandSeek seek rs = do+	prepMerge 	branch <- fromMaybe nobranch <$> inRepo Git.Branch.current 	remotes <- syncRemotes rs 	return $ concat@@ -52,6 +54,11 @@   where 	nobranch = error "no branch is checked out" +{- Merging may delete the current directory, so go to the top+ - of the repo. -}+prepMerge :: Annex ()+prepMerge = liftIO . setCurrentDirectory =<< fromRepo Git.repoPath+ syncBranch :: Git.Ref -> Git.Ref syncBranch = Git.Ref.under "refs/heads/synced/" @@ -79,20 +86,19 @@ 	fastest = fromMaybe [] . headMaybe . Remote.byCost  commit :: CommandStart-commit = next $ next $ do-	ifM isDirect-		( do-			void $ stageDirect-			runcommit []-		, runcommit [Param "-a"]-		)+commit = next $ next $ ifM isDirect+	( do+		void stageDirect+		runcommit []+	, runcommit [Param "-a"]+	)   where 	runcommit ps = do 		showStart "commit" "" 		showOutput 		Annex.Branch.commit "update" 		-- Commit will fail when the tree is clean, so ignore failure.-		let params = (Param "commit") : ps +++		let params = Param "commit" : ps ++ 			[Param "-m", Param "git-annex automatic sync"] 		_ <- inRepo $ tryIO . Git.Command.runQuiet params 		return True@@ -144,12 +150,12 @@  - 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 -> Maybe Git.Ref -> CommandCleanup mergeRemote remote b = case b of 	Nothing -> do 		branch <- inRepo Git.Branch.currentUnsafe-		all id <$> (mapM merge $ branchlist branch)-	Just _ -> all id <$> (mapM merge =<< tomerge (branchlist b))+		and <$> mapM merge (branchlist branch)+	Just _ -> and <$> (mapM merge =<< tomerge (branchlist b))   where 	merge = mergeFrom . remoteBranch remote 	tomerge branches = filterM (changed remote) branches@@ -214,7 +220,7 @@  mergeAnnex :: CommandStart mergeAnnex = do-	void $ Annex.Branch.forceUpdate+	void Annex.Branch.forceUpdate 	stop  {- Merges from a branch into the current branch. -}@@ -237,7 +243,7 @@ 				mergeDirectCleanup d oldsha newsha 			_ -> noop 		return r-	runmerge a = ifM (a)+	runmerge a = ifM a 		( return True 		, resolveMerge 		)@@ -261,7 +267,7 @@ resolveMerge = do 	top <- fromRepo Git.repoPath 	(fs, cleanup) <- inRepo (LsFiles.unmerged [top])-	merged <- all id <$> mapM resolveMerge' fs+	merged <- and <$> mapM resolveMerge' fs 	void $ liftIO cleanup  	(deleted, cleanup2) <- inRepo (LsFiles.deleted [top])@@ -284,7 +290,7 @@ 		withKey LsFiles.valUs $ \keyUs -> 			withKey LsFiles.valThem $ \keyThem -> do 				ifM isDirect-					( maybe noop (\k -> removeDirect k file) keyUs+					( maybe noop (`removeDirect` file) keyUs 					, liftIO $ nukeFile file 					) 				Annex.Queue.addCommand "rm" [Params "--quiet -f --"] [file]@@ -300,14 +306,13 @@ 			makelink keyThem 			return True 	file = LsFiles.unmergedFile u-	issymlink select = any (select (LsFiles.unmergedBlobType u) ==)-		[Just SymlinkBlob, Nothing]+	issymlink select = select (LsFiles.unmergedBlobType u) `elem` [Just SymlinkBlob, Nothing] 	makelink (Just key) = do 		let dest = mergeFile file key 		l <- inRepo $ gitAnnexLink dest key 		replaceFile dest $ makeAnnexLink l 		stageSymlink dest =<< hashSymlink l-		whenM (isDirect) $+		whenM isDirect $ 			toDirect key dest 	makelink _ = noop 	withKey select a = do@@ -315,7 +320,7 @@ 		case msha of 			Nothing -> a Nothing 			Just sha -> do-				key <- catKey sha+				key <- catKey sha symLinkMode 				maybe (return False) (a . Just) key  {- The filename to use when resolving a conflicted merge of a file,
Command/TransferInfo.hs view
@@ -36,7 +36,7 @@  -} start :: [String] -> CommandStart start (k:[]) = do-	case (file2key k) of+	case file2key k of 		Nothing -> error "bad key" 		(Just key) -> whenM (inAnnex key) $ do 			file <- Fields.getField Fields.associatedFile
Command/TransferKeys.hs view
@@ -41,7 +41,7 @@  convertFd :: Maybe String -> Annex (Maybe Handle) convertFd Nothing = return Nothing-convertFd (Just s) = liftIO $ do+convertFd (Just s) = liftIO $  	case readish s of 		Nothing -> error "bad fd" 		Just fd -> Just <$> fdToHandle fd
Command/Unannex.hs view
@@ -46,7 +46,7 @@ 	-- git as a normal non-annexed file, to thinking that the 	-- file has been unlocked and needs to be re-annexed. 	(s, reap) <- inRepo $ LsFiles.staged [file]-	when (not $ null s) $+	unless (null s) $ 		inRepo $ Git.Command.run 			[ Param "commit" 			, Param "-q"
Command/Unused.hs view
@@ -293,10 +293,9 @@ 	forM_ ts $ tKey lookAtWorkingTree >=> maybe noop a 	liftIO $ void clean   where-	tKey True = Backend.lookupFile . DiffTree.file >=*>-			fmap fst-	tKey False = catFile ref . DiffTree.file >=*>-			fileKey . takeFileName . encodeW8 . L.unpack+	tKey True = fmap fst <$$> Backend.lookupFile . DiffTree.file+	tKey False = fileKey . takeFileName . encodeW8 . L.unpack <$$>+		catFile ref . DiffTree.file  {- Looks in the specified directory for bad/tmp keys, and returns a list  - of those that might still have value, or might be stale and removable.
Command/Vicfg.hs view
@@ -123,14 +123,14 @@ 	settings field desc showvals showdefaults = concat 		[ desc 		, concatMap showvals $ sort $ map swap $ M.toList $ field cfg-		, concatMap (\u -> lcom $ showdefaults u) $ missing field+		, concatMap (lcom . showdefaults) $ missing field 		]  	line setting u value =-		[ com $ "(for " ++ (fromMaybe "" $ M.lookup u descs) ++ ")"+		[ com $ "(for " ++ fromMaybe "" (M.lookup u descs) ++ ")" 		, unwords [setting, fromUUID u, "=", value] 		]-	lcom = map (\l -> if "#" `isPrefixOf` l then l else "#" ++ l)+	lcom = map (\l -> if "#" `isPrefixOf` l then l else '#' : l) 	missing field = S.toList $ M.keysSet descs `S.difference` M.keysSet (field cfg)  {- If there's a parse error, returns a new version of the file,@@ -139,7 +139,7 @@ parseCfg curcfg = go [] curcfg . lines   where 	go c cfg []-		| null (catMaybes $ map fst c) = Right cfg+		| null (mapMaybe fst c) = Right cfg 		| otherwise = Left $ unlines $ 			badheader ++ concatMap showerr (reverse c) 	go c cfg (l:ls) = case parse (dropWhile isSpace l) cfg of
Command/WebApp.hs view
@@ -55,7 +55,7 @@  start' :: Bool -> Maybe HostName -> CommandStart start' allowauto listenhost = do-	liftIO $ ensureInstalled+	liftIO ensureInstalled 	ifM isInitialized ( go , auto ) 	stop   where@@ -209,7 +209,7 @@ 			, std_err = maybe Inherit UseHandle errh 			} 		exitcode <- waitForProcess pid-		unless (exitcode == ExitSuccess) $ do+		unless (exitcode == ExitSuccess) $ 			hPutStrLn (fromMaybe stderr errh) "failed to start web browser"  {- web.browser is a generic git config setting for a web browser program -}
Common.hs view
@@ -28,6 +28,7 @@ import Utility.Path as X import Utility.Directory as X import Utility.Monad as X+import Utility.Data as X import Utility.Applicative as X import Utility.FileSystemEncoding as X 
− Common.o

binary file changed (906 → absent bytes)

Config.hs view
@@ -36,8 +36,11 @@  {- Unsets a git config setting. (Leaves it in state currently.) -} unsetConfig :: ConfigKey -> Annex ()-unsetConfig (ConfigKey key) = inRepo $ Git.Command.run-	[Param "config", Param "--unset", Param key]+unsetConfig ck@(ConfigKey key) = ifM (isJust <$> getConfigMaybe ck)+	( inRepo $ Git.Command.run+		[Param "config", Param "--unset", Param key]+	, noop -- avoid unsetting something not set; that would fail+	)  {- A per-remote config setting in git config. -} remoteConfig :: Git.Repo -> UnqualifiedConfigKey -> ConfigKey
Config/Cost.hs view
@@ -65,7 +65,7 @@ 	| x == y = x 	| x > y = -- avoid fractions unless needed 		let mid = y + (x - y) / 2-		    mid' = fromIntegral ((floor mid) :: Int)+		    mid' = fromIntegral (floor mid :: Int) 		in if mid' > y then mid' else mid 	| otherwise = costBetween y x 
Config/Files.hs view
@@ -34,7 +34,7 @@ 	when (dirs' /= dirs) $ do 		f <- autoStartFile 		createDirectoryIfMissing True (parentDir f)-		viaTmp writeFile f $ unlines $ dirs'+		viaTmp writeFile f $ unlines dirs'  {- 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
− Config/Files.o

binary file changed (25568 → absent bytes)

Creds.hs view
@@ -16,10 +16,9 @@ import Types.Remote (RemoteConfig, RemoteConfigKey) import Remote.Helper.Encryptable (remoteCipher, embedCreds) #ifndef mingw32_HOST_OS-import Utility.Env (setEnv)+import Utility.Env (setEnv, getEnv) #endif -import System.Environment import qualified Data.ByteString.Lazy.Char8 as L import qualified Data.Map as M import Utility.Base64@@ -101,11 +100,10 @@ {- Gets a CredPair from the environment. -} getEnvCredPair :: CredPairStorage -> IO (Maybe CredPair) getEnvCredPair storage = liftM2 (,)-	<$> get uenv-	<*> get penv+	<$> getEnv uenv+	<*> getEnv penv   where 	(uenv, penv) = credPairEnvironment storage-	get = catchMaybeIO . getEnv  {- Stores a CredPair in the environment. -} setEnvCredPair :: CredPair -> CredPairStorage -> IO ()
Crypto.hs view
@@ -102,7 +102,7 @@ 	cipher <- decryptCipher encipher 	encryptCipher cipher variant $ KeyIds ks'   where-	listKeyIds = mapM (Gpg.findPubKeys >=*> keyIds) >=*> concat+	listKeyIds = concat <$$> mapM (keyIds <$$> Gpg.findPubKeys)  describeCipher :: StorableCipher -> String describeCipher (SharedCipher _) = "shared cipher"
Git/CatFile.hs view
@@ -10,6 +10,7 @@ 	catFileStart, 	catFileStop, 	catFile,+	catTree, 	catObject, 	catObjectDetails, ) where@@ -17,9 +18,10 @@ import System.IO import qualified Data.ByteString as S import qualified Data.ByteString.Lazy as L-import Data.Digest.Pure.SHA import Data.Char import System.Process (std_out, std_err)+import Numeric+import System.Posix.Types  import Common import Git@@ -28,6 +30,7 @@ import Git.Types import Git.FilePath import qualified Utility.CoProcess as CoProcess+import Utility.Hash  data CatFileHandle = CatFileHandle CoProcess.CoProcessHandle Repo @@ -100,8 +103,31 @@ 				} 		fileEncoding h 		content <- L.hGetContents h-		let sha = (\s -> length s `seq` s) (showDigest $ sha1 content)+		let sha = (\s -> length s `seq` s) (show $ sha1 content) 		ok <- checkSuccessProcess pid 		return $ if ok 			then Just (content, Ref sha) 			else Nothing++{- Gets a list of files and directories in a tree. (Not recursive.) -}+catTree :: CatFileHandle -> Ref -> IO [(FilePath, FileMode)]+catTree h treeref = go <$> catObjectDetails h treeref+  where+  	go Nothing = []+	go (Just (b, _)) = parsetree [] b++	parsetree c b = case L.break (== 0) b of+		(modefile, rest)+			| L.null modefile -> c+			| otherwise -> parsetree+				(parsemodefile modefile:c)+				(dropsha rest)++	-- these 20 bytes after the NUL hold the file's sha+	-- TODO: convert from raw form to regular sha+	dropsha = L.drop 21++	parsemodefile b = +		let (modestr, file) = separate (== ' ') (encodeW8 $ L.unpack b)+		in (file, readmode modestr)+	readmode = fst . fromMaybe (0, undefined) . headMaybe . readOct
Git/Config.hs view
@@ -10,6 +10,7 @@ import qualified Data.Map as M import Data.Char import System.Process (cwd, env)+import Control.Exception.Extensible  import Common import Git@@ -153,3 +154,26 @@  isBare :: Repo -> Bool isBare r = fromMaybe False $ isTrue =<< getMaybe "core.bare" r++{- Runs a command to get the configuration of a repo,+ - and returns a repo populated with the configuration, as well as the raw+ - output of the command. -}+fromPipe :: Repo -> String -> [CommandParam] -> IO (Either SomeException (Repo, String))+fromPipe r cmd params = try $+	withHandle StdoutHandle createProcessSuccess p $ \h -> do+ 		fileEncoding h+		val <- hGetContentsStrict h+		r' <- store val r+		return (r', val)+  where+	p = proc cmd $ toCommand params++{- Reads git config from a specified file and returns the repo populated+ - with the configuration. -}+fromFile :: Repo -> FilePath -> IO (Either SomeException (Repo, String))+fromFile r f = fromPipe r "git"+	[ Param "config"+	, Param "--file"+	, File f+	, Param "--list"+	]
Git/Construct.hs view
@@ -23,8 +23,6 @@ 	checkForRepo, ) where -{-# LANGUAGE CPP #-}- #ifndef mingw32_HOST_OS import System.Posix.User #else@@ -36,6 +34,7 @@ import Common import Git.Types import Git+import Git.Remote import qualified Git.Url as Url import Utility.UserInfo @@ -143,51 +142,10 @@ {- Constructs a new Repo for one of a Repo's remotes using a given  - location (ie, an url). -} fromRemoteLocation :: String -> Repo -> IO Repo-fromRemoteLocation s repo = gen $ calcloc s+fromRemoteLocation s repo = gen $ parseRemoteLocation s repo   where-	gen v	-#ifdef mingw32_HOST_OS-		| dosstyle v = fromRemotePath (dospath v) repo-#endif-		| scpstyle v = fromUrl $ scptourl v-		| urlstyle v = fromUrl v-		| otherwise = fromRemotePath v repo-	-- insteadof config can rewrite remote location-	calcloc l-		| null insteadofs = l-		| otherwise = replacement ++ drop (length bestvalue) l-	  where-		replacement = drop (length prefix) $-			take (length bestkey - length suffix) bestkey-		(bestkey, bestvalue) = maximumBy longestvalue insteadofs-		longestvalue (_, a) (_, b) = compare b a-		insteadofs = filterconfig $ \(k, v) -> -			startswith prefix k &&-			endswith suffix k &&-			startswith v l-		filterconfig f = filter f $-			concatMap splitconfigs $ M.toList $ fullconfig repo-		splitconfigs (k, vs) = map (\v -> (k, v)) vs-		(prefix, suffix) = ("url." , ".insteadof")-	urlstyle v = isURI v || ":" `isInfixOf` v && "//" `isInfixOf` v-	-- git remotes can be written scp style -- [user@]host:dir-	-- but foo::bar is a git-remote-helper location instead-	scpstyle v = ":" `isInfixOf` v -		&& not ("//" `isInfixOf` v)-		&& not ("::" `isInfixOf` v)-	scptourl v = "ssh://" ++ host ++ slash dir-	  where-		(host, dir) = separate (== ':') v-		slash d	| d == "" = "/~/" ++ d-			| "/" `isPrefixOf` d = d-			| "~" `isPrefixOf` d = '/':d-			| otherwise = "/~/" ++ d-#ifdef mingw32_HOST_OS-	-- git on Windows will write a path to .git/config with "drive:",-	-- which is not to be confused with a "host:"-	dosstyle = hasDrive-	dospath = fromInternalGitPath-#endif+	gen (RemotePath p) = fromRemotePath p repo+	gen (RemoteUrl u) = fromUrl u  {- Constructs a Repo from the path specified in the git remotes of  - another Repo. -}
+ Git/FileMode.hs view
@@ -0,0 +1,23 @@+{- git file modes+ -+ - Copyright 2013 Joey Hess <joey@kitenet.net>+ -+ - Licensed under the GNU GPL version 3 or higher.+ -}++{-# LANGUAGE CPP #-}++module Git.FileMode where++import Utility.FileMode++import System.PosixCompat.Types++symLinkMode :: FileMode+symLinkMode = 40960++{- Git uses a special file mode to indicate a symlink. This is the case+ - even on Windows, so we hard code the valuse here, rather than using+ - System.Posix.Files.symbolicLinkMode. -}+isSymLink :: FileMode -> Bool+isSymLink = checkMode symLinkMode
Git/GCrypt.hs view
@@ -13,7 +13,9 @@ import Git.Types import Git.Construct import qualified Git.Config as Config+import qualified Git.Command as Command import Utility.Gpg+import Git.Remote  urlPrefix :: String urlPrefix = "gcrypt::"@@ -31,8 +33,8 @@  - Throws an exception if an url is invalid or the repo does not use  - gcrypt.  -}-encryptedRepo :: Repo -> Repo -> IO Repo-encryptedRepo baserepo = go+encryptedRemote :: Repo -> Repo -> IO Repo+encryptedRemote baserepo = go   where   	go Repo { location = Url url } 		| urlPrefix `isPrefixOf` u =@@ -44,12 +46,33 @@ 	go _ = notencrypted 	notencrypted = error "not a gcrypt encrypted repository" -type RemoteName = String+data ProbeResult = Decryptable | NotDecryptable | NotEncrypted +{- Checks if the git repo at a location uses gcrypt.+ - + - Rather expensive -- many need to fetch the entire repo contents.+ - (Which is fine if the repo is going to be added as a remote..)+ -}+probeRepo :: String -> Repo -> IO ProbeResult+probeRepo loc baserepo = do+	let p = proc "git" $ toCommand $ Command.gitCommandLine+		[ Param "remote-gcrypt"+		, Param "--check"+		, Param loc+		] baserepo+	(_, _, _, pid) <- createProcess p+	code <- waitForProcess pid+	return $ case code of+		ExitSuccess -> Decryptable+		ExitFailure 1 -> NotDecryptable+		ExitFailure _ -> NotEncrypted++type GCryptId = String+ {- gcrypt gives each encrypted repository a uique gcrypt-id,  - which is stored in the repository (in encrypted form)  - and cached in a per-remote gcrypt-id configuration setting. -}-remoteRepoId :: Repo -> Maybe RemoteName -> Maybe String+remoteRepoId :: Repo -> Maybe RemoteName -> Maybe GCryptId remoteRepoId = getRemoteConfig "gcrypt-id"  getRemoteConfig :: String -> Repo -> Maybe RemoteName -> Maybe String@@ -73,6 +96,9 @@  remoteParticipantConfigKey :: RemoteName -> String remoteParticipantConfigKey = remoteConfigKey "gcrypt-participants"++remoteSigningKey :: RemoteName -> String+remoteSigningKey = remoteConfigKey "gcrypt-signingkey"  remoteConfigKey :: String -> RemoteName -> String remoteConfigKey key remotename = "remote." ++ remotename ++ "." ++ key
Git/LsFiles.hs view
@@ -28,6 +28,9 @@ import Git.Types import Git.Sha +import Numeric+import System.Posix.Types+ {- Scans for files that are checked into git at the specified locations. -} inRepo :: [FilePath] -> Repo -> IO ([FilePath], IO Bool) inRepo l = pipeNullSplit $ Params "ls-files --cached -z --" : map File l@@ -78,16 +81,16 @@  {- Returns details about files that are staged in the index,  - as well as files not yet in git. Skips ignored files. -}-stagedOthersDetails :: [FilePath] -> Repo -> IO ([(FilePath, Maybe Sha)], IO Bool)+stagedOthersDetails :: [FilePath] -> Repo -> IO ([(FilePath, Maybe Sha, Maybe FileMode)], IO Bool) stagedOthersDetails = stagedDetails' [Params "--others --exclude-standard"]  {- Returns details about all files that are staged in the index. -}-stagedDetails :: [FilePath] -> Repo -> IO ([(FilePath, Maybe Sha)], IO Bool)+stagedDetails :: [FilePath] -> Repo -> IO ([(FilePath, Maybe Sha, Maybe FileMode)], IO Bool) stagedDetails = stagedDetails' []  {- Gets details about staged files, including the Sha of their staged  - contents. -}-stagedDetails' :: [CommandParam] -> [FilePath] -> Repo -> IO ([(FilePath, Maybe Sha)], IO Bool)+stagedDetails' :: [CommandParam] -> [FilePath] -> Repo -> IO ([(FilePath, Maybe Sha, Maybe FileMode)], IO Bool) stagedDetails' ps l repo = do 	(ls, cleanup) <- pipeNullSplit params repo 	return (map parse ls, cleanup)@@ -95,10 +98,12 @@ 	params = Params "ls-files --stage -z" : ps ++  		Param "--" : map File l 	parse s-		| null file = (s, Nothing)-		| otherwise = (file, extractSha $ take shaSize $ drop 7 metadata)+		| null file = (s, Nothing, Nothing)+		| otherwise = (file, extractSha $ take shaSize rest, readmode mode) 	  where 		(metadata, file) = separate (== '\t') s+		(mode, rest) = separate (== ' ') metadata+		readmode = fst <$$> headMaybe . readOct  {- Returns a list of the files in the specified locations that are staged  - for commit, and whose type has changed. -}
Git/Remote.hs view
@@ -5,18 +5,28 @@  - Licensed under the GNU GPL version 3 or higher.  -} +{-# LANGUAGE CPP #-}+ module Git.Remote where  import Common+import Git+import qualified Git.Command+import qualified Git.BuildVersion+ import Data.Char+import qualified Data.Map as M+import Network.URI +type RemoteName = String+ {- Construct a legal git remote name out of an arbitrary input string.  -  - There seems to be no formal definition of this in the git source,  - just some ad-hoc checks, and some other things that fail with certian  - types of names (like ones starting with '-').  -}-makeLegalName :: String -> String+makeLegalName :: String -> RemoteName makeLegalName s = case filter legal $ replace "/" "_" s of 	-- it can't be empty 	[] -> "unnamed"@@ -31,3 +41,69 @@ 	legal '_' = True 	legal '.' = True 	legal c = isAlphaNum c+	+remove :: RemoteName -> Repo -> IO ()+remove remotename = Git.Command.run+	[ Param "remote"+	-- name of this subcommand changed+	, Param $+		if Git.BuildVersion.older "1.8.0"+			then "rm"+			else "remove"+	, Param remotename+	]++data RemoteLocation = RemoteUrl String | RemotePath FilePath++remoteLocationIsUrl :: RemoteLocation -> Bool+remoteLocationIsUrl (RemoteUrl _) = True+remoteLocationIsUrl _ = False++{- Determines if a given remote location is an url, or a local+ - path. Takes the repository's insteadOf configuration into account. -}+parseRemoteLocation :: String -> Repo -> RemoteLocation+parseRemoteLocation s repo = ret $ calcloc s+  where+  	ret v+#ifdef mingw32_HOST_OS+		| dosstyle v = RemotePath (dospath v)+#endif+		| scpstyle v = RemoteUrl (scptourl v)+		| urlstyle v = RemoteUrl v+		| otherwise = RemotePath v+	-- insteadof config can rewrite remote location+	calcloc l+		| null insteadofs = l+		| otherwise = replacement ++ drop (length bestvalue) l+	  where+		replacement = drop (length prefix) $+			take (length bestkey - length suffix) bestkey+		(bestkey, bestvalue) = maximumBy longestvalue insteadofs+		longestvalue (_, a) (_, b) = compare b a+		insteadofs = filterconfig $ \(k, v) -> +			startswith prefix k &&+			endswith suffix k &&+			startswith v l+		filterconfig f = filter f $+			concatMap splitconfigs $ M.toList $ fullconfig repo+		splitconfigs (k, vs) = map (\v -> (k, v)) vs+		(prefix, suffix) = ("url." , ".insteadof")+	urlstyle v = isURI v || ":" `isInfixOf` v && "//" `isInfixOf` v+	-- git remotes can be written scp style -- [user@]host:dir+	-- but foo::bar is a git-remote-helper location instead+	scpstyle v = ":" `isInfixOf` v +		&& not ("//" `isInfixOf` v)+		&& not ("::" `isInfixOf` v)+	scptourl v = "ssh://" ++ host ++ slash dir+	  where+		(host, dir) = separate (== ':') v+		slash d	| d == "" = "/~/" ++ d+			| "/" `isPrefixOf` d = d+			| "~" `isPrefixOf` d = '/':d+			| otherwise = "/~/" ++ d+#ifdef mingw32_HOST_OS+	-- git on Windows will write a path to .git/config with "drive:",+	-- which is not to be confused with a "host:"+	dosstyle = hasDrive+	dospath = fromInternalGitPath+#endif
− Git/Version.o

binary file changed (26480 → absent bytes)

GitAnnex.hs view
@@ -42,6 +42,7 @@ import qualified Command.PreCommit import qualified Command.Find import qualified Command.Whereis+import qualified Command.List import qualified Command.Log import qualified Command.Merge import qualified Command.Status@@ -132,6 +133,7 @@ 	, Command.AddUnused.def 	, Command.Find.def 	, Command.Whereis.def+	, Command.List.def 	, Command.Log.def 	, Command.Merge.def 	, Command.Status.def
GitAnnexShell.hs view
@@ -19,6 +19,9 @@ import qualified Option import Fields import Utility.UserInfo+import Remote.GCrypt (getGCryptUUID)+import qualified Annex+import Init  import qualified Command.ConfigList import qualified Command.InAnnex@@ -44,23 +47,28 @@ 	]  cmds :: [Command]-cmds = map adddirparam $ cmds_readonly ++ cmds_notreadonly+cmds = map gitAnnexShellCheck $ map adddirparam $ cmds_readonly ++ cmds_notreadonly   where 	adddirparam c = c { cmdparamdesc = "DIRECTORY " ++ cmdparamdesc c }  options :: [OptDescr (Annex ())] options = Option.common ++-	[ Option [] ["uuid"] (ReqArg checkuuid paramUUID) "local repository uuid"+	[ Option [] ["uuid"] (ReqArg checkUUID paramUUID) "local repository uuid" 	]   where-	checkuuid expected = getUUID >>= check+	checkUUID expected = getUUID >>= check 	  where 		check u | u == toUUID expected = noop-		check NoUUID = unexpected "uninitialized repository"-		check u = unexpected $ "UUID " ++ fromUUID u-		unexpected s = error $-			"expected repository UUID " ++-			expected ++ " but found " ++ s+		check NoUUID = checkGCryptUUID expected+		check u = unexpectedUUID expected u+	checkGCryptUUID expected = check =<< getGCryptUUID True =<< gitRepo+	  where+	  	check (Just u) | u == toUUID expected = noop+		check Nothing = unexpected expected "uninitialized repository"+		check (Just u) = unexpectedUUID expected u+	unexpectedUUID expected u = unexpected expected $ "UUID " ++ fromUUID u+	unexpected expected s = error $+		"expected repository UUID " ++ expected ++ " but found " ++ s  header :: String header = "git-annex-shell [-c] command [parameters ...] [option ...]"@@ -180,3 +188,11 @@ 		Nothing -> noop 		Just "" -> noop 		Just _ -> error $ "Action blocked by " ++ var++{- Modifies a Command to check that it is run in either a git-annex+ - repository, or a repository with a gcrypt-id set. -}+gitAnnexShellCheck :: Command -> Command+gitAnnexShellCheck = addCheck okforshell . dontCheck repoExists+  where+	okforshell = unlessM (isInitialized <||> isJust . gcryptId <$> Annex.getGitConfig) $+		error "Not a git-annex or gcrypt repository."
INSTALL view
@@ -25,3 +25,7 @@ ## Installation from scratch  This is not recommended, but if you really want to, see [[fromscratch]].++## See also++[[autobuild overview|builds]]
Locations.hs view
@@ -10,6 +10,7 @@ 	fileKey, 	keyPaths, 	keyPath,+	objectDir, 	gitAnnexLocation, 	gitAnnexLink, 	gitAnnexMapping,
Logs/Transfer.hs view
@@ -262,6 +262,12 @@ 	findfiles = liftIO . mapM dirContentsRecursive 		=<< mapM (fromRepo . failedTransferDir u) [Download, Upload] +clearFailedTransfers :: UUID -> Annex [(Transfer, TransferInfo)]+clearFailedTransfers u = do+	failed <- getFailedTransfers u+	mapM_ (removeFailedTransfer . fst) failed+	return failed+ removeFailedTransfer :: Transfer -> Annex () removeFailedTransfer t = do 	f <- fromRepo $ failedTransferFile t
Logs/Transitions.hs view
@@ -71,7 +71,7 @@   	ws = words s   	ts = Prelude.head ws 	ds = unwords $ Prelude.tail ws-	pdate = parseTime defaultTimeLocale "%s%Qs" >=*> utcTimeToPOSIXSeconds+	pdate = utcTimeToPOSIXSeconds <$$> parseTime defaultTimeLocale "%s%Qs"  combineTransitions :: [Transitions] -> Transitions combineTransitions = S.unions@@ -82,6 +82,5 @@ {- Typically ran with Annex.Branch.change, but we can't import Annex.Branch  - here since it depends on this module. -} recordTransitions :: (FilePath -> (String -> String) -> Annex ()) -> Transitions -> Annex ()-recordTransitions changer t = do-	changer transitionsLog $-		showTransitions . S.union t . parseTransitionsStrictly "local"+recordTransitions changer t = changer transitionsLog $+	showTransitions . S.union t . parseTransitionsStrictly "local"
Logs/Web.hs view
@@ -18,6 +18,7 @@ ) where  import qualified Data.ByteString.Lazy.Char8 as L+import Data.Tuple.Utils  import Common.Annex import Logs@@ -70,7 +71,7 @@ 	Annex.Branch.withIndex $ do 		top <- fromRepo Git.repoPath 		(l, cleanup) <- inRepo $ Git.LsFiles.stagedDetails [top]-		r <- mapM (geturls . snd) $ filter (isUrlLog . fst) l+		r <- mapM (geturls . snd3) $ filter (isUrlLog . fst3) l 		void $ liftIO cleanup 		return $ concat r   where
Makefile view
@@ -3,7 +3,7 @@  GHC?=ghc GHCMAKE=$(GHC) $(GHCFLAGS) --make-PREFIX=/usr+PREFIX?=/usr CABAL?=cabal # set to "./Setup" if you lack a cabal program  # Am I typing :make in vim? Do a fast build.@@ -76,7 +76,8 @@ 		doc/.ikiwiki html dist tags Build/SysConfig.hs build-stamp \ 		Setup Build/InstallDesktopFile Build/EvilSplicer \ 		Build/Standalone Build/OSXMkLibs-	find -name \*.o -or -name \*.hi -exec rm {} \;+	find -name \*.o -exec rm {} \;+	find -name \*.hi -exec rm {} \;  Build/InstallDesktopFile: Build/InstallDesktopFile.hs 	$(GHC) --make $@@@ -159,12 +160,12 @@ 	rm -f tmp/git-annex.dmg.bz2 	bzip2 --fast tmp/git-annex.dmg -ANDROID_FLAGS?=+ANDROID_FLAGS?=-f-XMPP # Cross compile for Android. # Uses https://github.com/neurocyte/ghc-android android: Build/EvilSplicer 	echo "Running native build, to get TH splices.."-	if [ ! -e dist/setup/setup ]; then $(CABAL) configure -f"-Production $(ANDROID_FLAGS)" -O0; fi+	if [ ! -e dist/setup/setup ]; then $(CABAL) configure -f-Production -O0 $(ANDROID_FLAGS);  fi 	mkdir -p tmp 	if ! $(CABAL) build --ghc-options=-ddump-splices 2> tmp/dump-splices; then tail tmp/dump-splices >&2; exit 1; fi 	echo "Setting up Android build tree.."@@ -182,9 +183,9 @@ # Cabal cannot cross compile with custom build type, so workaround. 	sed -i 's/Build-type: Custom/Build-type: Simple/' tmp/androidtree/git-annex.cabal 	if [ ! -e tmp/androidtree/dist/setup/setup ]; then \-		cd tmp/androidtree && $$HOME/.ghc/android-14/arm-linux-androideabi-4.7/arm-linux-androideabi/bin/cabal configure -f"Android $(ANDROID_FLAGS)"; \+		cd tmp/androidtree && $$HOME/.ghc/android-14/arm-linux-androideabi-4.7/arm-linux-androideabi/bin/cabal configure -fAndroid $(ANDROID_FLAGS); \ 	fi-	cd tmp/androidtree && $(CABAL) build+	cd tmp/androidtree && $$HOME/.ghc/android-14/arm-linux-androideabi-4.7/arm-linux-androideabi/bin/cabal build  adb: 	ANDROID_FLAGS="-Production" $(MAKE) android
NEWS view
@@ -1,3 +1,11 @@+git-annex (4.20130921) unstable; urgency=low++   The layout of gcrypt repositories has changed, and+   if you created one you must manually upgrade it.+   See /usr/share/doc/git-annex/html/upgrades/gcrypt.html++ -- Joey Hess <joeyh@debian.org>  Tue, 24 Sep 2013 13:55:23 -0400+ git-annex (3.20120123) unstable; urgency=low    There was a bug in the handling of directory special remotes that
Remote.hs view
@@ -56,6 +56,7 @@ import Logs.Location hiding (logStatus) import Remote.List import Config+import Git.Remote  {- Map from UUIDs of Remotes to a calculated value. -} remoteMap :: (Remote -> a) -> Annex (M.Map UUID a)@@ -68,7 +69,7 @@ uuidDescriptions :: Annex (M.Map UUID String) uuidDescriptions = M.unionWith addName <$> uuidMap <*> remoteMap name -addName :: String -> String -> String+addName :: String -> RemoteName -> String addName desc n 	| desc == n = desc 	| null desc = n@@ -76,12 +77,12 @@  {- When a name is specified, looks up the remote matching that name.  - (Or it can be a UUID.) -}-byName :: Maybe String -> Annex (Maybe Remote)+byName :: Maybe RemoteName -> Annex (Maybe Remote) byName Nothing = return Nothing byName (Just n) = either error Just <$> byName' n  {- Like byName, but the remote must have a configured UUID. -}-byNameWithUUID :: Maybe String -> Annex (Maybe Remote)+byNameWithUUID :: Maybe RemoteName -> Annex (Maybe Remote) byNameWithUUID = checkuuid <=< byName   where   	checkuuid Nothing = return Nothing@@ -93,7 +94,7 @@ 				else error e 		| otherwise = return $ Just r -byName' :: String -> Annex (Either String Remote)+byName' :: RemoteName -> Annex (Either String Remote) byName' "" = return $ Left "no remote specified" byName' n = handle . filter matching <$> remoteList   where@@ -104,7 +105,7 @@ {- Looks up a remote by name (or by UUID, or even by description),  - and returns its UUID. Finds even remotes that are not configured in  - .git/config. -}-nameToUUID :: String -> Annex UUID+nameToUUID :: RemoteName -> Annex UUID nameToUUID "." = getUUID -- special case for current repo nameToUUID "here" = getUUID nameToUUID "" = error "no remote specified"
Remote/Bup.hs view
@@ -10,6 +10,7 @@ import qualified Data.ByteString.Lazy as L import qualified Data.Map as M import System.Process+import Data.ByteString.Lazy.UTF8 (fromString)  import Common.Annex import Types.Remote@@ -21,12 +22,12 @@ import qualified Git.Ref import Config import Config.Cost-import Remote.Helper.Ssh+import qualified Remote.Helper.Ssh as Ssh import Remote.Helper.Special import Remote.Helper.Encryptable+import Remote.Helper.Messages import Crypto-import Data.ByteString.Lazy.UTF8 (fromString)-import Data.Digest.Pure.SHA+import Utility.Hash import Utility.UserInfo import Annex.Content import Annex.UUID@@ -42,7 +43,7 @@ 	setup = bupSetup } -gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex Remote+gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex (Maybe Remote) gen r u c gc = do 	bupr <- liftIO $ bup2GitRemote buprepo 	cst <- remoteCost gc $@@ -72,7 +73,7 @@ 		, globallyAvailable = not $ bupLocal buprepo 		, readonly = False 		}-	return $ encryptableRemote c+	return $ Just $ encryptableRemote c 		(storeEncrypted new buprepo) 		(retrieveEncrypted buprepo) 		new@@ -185,7 +186,7 @@ checkPresent :: Git.Repo -> Git.Repo -> Key -> Annex (Either String Bool) checkPresent r bupr k 	| Git.repoIsUrl bupr = do-		showAction $ "checking " ++ Git.repoDescribe r+		showChecking r 		ok <- onBupRemote bupr boolSystem "git" params 		return $ Right ok 	| otherwise = liftIO $ catchMsgIO $@@ -220,7 +221,7 @@  onBupRemote :: Git.Repo -> (FilePath -> [CommandParam] -> IO a) -> FilePath -> [CommandParam] -> Annex a onBupRemote r a command params = do-	sshparams <- sshToRepo r [Param $+	sshparams <- Ssh.toRepo r [Param $ 			"cd " ++ dir ++ " && " ++ unwords (command : toCommand params)] 	liftIO $ a "ssh" sshparams   where@@ -277,7 +278,7 @@ bupRef :: Key -> String bupRef k 	| Git.Ref.legal True shown = shown-	| otherwise = "git-annex-" ++ showDigest (sha256 (fromString shown))+	| otherwise = "git-annex-" ++ show (sha256 (fromString shown))   where 	shown = key2file k 
Remote/Directory.hs view
@@ -12,7 +12,6 @@ import qualified Data.ByteString.Lazy as L import qualified Data.ByteString as S import qualified Data.Map as M-import qualified Control.Exception as E import Data.Int  import Common.Annex@@ -37,11 +36,11 @@ 	setup = directorySetup } -gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex Remote+gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex (Maybe Remote) gen r u c gc = do 	cst <- remoteCost gc cheapRemoteCost 	let chunksize = chunkSize c-	return $ encryptableRemote c+	return $ Just $ encryptableRemote c 		(storeEncrypted dir (getGpgEncParams (c,gc)) chunksize) 		(retrieveEncrypted dir chunksize) 		Remote {@@ -109,7 +108,7 @@ 		ifM (check chunkcount) 			( do 				chunks <- listChunks f <$> readFile chunkcount-				ifM (all id <$> mapM check chunks)+				ifM (and <$> mapM check chunks) 					( a chunks , return False ) 			, go fs 			)@@ -159,7 +158,7 @@ storeSplit' _ _ [] _ _ = error "ran out of dests" storeSplit' _ _  _ [] c = return $ reverse c storeSplit' meterupdate chunksize (d:dests) bs c = do-	bs' <- E.bracket (openFile d WriteMode) hClose $+	bs' <- withFile d WriteMode $ 		feed zeroBytesProcessed chunksize bs 	storeSplit' meterupdate chunksize dests bs' (d:c)   where@@ -206,7 +205,7 @@ retrieve d chunksize k _ f p = metered (Just p) k $ \meterupdate -> 	liftIO $ withStoredFiles chunksize d k $ \files -> 		catchBoolIO $ do-			meteredWriteFileChunks meterupdate f files $ L.readFile+			meteredWriteFileChunks meterupdate f files L.readFile 			return True  retrieveEncrypted :: FilePath -> ChunkSize -> (Cipher, Key) -> Key -> FilePath -> MeterUpdate -> Annex Bool@@ -217,7 +216,7 @@ 				readBytes $ meteredWriteFile meterupdate f 			return True   where-	feeder files h = forM_ files $ \file -> L.hPut h =<< L.readFile file+	feeder files h = forM_ files $ L.hPut h <=< L.readFile  retrieveCheap :: FilePath -> ChunkSize -> Key -> FilePath -> Annex Bool retrieveCheap _ (Just _) _ _ = return False -- no cheap retrieval for chunks
Remote/GCrypt.hs view
@@ -5,10 +5,16 @@  - Licensed under the GNU GPL version 3 or higher.  -} -module Remote.GCrypt (remote, gen) where+module Remote.GCrypt (+	remote,+	gen,+	getGCryptUUID,+	coreGCryptId+) where  import qualified Data.Map as M import qualified Data.ByteString.Lazy as L+import Control.Exception.Extensible  import Common.Annex import Types.Remote@@ -18,6 +24,7 @@ import qualified Git.Command import qualified Git.Config import qualified Git.GCrypt+import qualified Git.Construct import qualified Git.Types as Git () import qualified Annex.Branch import qualified Annex.Content@@ -26,12 +33,19 @@ import Remote.Helper.Git import Remote.Helper.Encryptable import Remote.Helper.Special+import Remote.Helper.Messages+import qualified Remote.Helper.Ssh as Ssh import Utility.Metered import Crypto import Annex.UUID import Annex.Ssh import qualified Remote.Rsync import Utility.Rsync+import Utility.Tmp+import Logs.Remote+import Logs.Transfer+import Utility.Gpg+import Annex.Content  remote :: RemoteType remote = RemoteType {@@ -43,23 +57,43 @@ 	setup = gCryptSetup } -gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex Remote+gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex (Maybe Remote) gen gcryptr u c gc = do 	g <- gitRepo 	-- get underlying git repo with real path, not gcrypt path-	r <- liftIO $ Git.GCrypt.encryptedRepo g gcryptr+	r <- liftIO $ Git.GCrypt.encryptedRemote g gcryptr 	let r' = r { Git.remoteName = Git.remoteName gcryptr }-	-- read config of underlying repo if it's local-	r'' <- if Git.repoIsLocalUnknown r'-		then liftIO $ catchDefaultIO r' $ Git.Config.read r'-		else return r'-	gen' r'' u c gc+	-- doublecheck that cache matches underlying repo's gcrypt-id+	-- (which might not be set), only for local repos+	(mgcryptid, r'') <- getGCryptId True r'+	case (mgcryptid, Git.GCrypt.remoteRepoId g (Git.remoteName gcryptr)) of+		(Just gcryptid, Just cachedgcryptid)+			| gcryptid /= cachedgcryptid -> resetup gcryptid r''+		_ -> gen' r'' u c gc+  where+	-- A different drive may have been mounted, making a different+	-- gcrypt remote available. So need to set the cached+	-- gcrypt-id and annex-uuid of the remote to match the remote+	-- that is now available. Also need to set the gcrypt particiants+	-- correctly.+	resetup gcryptid r = do+		let u' = genUUIDInNameSpace gCryptNameSpace gcryptid+		v <- M.lookup u' <$> readRemoteLog+		case (Git.remoteName gcryptr, v) of+			(Just remotename, Just c') -> do+				setGcryptEncryption c' remotename+				setConfig (remoteConfig gcryptr "uuid") (fromUUID u')+				setConfig (ConfigKey $ Git.GCrypt.remoteConfigKey "gcrypt-id" remotename) gcryptid+				gen' r u' c' gc+			_ -> do+				warning $ "not using unknown gcrypt repository pointed to by remote " ++ Git.repoDescribe r+				return Nothing -gen' :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex Remote+gen' :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex (Maybe Remote) gen' r u c gc = do 	cst <- remoteCost gc $ 		if repoCheap r then nearlyCheapRemoteCost else expensiveRemoteCost-	(rsynctransport, rsyncurl) <- rsyncTransport r+	(rsynctransport, rsyncurl) <- rsyncTransportToObjects r 	let rsyncopts = Remote.Rsync.genRsyncOpts c gc rsynctransport rsyncurl 	let this = Remote  		{ uuid = u@@ -80,12 +114,17 @@ 		, globallyAvailable = globallyAvailableCalc r 		, remotetype = remote 	}-	return $ encryptableRemote c+	return $ Just $ encryptableRemote c 		(store this rsyncopts) 		(retrieve this rsyncopts) 		this -rsyncTransport :: Git.Repo -> Annex ([CommandParam], String)+rsyncTransportToObjects :: Git.Repo -> Annex ([CommandParam], String)+rsyncTransportToObjects r = do+	(rsynctransport, rsyncurl, _) <- rsyncTransport r+	return (rsynctransport, rsyncurl ++ "/annex/objects")++rsyncTransport :: Git.Repo -> Annex ([CommandParam], String, AccessMethod) rsyncTransport r 	| "ssh://" `isPrefixOf` loc = sshtransport $ break (== '/') $ drop (length "ssh://") loc 	| "//:" `isInfixOf` loc = othertransport@@ -94,9 +133,12 @@   where   	loc = Git.repoLocation r 	sshtransport (host, path) = do+		let rsyncpath = if "/~/" `isPrefixOf` path+			then drop 3 path+			else path 		opts <- sshCachingOptions (host, Nothing) []-		return (rsyncShell $ Param "ssh" : opts, host ++ ":" ++ path)-	othertransport = return ([], loc)+		return (rsyncShell $ Param "ssh" : opts, host ++ ":" ++ rsyncpath, AccessShell)+	othertransport = return ([], loc, AccessDirect)  noCrypto :: Annex a noCrypto = error "cannot use gcrypt remote without encryption enabled"@@ -117,14 +159,7 @@ 			, Param $ Git.GCrypt.urlPrefix ++ gitrepo 			] -		{- Configure gcrypt to use the same list of keyids that-		 - were passed to initremote, unless shared encryption-		 - was used. -}-		case extractCipher c' of-			Nothing -> noCrypto-			Just (EncryptedCipher _ _ (KeyIds { keyIds = ks})) ->-				setConfig (ConfigKey $ Git.GCrypt.remoteParticipantConfigKey remotename) (unwords ks)-			_ -> noop+		setGcryptEncryption c' remotename  		{- Run a git fetch and a push to the git repo in order to get 		 - its gcrypt-id set up, so that later git annex commands@@ -138,42 +173,136 @@ 		void $ inRepo $ Git.Command.runBool 			[ Param "push" 			, Param remotename-			, Param $ show $ Annex.Branch.fullname+			, Param $ show Annex.Branch.fullname 			] 		g <- inRepo Git.Config.reRead 		case Git.GCrypt.remoteRepoId g (Just remotename) of 			Nothing -> error "unable to determine gcrypt-id of remote"-			Just v -> do-				let u = genUUIDInNameSpace gCryptNameSpace v-				if Just u == mu || mu == Nothing+			Just gcryptid -> do+				let u = genUUIDInNameSpace gCryptNameSpace gcryptid+				if Just u == mu || isNothing mu 					then do-						gitConfigSpecialRemote u c' "gcrypt" "true"+						method <- setupRepo gcryptid =<< inRepo (Git.Construct.fromRemoteLocation gitrepo)+						gitConfigSpecialRemote u c' "gcrypt" (fromAccessMethod method) 						return (c', u) 					else error "uuid mismatch" +{- Sets up the gcrypt repository. The repository is either a local+ - repo, or it is accessed via rsync directly, or it is accessed over ssh+ - and git-annex-shell is available to manage it.+ -+ - The gcrypt-id is stored in the gcrypt repository for later+ - double-checking and identification. This is always done using rsync.+ -}+setupRepo :: Git.GCrypt.GCryptId -> Git.Repo -> Annex AccessMethod+setupRepo gcryptid r+	| Git.repoIsUrl r = do+		accessmethod <- rsyncsetup+		case accessmethod of+			AccessDirect -> return AccessDirect+			AccessShell -> ifM usablegitannexshell+				( return AccessShell+				, return AccessDirect+				)+	| Git.repoIsLocalUnknown r = localsetup =<< liftIO (Git.Config.read r)+	| otherwise = localsetup r+  where+	localsetup r' = do+		liftIO $ Git.Command.run [Param "config", Param coreGCryptId, Param gcryptid] r'+		return AccessDirect++	{- Download any git config file from the remote,+	 - add the gcryptid to it, and send it back.+	 -+	 - At the same time, create the objectDir on the remote,+	 - which is needed for direct rsync to work.+	 -}+  	rsyncsetup = Remote.Rsync.withRsyncScratchDir $ \tmp -> do+		liftIO $ createDirectoryIfMissing True $ tmp </> objectDir+		(rsynctransport, rsyncurl, accessmethod) <- rsyncTransport r+		let tmpconfig = tmp </> "config"+		void $ liftIO $ rsync $ rsynctransport +++			[ Param $ rsyncurl ++ "/config"+			, Param tmpconfig+			]+		liftIO $ appendFile tmpconfig $ unlines+			[ ""+			, "[core]"+			, "\tgcrypt-id = " ++ gcryptid+			]+		ok <- liftIO $ rsync $ rsynctransport +++			[ Params "--recursive"+			, Param $ tmp ++ "/"+			, Param rsyncurl+			]+		unless ok $+			error "Failed to connect to remote to set it up."+		return accessmethod++	{-  Check if git-annex shell is installed, and is a new enough+	 -  version to work in a gcrypt repo. -}+	usablegitannexshell = either (const False) (const True)+		<$> Ssh.onRemote r (Git.Config.fromPipe r, Left undefined) "configlist" [] []++shellOrRsync :: Remote -> Annex a -> Annex a -> Annex a+shellOrRsync r ashell arsync = case method of+	AccessShell -> ashell+	_ -> arsync+  where+  	method = toAccessMethod $ fromMaybe "" $+		remoteAnnexGCrypt $ gitconfig r++{- Configure gcrypt to use the same list of keyids that+ - were passed to initremote as its participants.+ - Also, configure it to use a signing key that is in the list of+ - participants, which gcrypt requires is the case, and may not be+ - depending on system configuration.+ -+ - (For shared encryption, gcrypt's default behavior is used.) -}+setGcryptEncryption :: RemoteConfig -> String -> Annex ()+setGcryptEncryption c remotename = do+	let participants = ConfigKey $ Git.GCrypt.remoteParticipantConfigKey remotename+	case extractCipher c of+		Nothing -> noCrypto+		Just (EncryptedCipher _ _ (KeyIds { keyIds = ks})) -> do+			setConfig participants (unwords ks)+			let signingkey = ConfigKey $ Git.GCrypt.remoteSigningKey remotename+			skeys <- M.keys <$> liftIO secretKeys+			case filter (`elem` ks) skeys of+				[] -> noop+				(k:_) -> setConfig signingkey k+		Just (SharedCipher _) ->+			unsetConfig participants+ store :: Remote -> Remote.Rsync.RsyncOpts -> (Cipher, Key) -> Key -> MeterUpdate -> Annex Bool store r rsyncopts (cipher, enck) k p 	| not $ Git.repoIsUrl (repo r) = guardUsable (repo r) False $-		sendwith $ \meterupdate h -> do+		metered (Just p) k $ \meterupdate -> spoolencrypted $ \h -> do+			let dest = gCryptLocation r enck 			createDirectoryIfMissing True $ parentDir dest 			readBytes (meteredWriteFile meterupdate dest) h 			return True-	| Git.repoIsSsh (repo r) = Remote.Rsync.storeEncrypted rsyncopts gpgopts (cipher, enck) k p+	| Git.repoIsSsh (repo r) = shellOrRsync r storeshell storersync 	| otherwise = unsupportedUrl   where   	gpgopts = getGpgEncParams r-	dest = gCryptLocation r enck-  	sendwith a = metered (Just p) k $ \meterupdate ->-		Annex.Content.sendAnnex k noop $ \src ->-			liftIO $ catchBoolIO $-				encrypt gpgopts cipher (feedFile src) (a meterupdate)+	storersync = Remote.Rsync.storeEncrypted rsyncopts gpgopts (cipher, enck) k p+	storeshell = withTmp enck $ \tmp ->+		ifM (spoolencrypted $ readBytes $ \b -> catchBoolIO $ L.writeFile tmp b >> return True)+			( Ssh.rsyncHelper (Just p)+				=<< Ssh.rsyncParamsRemote r Upload enck tmp Nothing+			, return False+			)+	spoolencrypted a = Annex.Content.sendAnnex k noop $ \src ->+		liftIO $ catchBoolIO $+			encrypt gpgopts cipher (feedFile src) a  retrieve :: Remote -> Remote.Rsync.RsyncOpts -> (Cipher, Key) -> Key -> FilePath -> MeterUpdate -> Annex Bool retrieve r rsyncopts (cipher, enck) k d p 	| not $ Git.repoIsUrl (repo r) = guardUsable (repo r) False $ do 		retrievewith $ L.readFile src 		return True-	| Git.repoIsSsh (repo r) = Remote.Rsync.retrieveEncrypted rsyncopts (cipher, enck) k d p+	| Git.repoIsSsh (repo r) = shellOrRsync r retrieveshell retrieversync 	| otherwise = unsupportedUrl   where 	src = gCryptLocation r enck@@ -181,30 +310,89 @@ 		a >>= \b ->  			decrypt cipher (feedBytes b) 				(readBytes $ meteredWriteFile meterupdate d)+	retrieversync = Remote.Rsync.retrieveEncrypted rsyncopts (cipher, enck) k d p+	retrieveshell = withTmp enck $ \tmp ->+		ifM (Ssh.rsyncHelper (Just p) =<< Ssh.rsyncParamsRemote r Download enck tmp Nothing)+			( liftIO $ catchBoolIO $ do+				decrypt cipher (feedFile tmp) $+					readBytes $ L.writeFile d+				return True+			, return False+			)  remove :: Remote -> Remote.Rsync.RsyncOpts -> Key -> Annex Bool remove r rsyncopts k 	| not $ Git.repoIsUrl (repo r) = guardUsable (repo r) False $ do-		liftIO $ removeDirectoryRecursive (parentDir dest)+		liftIO $ removeDirectoryRecursive $ parentDir $ gCryptLocation r k 		return True-	| Git.repoIsSsh (repo r) = Remote.Rsync.remove rsyncopts k+	| Git.repoIsSsh (repo r) = shellOrRsync r removeshell removersync 	| otherwise = unsupportedUrl   where-	dest = gCryptLocation r k+	removersync = Remote.Rsync.remove rsyncopts k+	removeshell = Ssh.dropKey (repo r) k  checkPresent :: Remote -> Remote.Rsync.RsyncOpts -> Key -> Annex (Either String Bool) checkPresent r rsyncopts k 	| not $ Git.repoIsUrl (repo r) =-		guardUsable (repo r) unknown $-			liftIO $ catchDefaultIO unknown $+		guardUsable (repo r) (cantCheck $ repo r) $+			liftIO $ catchDefaultIO (cantCheck $ repo r) $ 				Right <$> doesFileExist (gCryptLocation r k)-	| Git.repoIsSsh (repo r) = Remote.Rsync.checkPresent (repo r) rsyncopts k+	| Git.repoIsSsh (repo r) = shellOrRsync r checkshell checkrsync 	| otherwise = unsupportedUrl   where-	unknown = Left $ "unable to check " ++ Git.repoDescribe (repo r) ++ show (repo r)+  	checkrsync = Remote.Rsync.checkPresent (repo r) rsyncopts k+	checkshell = Ssh.inAnnex (repo r) k -{- Annexed objects are stored directly under the top of the gcrypt repo- - (not in annex/objects), and are hashed using lower-case directories for max+{- Annexed objects are hashed using lower-case directories for max  - portability. -} gCryptLocation :: Remote -> Key -> FilePath-gCryptLocation r key = Git.repoLocation (repo r) </> keyPath key hashDirLower+gCryptLocation r key = Git.repoLocation (repo r) </> objectDir </> keyPath key hashDirLower++data AccessMethod = AccessDirect | AccessShell++fromAccessMethod :: AccessMethod -> String+fromAccessMethod AccessShell = "shell"+fromAccessMethod AccessDirect = "true"++toAccessMethod :: String -> AccessMethod+toAccessMethod "shell" = AccessShell+toAccessMethod _ = AccessDirect++getGCryptUUID :: Bool -> Git.Repo -> Annex (Maybe UUID)+getGCryptUUID fast r = (genUUIDInNameSpace gCryptNameSpace <$>) . fst+	<$> getGCryptId fast r++coreGCryptId :: String+coreGCryptId = "core.gcrypt-id"++{- gcrypt repos set up by git-annex as special remotes have a+ - core.gcrypt-id setting in their config, which can be mapped back to+ - the remote's UUID.+ -+ - In fast mode, only checks local repos. To check a remote repo,+ - tries git-annex-shell and direct rsync of the git config file.+ -+ - (Also returns a version of input repo with its config read.) -}+getGCryptId :: Bool -> Git.Repo -> Annex (Maybe Git.GCrypt.GCryptId, Git.Repo)+getGCryptId fast r+	| Git.repoIsLocal r = extract <$>+		liftIO (catchMaybeIO $ Git.Config.read r)+	| not fast = extract . liftM fst <$> getM (eitherToMaybe <$>)+		[ Ssh.onRemote r (Git.Config.fromPipe r, Left undefined) "configlist" [] []+		, getConfigViaRsync r+		]+	| otherwise = return (Nothing, r)+  where+	extract Nothing = (Nothing, r)+	extract (Just r') = (Git.Config.getMaybe coreGCryptId r', r')++getConfigViaRsync :: Git.Repo -> Annex (Either SomeException (Git.Repo, String))+getConfigViaRsync r = do+	(rsynctransport, rsyncurl, _) <- rsyncTransport r+	liftIO $ do+		withTmpFile "tmpconfig" $ \tmpconfig _ -> do+			void $ rsync $ rsynctransport +++				[ Param $ rsyncurl ++ "/config"+				, Param tmpconfig+				]+			Git.Config.fromFile r tmpconfig
Remote/Git.hs view
@@ -14,8 +14,6 @@ ) where  import Common.Annex-import Utility.Rsync-import Remote.Helper.Ssh import Annex.Ssh import Types.Remote import Types.GitConfig@@ -45,6 +43,8 @@ import Utility.CopyFile #endif import Remote.Helper.Git+import Remote.Helper.Messages+import qualified Remote.Helper.Ssh as Ssh import qualified Remote.GCrypt  import Control.Concurrent@@ -92,13 +92,13 @@ 		(False, _, NoUUID) -> tryGitConfigRead r 		_ -> return r -gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex Remote+gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex (Maybe Remote) gen r u c gc 	| Git.GCrypt.isEncrypted r = Remote.GCrypt.gen r u c gc 	| otherwise = go <$> remoteCost gc defcst   where 	defcst = if repoCheap r then cheapRemoteCost else expensiveRemoteCost-	go cst = new+	go cst = Just new 	  where 		new = Remote  			{ uuid = u@@ -128,7 +128,7 @@ 	| Git.GCrypt.isEncrypted r = do 		g <- gitRepo 		liftIO $ do-			er <- Git.GCrypt.encryptedRepo g r+			er <- Git.GCrypt.encryptedRemote g r 			if Git.repoIsLocal er || Git.repoIsLocalUnknown er 				then catchBoolIO $ 					void (Git.Config.read er) >> return True@@ -143,7 +143,7 @@ tryGitConfigRead r  	| haveconfig r = return r -- already read 	| Git.repoIsSsh r = store $ do-		v <- onRemote r (pipedconfig, Left undefined) "configlist" [] []+		v <- Ssh.onRemote r (pipedconfig, Left undefined) "configlist" [] [] 		case v of 			Right r' 				| haveconfig r' -> return r'@@ -165,18 +165,16 @@ 	safely a = either (const $ return r) return 			=<< liftIO (try a :: IO (Either SomeException Git.Repo)) -	pipedconfig cmd params = try run :: IO (Either SomeException Git.Repo)-	  where-	  	run = withHandle StdoutHandle createProcessSuccess p $ \h -> do- 			fileEncoding h-			val <- hGetContentsStrict h-			r' <- Git.Config.store val r-			when (getUncachedUUID r' == NoUUID && not (null val)) $ do-				warningIO $ "Failed to get annex.uuid configuration of repository " ++ Git.repoDescribe r-				warningIO $ "Instead, got: " ++ show val-				warningIO $ "This is unexpected; please check the network transport!"-			return r'-		p = proc cmd $ toCommand params+	pipedconfig cmd params = do+		v <- Git.Config.fromPipe r cmd params+		case v of+			Right (r', val) -> do+				when (getUncachedUUID r' == NoUUID && not (null val)) $ do+					warningIO $ "Failed to get annex.uuid configuration of repository " ++ Git.repoDescribe r+					warningIO $ "Instead, got: " ++ show val+					warningIO $ "This is unexpected; please check the network transport!"+				return $ Right r'+			Left l -> return $ Left l  	geturlconfig headers = do 		v <- liftIO $ withTmpFile "git-annex.tmp" $ \tmpfile h -> do@@ -211,7 +209,7 @@ 		Nothing -> return r 		Just n -> do 			whenM (inRepo $ Git.Command.runBool [Param "fetch", Param "--quiet", Param n]) $-				set_ignore $ "does not have git-annex installed"+				set_ignore "does not have git-annex installed" 			return r 	 	set_ignore msg = case Git.remoteName r of@@ -241,28 +239,19 @@ 	| otherwise = checklocal   where 	checkhttp headers = do-		showchecking+		showChecking r 		liftIO $ ifM (anyM (\u -> Url.check u headers (keySize key)) (keyUrls r key)) 			( return $ Right True 			, return $ Left "not found" 			)-	checkremote = do-		showchecking-		onRemote r (check, unknown) "inannex" [Param (key2file key)] []-	  where-		check c p = dispatch <$> safeSystem c p-		dispatch ExitSuccess = Right True-		dispatch (ExitFailure 1) = Right False-		dispatch _ = unknown-	checklocal = guardUsable r unknown $ dispatch <$> check+	checkremote = Ssh.inAnnex r key+	checklocal = guardUsable r (cantCheck r) $ dispatch <$> check 	  where 		check = liftIO $ catchMsgIO $ onLocal r $ 			Annex.Content.inAnnexSafe key 		dispatch (Left e) = Left e 		dispatch (Right (Just b)) = Right b-		dispatch (Right Nothing) = unknown-	unknown = Left $ "unable to check " ++ Git.repoDescribe r-	showchecking = showAction $ "checking " ++ Git.repoDescribe r+		dispatch (Right Nothing) = cantCheck r  keyUrls :: Git.Repo -> Key -> [String] keyUrls r key = map tourl locs@@ -285,12 +274,8 @@ 				logStatus key InfoMissing 				Annex.Content.saveState True 			return True-	| Git.repoIsHttp (repo r) = error "dropping from http repo not supported"-	| otherwise = commitOnCleanup r $ onRemote (repo r) (boolSystem, False) "dropkey"-		[ Params "--quiet --force"-		, Param $ key2file key-		]-		[]+	| Git.repoIsHttp (repo r) = error "dropping from http remote not supported"+	| otherwise = commitOnCleanup r $ Ssh.dropKey (repo r) key  {- Tries to copy a key's content from a remote's annex to a file. -} copyFromRemote :: Remote -> Key -> AssociatedFile -> FilePath -> MeterUpdate -> Annex Bool@@ -298,7 +283,7 @@ copyFromRemote' :: Remote -> Key -> AssociatedFile -> FilePath -> Annex Bool copyFromRemote' r key file dest 	| not $ Git.repoIsUrl (repo r) = guardUsable (repo r) False $ do-		let params = rsyncParams r+		let params = Ssh.rsyncParams r 		u <- getUUID 		-- run copy from perspective of remote 		liftIO $ onLocal (repo r) $ do@@ -311,10 +296,10 @@ 						(rsyncOrCopyFile params object dest) 						<&&> checksuccess 	| Git.repoIsSsh (repo r) = feedprogressback $ \feeder -> -		rsyncHelper (Just feeder) -			=<< rsyncParamsRemote r Download key dest file+		Ssh.rsyncHelper (Just feeder) +			=<< Ssh.rsyncParamsRemote r Download key dest file 	| Git.repoIsHttp (repo r) = Annex.Content.downloadUrl (keyUrls (repo r) key) dest-	| otherwise = error "copying from non-ssh, non-http repo not supported"+	| otherwise = error "copying from non-ssh, non-http remote not supported"   where 	{- Feed local rsync's progress info back to the remote, 	 - by forking a feeder thread that runs@@ -339,9 +324,9 @@ 		u <- getUUID 		let fields = (Fields.remoteUUID, fromUUID u) 			: maybe [] (\f -> [(Fields.associatedFile, f)]) file-		Just (cmd, params) <- git_annex_shell (repo r) "transferinfo" +		Just (cmd, params) <- Ssh.git_annex_shell (repo r) "transferinfo"  			[Param $ key2file key] fields-		v <- liftIO $ (newEmptySV :: IO (MSampleVar Integer))+		v <- liftIO (newEmptySV :: IO (MSampleVar Integer)) 		tid <- liftIO $ forkIO $ void $ tryIO $ do 			bytes <- readSV v 			p <- createProcess $@@ -352,7 +337,7 @@ 			hClose $ stderrHandle p 			let h = stdinHandle p 			let send b = do-				hPutStrLn h $ show b+				hPrint h b 				hFlush h 			send bytes 			forever $@@ -385,7 +370,8 @@ 			copylocal =<< Annex.Content.prepSendAnnex key 	| Git.repoIsSsh (repo r) = commitOnCleanup r $ 		Annex.Content.sendAnnex key noop $ \object ->-			rsyncHelper (Just p) =<< rsyncParamsRemote r Upload key object file+			Ssh.rsyncHelper (Just p)+				=<< Ssh.rsyncParamsRemote r Upload key object file 	| otherwise = error "copying to non-ssh repo not supported"   where 	copylocal Nothing = return False@@ -394,7 +380,7 @@ 		-- the remote's Annex, but it needs access to the current 		-- Annex monad's state. 		checksuccessio <- Annex.withCurrentState checksuccess-		let params = rsyncParams r+		let params = Ssh.rsyncParams r 		u <- getUUID 		-- run copy from perspective of remote 		liftIO $ onLocal (repo r) $ ifM (Annex.Content.inAnnex key)@@ -428,7 +414,7 @@ #else 	ifM (sameDeviceIds src dest) (docopy, dorsync)   where-	sameDeviceIds a b = (==) <$> (getDeviceId a) <*> (getDeviceId b)+	sameDeviceIds a b = (==) <$> getDeviceId a <*> getDeviceId b 	getDeviceId f = deviceID <$> liftIO (getFileStatus $ parentDir f) 	docopy = liftIO $ bracket 		(forkIO $ watchfilesize zeroBytesProcessed)@@ -446,56 +432,9 @@ 					watchfilesize sz 			_ -> watchfilesize oldsz #endif-	dorsync = rsyncHelper (Just p) $+	dorsync = Ssh.rsyncHelper (Just p) $ 		rsyncparams ++ [File src, File dest] -rsyncHelper :: Maybe MeterUpdate -> [CommandParam] -> Annex Bool-rsyncHelper callback params = do-	showOutput -- make way for progress bar-	ifM (liftIO $ (maybe rsync rsyncProgress callback) params)-		( return True-		, do-			showLongNote "rsync failed -- run git annex again to resume file transfer"-			return False-		)--{- Generates rsync parameters that ssh to the remote and asks it- - to either receive or send the key's content. -}-rsyncParamsRemote :: Remote -> Direction -> Key -> FilePath -> AssociatedFile -> Annex [CommandParam]-rsyncParamsRemote r direction key file afile = do-	u <- getUUID-	direct <- isDirect-	let fields = (Fields.remoteUUID, fromUUID u)-		: (Fields.direct, if direct then "1" else "")-		: maybe [] (\f -> [(Fields.associatedFile, f)]) afile-	Just (shellcmd, shellparams) <- git_annex_shell (repo r)-		(if direction == Download then "sendkey" else "recvkey")-		[ Param $ key2file key ]-		fields-	-- Convert the ssh command into rsync command line.-	let eparam = rsyncShell (Param shellcmd:shellparams)-	let o = rsyncParams r-	if direction == Download-		then return $ o ++ rsyncopts eparam dummy (File file)-		else return $ o ++ rsyncopts eparam (File file) dummy-  where-	rsyncopts ps source dest-		| end ps == [dashdash] = ps ++ [source, dest]-		| otherwise = ps ++ [dashdash, source, dest]-	dashdash = Param "--"-	{- The rsync shell parameter controls where rsync-	 - goes, so the source/dest parameter can be a dummy value,-	 - that just enables remote rsync mode.-	 - For maximum compatability with some patched rsyncs,-	 - the dummy value needs to still contain a hostname,-	 - even though this hostname will never be used. -}-	dummy = Param "dummy:"---- --inplace to resume partial files-rsyncParams :: Remote -> [CommandParam]-rsyncParams r = [Params "--progress --inplace"] ++-	map Param (remoteAnnexRsyncOptions $ gitconfig r)- commitOnCleanup :: Remote -> Annex a -> Annex a commitOnCleanup r a = go `after` a   where@@ -506,12 +445,12 @@ 				Annex.Branch.commit "update" 		| otherwise = void $ do 			Just (shellcmd, shellparams) <--				git_annex_shell (repo r) "commit" [] []+				Ssh.git_annex_shell (repo r) "commit" [] [] 			 			-- Throw away stderr, since the remote may not 			-- have a new enough git-annex shell to 			-- support committing.-			liftIO $ catchMaybeIO $ do+			liftIO $ catchMaybeIO $ 				withQuietOutput createProcessSuccess $ 					proc shellcmd $ 						toCommand shellparams
Remote/Glacier.hs view
@@ -40,10 +40,10 @@ 	setup = glacierSetup } -gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex Remote+gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex (Maybe Remote) gen r u c gc = new <$> remoteCost gc veryExpensiveRemoteCost   where-	new cst = encryptableRemote c+	new cst = Just $ encryptableRemote c 		(storeEncrypted this) 		(retrieveEncrypted this) 		this@@ -98,7 +98,7 @@ 			storeHelper r k $ streamMeteredFile src meterupdate  storeEncrypted :: Remote -> (Cipher, Key) -> Key -> MeterUpdate -> Annex Bool-storeEncrypted r (cipher, enck) k p = sendAnnex k (void $ remove r enck) $ \src -> do+storeEncrypted r (cipher, enck) k p = sendAnnex k (void $ remove r enck) $ \src -> 	metered (Just p) k $ \meterupdate -> 		storeHelper r enck $ \h -> 			encrypt (getGpgEncParams r) cipher (feedFile src)@@ -209,7 +209,7 @@ 			]  glacierAction :: Remote -> [CommandParam] -> Annex Bool-glacierAction r params = runGlacier (config r) (uuid r) params+glacierAction r = runGlacier (config r) (uuid r)  runGlacier :: RemoteConfig -> UUID -> [CommandParam] -> Annex Bool runGlacier c u params = go =<< glacierEnv c u@@ -222,7 +222,7 @@ glacierParams c params = datacenter:params   where 	datacenter = Param $ "--region=" ++-		(fromJust $ M.lookup "datacenter" c)+		fromJust (M.lookup "datacenter" c)  glacierEnv :: RemoteConfig -> UUID -> Annex (Maybe [(String, String)]) glacierEnv c u = go =<< getRemoteCredPairFor "glacier" c creds@@ -282,7 +282,7 @@ 				enckeys <- forM keys $ \k -> 					maybe k snd <$> cipherKey (config r) k 				let keymap = M.fromList $ zip enckeys keys-				let convert = catMaybes . map (`M.lookup` keymap)+				let convert = mapMaybe (`M.lookup` keymap) 				return (convert succeeded, convert failed)  	parse c [] = c
Remote/Helper/Chunked.hs view
@@ -68,7 +68,7 @@   where 	go = do 		stored <- storer tmpdests-		when (chunksize /= Nothing) $ do+		when (isNothing chunksize) $ do 			let chunkcount = basef ++ chunkCount 			recorder chunkcount (show $ length stored) 		finalizer tmp dest@@ -79,7 +79,7 @@  	basef = tmp ++ keyFile key 	tmpdests-		| chunksize == Nothing = [basef]+		| isNothing chunksize = [basef] 		| otherwise = map (basef ++ ) chunkStream  {- Given a list of destinations to use, chunks the data according to the@@ -123,5 +123,5 @@ meteredWriteFileChunks :: MeterUpdate -> FilePath -> [v] -> (v -> IO L.ByteString) -> IO () meteredWriteFileChunks meterupdate dest chunks feeder = 	withBinaryFile dest WriteMode $ \h ->-		forM_ chunks $ \c ->-			meteredWrite meterupdate h =<< feeder c+		forM_ chunks $+			meteredWrite meterupdate h <=< feeder
Remote/Helper/Hooks.hs view
@@ -35,8 +35,8 @@ 		{ storeKey = \k f p -> wrapper $ storeKey r k f p 		, retrieveKeyFile = \k f d p -> wrapper $ retrieveKeyFile r k f d p 		, retrieveKeyFileCheap = \k f -> wrapper $ retrieveKeyFileCheap r k f-		, removeKey = \k -> wrapper $ removeKey r k-		, hasKey = \k -> wrapper $ hasKey r k+		, removeKey = wrapper . removeKey r+		, hasKey = wrapper . hasKey r 		} 	  where 		wrapper = runHooks r' starthook stophook@@ -45,7 +45,7 @@ runHooks r starthook stophook a = do 	dir <- fromRepo gitAnnexRemotesDir 	let lck = dir </> remoteid ++ ".lck"-	whenM (not . any (== lck) . M.keys <$> getPool) $ do+	whenM (notElem lck . M.keys <$> getPool) $ do 		liftIO $ createDirectoryIfMissing True dir 		firstrun lck 	a
+ Remote/Helper/Messages.hs view
@@ -0,0 +1,17 @@+{- git-annex remote messages+ -+ - Copyright 2013 Joey Hess <joey@kitenet.net>+ -+ - Licensed under the GNU GPL version 3 or higher.+ -}++module Remote.Helper.Messages where++import Common.Annex+import qualified Git++showChecking :: Git.Repo -> Annex ()+showChecking r = showAction $ "checking " ++ Git.repoDescribe r++cantCheck :: Git.Repo -> Either String Bool+cantCheck r = Left $ "unable to check " ++ Git.repoDescribe r
Remote/Helper/Ssh.hs view
@@ -1,6 +1,6 @@-{- git-annex remote access with ssh+{- git-annex remote access with ssh and git-annex-shell  -- - Copyright 2011,2012 Joey Hess <joey@kitenet.net>+ - Copyright 2011-2013 Joey Hess <joey@kitenet.net>  -  - Licensed under the GNU GPL version 3 or higher.  -}@@ -12,19 +12,27 @@ import qualified Git.Url import Annex.UUID import Annex.Ssh-import Fields+import Fields (Field, fieldName)+import qualified Fields import Types.GitConfig+import Types.Key+import Remote.Helper.Messages+import Utility.Metered+import Utility.Rsync+import Config+import Types.Remote+import Logs.Transfer  {- Generates parameters to ssh to a repository's host and run a command.  - Caller is responsible for doing any neccessary shellEscaping of the  - passed command. -}-sshToRepo :: Git.Repo -> [CommandParam] -> Annex [CommandParam]-sshToRepo repo sshcmd = do+toRepo :: Git.Repo -> [CommandParam] -> Annex [CommandParam]+toRepo r sshcmd = do 	g <- fromRepo id-	let c = extractRemoteGitConfig g (Git.repoDescribe repo)+	let c = extractRemoteGitConfig g (Git.repoDescribe r) 	let opts = map Param $ remoteAnnexSshOptions c-	let host = Git.Url.hostuser repo-	params <- sshCachingOptions (host, Git.Url.port repo) opts+	let host = Git.Url.hostuser r+	params <- sshCachingOptions (host, Git.Url.port r) opts 	return $ params ++ Param host : sshcmd  {- Generates parameters to run a git-annex-shell command on a remote@@ -33,17 +41,17 @@ git_annex_shell r command params fields 	| not $ Git.repoIsUrl r = return $ Just (shellcmd, shellopts ++ fieldopts) 	| Git.repoIsSsh r = do-		uuid <- getRepoUUID r-		sshparams <- sshToRepo r [Param $ sshcmd uuid ]+		u <- getRepoUUID r+		sshparams <- toRepo r [Param $ sshcmd u ] 		return $ Just ("ssh", sshparams) 	| otherwise = return Nothing   where 	dir = Git.repoPath r 	shellcmd = "git-annex-shell" 	shellopts = Param command : File dir : params-	sshcmd uuid = unwords $+	sshcmd u = unwords $ 		shellcmd : map shellEscape (toCommand shellopts) ++-		uuidcheck uuid +++		uuidcheck u ++ 		map shellEscape (toCommand fieldopts) 	uuidcheck NoUUID = [] 	uuidcheck (UUID u) = ["--uuid", u]@@ -71,3 +79,70 @@ 	case s of 		Just (c, ps) -> liftIO $ with c ps 		Nothing -> return errorval++{- Checks if a remote contains a key. -}+inAnnex :: Git.Repo -> Key -> Annex (Either String Bool)+inAnnex r k = do+	showChecking r+	onRemote r (check, cantCheck r) "inannex" [Param $ key2file k] []+  where+	check c p = dispatch <$> safeSystem c p+	dispatch ExitSuccess = Right True+	dispatch (ExitFailure 1) = Right False+	dispatch _ = cantCheck r++{- Removes a key from a remote. -}+dropKey :: Git.Repo -> Key -> Annex Bool+dropKey r key = onRemote r (boolSystem, False) "dropkey"+	[ Params "--quiet --force"+	, Param $ key2file key+	]+	[]++rsyncHelper :: Maybe MeterUpdate -> [CommandParam] -> Annex Bool+rsyncHelper callback params = do+	showOutput -- make way for progress bar+	ifM (liftIO $ (maybe rsync rsyncProgress callback) params)+		( return True+		, do+			showLongNote "rsync failed -- run git annex again to resume file transfer"+			return False+		)++{- Generates rsync parameters that ssh to the remote and asks it+ - to either receive or send the key's content. -}+rsyncParamsRemote :: Remote -> Direction -> Key -> FilePath -> AssociatedFile -> Annex [CommandParam]+rsyncParamsRemote r direction key file afile = do+	u <- getUUID+	direct <- isDirect+	let fields = (Fields.remoteUUID, fromUUID u)+		: (Fields.direct, if direct then "1" else "")+		: maybe [] (\f -> [(Fields.associatedFile, f)]) afile+	Just (shellcmd, shellparams) <- git_annex_shell (repo r)+		(if direction == Download then "sendkey" else "recvkey")+		[ Param $ key2file key ]+		fields+	-- Convert the ssh command into rsync command line.+	let eparam = rsyncShell (Param shellcmd:shellparams)+	let o = rsyncParams r+	return $ if direction == Download+		then o ++ rsyncopts eparam dummy (File file)+		else o ++ rsyncopts eparam (File file) dummy+  where+	rsyncopts ps source dest+		| end ps == [dashdash] = ps ++ [source, dest]+		| otherwise = ps ++ [dashdash, source, dest]+	dashdash = Param "--"+	{- The rsync shell parameter controls where rsync+	 - goes, so the source/dest parameter can be a dummy value,+	 - that just enables remote rsync mode.+	 - For maximum compatability with some patched rsyncs,+	 - the dummy value needs to still contain a hostname,+	 - even though this hostname will never be used. -}+	dummy = Param "dummy:"++-- --inplace to resume partial files+rsyncParams :: Remote -> [CommandParam]+rsyncParams r = Params "--progress --inplace" :+	map Param (remoteAnnexRsyncOptions $ gitconfig r)+
Remote/Hook.hs view
@@ -35,10 +35,10 @@ 	setup = hookSetup } -gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex Remote+gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex (Maybe Remote) gen r u c gc = do 	cst <- remoteCost gc expensiveRemoteCost-	return $ encryptableRemote c+	return $ Just $ encryptableRemote c 		(storeEncrypted hooktype $ getGpgEncParams (c,gc)) 		(retrieveEncrypted hooktype) 		Remote {@@ -93,7 +93,7 @@ 	command <- getConfig (annexConfig hook) "" 	if null command 		then do-			fallback <- getConfig (annexConfig $ hookfallback) ""+			fallback <- getConfig (annexConfig hookfallback) "" 			if null fallback 				then do 					warning $ "missing configuration for " ++ hook ++ " or " ++ hookfallback
Remote/List.hs view
@@ -67,7 +67,7 @@ 			return rs' 		else return rs   where-	process m t = enumerate t >>= mapM (remoteGen m t)+	process m t = enumerate t >>= mapM (remoteGen m t) >>= return . catMaybes  {- Forces the remoteList to be re-generated, re-reading the git config. -} remoteListRefresh :: Annex [Remote]@@ -80,16 +80,17 @@ 	remoteList  {- Generates a Remote. -}-remoteGen :: (M.Map UUID RemoteConfig) -> RemoteType -> Git.Repo -> Annex Remote+remoteGen :: M.Map UUID RemoteConfig -> RemoteType -> Git.Repo -> Annex (Maybe Remote) remoteGen m t r = do 	u <- getRepoUUID r 	g <- fromRepo id 	let gc = extractRemoteGitConfig g (Git.repoDescribe r) 	let c = fromMaybe M.empty $ M.lookup u m-	addHooks <$> generate t r u c gc+	mrmt <- generate t r u c gc+	return $ addHooks <$> mrmt  {- Updates a local git Remote, re-reading its git config. -}-updateRemote :: Remote -> Annex Remote+updateRemote :: Remote -> Annex (Maybe Remote) updateRemote remote = do 	m <- readRemoteLog 	remote' <- updaterepo $ repo remote
Remote/Rsync.hs view
@@ -58,14 +58,14 @@ 	setup = rsyncSetup } -gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex Remote+gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex (Maybe Remote) gen r u c gc = do 	cst <- remoteCost gc expensiveRemoteCost 	(transport, url) <- rsyncTransport gc $ 		fromMaybe (error "missing rsyncurl") $ remoteAnnexRsyncUrl gc 	let o = genRsyncOpts c gc transport url 	let islocal = rsyncUrlIsPath $ rsyncUrl o-	return $ encryptableRemote c+	return $ Just $ encryptableRemote c 		(storeEncrypted o $ getGpgEncParams (c,gc)) 		(retrieveEncrypted o) 		Remote@@ -86,7 +86,7 @@ 				then Just $ rsyncUrl o 				else Nothing 			, readonly = False-			, globallyAvailable = not $ islocal+			, globallyAvailable = not islocal 			, remotetype = remote 			} @@ -236,7 +236,7 @@  {- Runs an action in an empty scratch directory that can be used to build  - up trees for rsync. -}-withRsyncScratchDir :: (FilePath -> Annex Bool) -> Annex Bool+withRsyncScratchDir :: (FilePath -> Annex a) -> Annex a withRsyncScratchDir a = do #ifndef mingw32_HOST_OS 	v <- liftIO getProcessID@@ -262,7 +262,7 @@ 		, File dest 		] -rsyncRemote :: RsyncOpts -> (Maybe MeterUpdate) -> [CommandParam] -> Annex Bool+rsyncRemote :: RsyncOpts -> Maybe MeterUpdate -> [CommandParam] -> Annex Bool rsyncRemote o callback params = do 	showOutput -- make way for progress bar 	ifM (liftIO $ (maybe rsync rsyncProgress callback) ps)
Remote/S3.hs view
@@ -43,10 +43,10 @@ 	setup = s3Setup } -gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex Remote+gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex (Maybe Remote) gen r u c gc = new <$> remoteCost gc expensiveRemoteCost   where-	new cst = encryptableRemote c+	new cst = Just $ encryptableRemote c 		(storeEncrypted this) 		(retrieveEncrypted this) 		this
Remote/Web.hs view
@@ -43,9 +43,9 @@ 	r <- liftIO $ Git.Construct.remoteNamed "web" Git.Construct.fromUnknown 	return [r] -gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex Remote+gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex (Maybe Remote) gen r _ _ gc = -	return Remote {+	return $ Just Remote { 		uuid = webUUID, 		cost = expensiveRemoteCost, 		name = Git.repoDescribe r,
Remote/WebDAV.hs view
@@ -46,10 +46,10 @@ 	setup = webdavSetup } -gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex Remote+gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex (Maybe Remote) gen r u c gc = new <$> remoteCost gc expensiveRemoteCost   where-	new cst = encryptableRemote c+	new cst = Just $ encryptableRemote c 		(storeEncrypted this) 		(retrieveEncrypted this) 		this@@ -181,9 +181,9 @@ 		 - or perhaps this was an intermittent error. -} 		onerr url = do 			v <- davUrlExists url user pass-			if v == Right True-				then return $ Left $ "failed to read " ++ url-				else return v+			return $ if v == Right True+				then Left $ "failed to read " ++ url+				else v  withStoredFiles 	:: Remote
Seek.hs view
@@ -60,7 +60,7 @@ withPathContents a params = map a . concat <$> liftIO (mapM get params)   where 	get p = ifM (isDirectory <$> getFileStatus p)-		( map (\f -> (f, makeRelative p f)) <$> dirContentsRecursive p+		( map (\f -> (f, makeRelative (parentDir p) f)) <$> dirContentsRecursive p 		, return [(p, takeFileName p)] 		) 
− Setup.o

binary file changed (16352 → absent bytes)

Types/GitConfig.hs view
@@ -42,6 +42,7 @@ 	, annexCrippledFileSystem :: Bool 	, annexLargeFiles :: Maybe String 	, coreSymlinks :: Bool+	, gcryptId :: Maybe String 	}  extractGitConfig :: Git.Repo -> GitConfig@@ -68,6 +69,7 @@ 	, annexCrippledFileSystem = getbool (annex "crippledfilesystem") False 	, annexLargeFiles = getmaybe (annex "largefiles") 	, coreSymlinks = getbool "core.symlinks" True+	, gcryptId = getmaybe "core.gcrypt-id" 	}   where 	get k def = fromMaybe def $ getmayberead k@@ -104,6 +106,7 @@ 	, remoteAnnexBupRepo :: Maybe String 	, remoteAnnexBupSplitOptions :: [String] 	, remoteAnnexDirectory :: Maybe FilePath+	, remoteAnnexGCrypt :: Maybe String 	, remoteAnnexHookType :: Maybe String 	{- A regular git remote's git repository config. -} 	, remoteGitConfig :: Maybe GitConfig@@ -127,6 +130,7 @@ 	, remoteAnnexBupRepo = getmaybe "buprepo" 	, remoteAnnexBupSplitOptions = getoptions "bup-split-options" 	, remoteAnnexDirectory = notempty $ getmaybe "directory"+	, remoteAnnexGCrypt = notempty $ getmaybe "gcrypt" 	, remoteAnnexHookType = notempty $ getmaybe "hooktype" 	, remoteGitConfig = Nothing 	}
Types/Key.hs view
@@ -81,7 +81,7 @@  instance Arbitrary Key where 	arbitrary = Key-		<$> arbitrary+		<$> (listOf1 $ elements $ ['A'..'Z'] ++ ['a'..'z'] ++ ['0'..'9'] ++ "-_\r\n \t") 		<*> (listOf1 $ elements ['A'..'Z']) -- BACKEND 		<*> ((abs <$>) <$> arbitrary) -- size cannot be negative 		<*> arbitrary
Types/Remote.hs view
@@ -18,6 +18,7 @@ import Types.GitConfig import Config.Cost import Utility.Metered+import Git.Remote  type RemoteConfigKey = String type RemoteConfig = M.Map RemoteConfigKey String@@ -29,7 +30,7 @@ 	-- enumerates remotes of this type 	enumerate :: a [Git.Repo], 	-- generates a remote of this type-	generate :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> a (RemoteA a),+	generate :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> a (Maybe (RemoteA a)), 	-- initializes or changes a remote 	setup :: Maybe UUID -> RemoteConfig -> a (RemoteConfig, UUID) }@@ -42,7 +43,7 @@ 	-- each Remote has a unique uuid 	uuid :: UUID, 	-- each Remote has a human visible name-	name :: String,+	name :: RemoteName, 	-- Remotes have a use cost; higher is more expensive 	cost :: Cost, 	-- Transfers a key to the remote.
Types/StandardGroups.hs view
@@ -77,7 +77,7 @@ preferredContent TransferGroup = lastResort $ 	"not (inallgroup=client and copies=client:2) and (" ++ preferredContent ClientGroup ++ ")" preferredContent BackupGroup = "include=*"-preferredContent IncrementalBackupGroup = lastResort $+preferredContent IncrementalBackupGroup = lastResort 	"include=* and (not copies=incrementalbackup:1)" preferredContent SmallArchiveGroup = lastResort $ 	"(include=*/archive/* or include=archive/*) and (" ++ preferredContent FullArchiveGroup ++ ")"
Types/TrustLevel.hs view
@@ -17,6 +17,8 @@  import Types.UUID +-- This order may seem backwards, but we generally want to list dead+-- remotes last and trusted ones first. data TrustLevel = Trusted | SemiTrusted | UnTrusted | DeadTrusted 	deriving (Eq, Enum, Ord, Bounded) 
Upgrade/V1.hs view
@@ -107,7 +107,7 @@ 		dir <- fromRepo Upgrade.V2.gitStateDir 		ifM (liftIO $ doesDirectoryExist dir) 			( mapMaybe oldlog2key-				<$> (liftIO $ getDirectoryContents dir)+				<$> liftIO (getDirectoryContents dir) 			, return [] 			) 	move (l, k) = do
− Utility/Applicative.o

binary file changed (1936 → absent bytes)

+ Utility/Data.hs view
@@ -0,0 +1,17 @@+{- utilities for simple data types+ -+ - Copyright 2013 Joey Hess <joey@kitenet.net>+ -+ - Licensed under the GNU GPL version 3 or higher.+ -}++module Utility.Data where++{- First item in the list that is not Nothing. -}+firstJust :: Eq a => [Maybe a] -> Maybe a+firstJust ms = case dropWhile (== Nothing) ms of+	[] -> Nothing+	(md:_) -> md++eitherToMaybe :: Either a b -> Maybe b+eitherToMaybe = either (const Nothing) Just
− Utility/Directory.o

binary file changed (25096 → absent bytes)

− Utility/Env.o

binary file changed (5736 → absent bytes)

Utility/Exception.hs view
@@ -14,6 +14,7 @@ import Control.Applicative import Control.Monad import System.IO.Error (isDoesNotExistError)+import Utility.Data  {- Catches IO errors and returns a Bool -} catchBoolIO :: IO Bool -> IO Bool@@ -54,5 +55,5 @@  {- Catches only DoesNotExist exceptions, and lets all others through. -} tryWhenExists :: IO a -> IO (Maybe a)-tryWhenExists a = either (const Nothing) Just <$>+tryWhenExists a = eitherToMaybe <$> 	tryJust (guard . isDoesNotExistError) a
− Utility/Exception.o

binary file changed (14008 → absent bytes)

Utility/ExternalSHA.hs view
@@ -1,6 +1,7 @@ {- Calculating a SHA checksum with an external command.  -- - This is often faster than using Haskell libraries.+ - This is typically a bit faster than using Haskell libraries,+ - by around 1% to 10%. Worth it for really big files.  -  - Copyright 2011-2013 Joey Hess <joey@kitenet.net>  -
− Utility/ExternalSHA.o

binary file changed (18448 → absent bytes)

− Utility/FileSystemEncoding.o

binary file changed (11440 → absent bytes)

Utility/Format.hs view
@@ -15,7 +15,7 @@ ) where  import Text.Printf (printf)-import Data.Char (isAlphaNum, isOctDigit, isSpace, chr, ord)+import Data.Char (isAlphaNum, isOctDigit, isHexDigit, isSpace, chr, ord) import Data.Maybe (fromMaybe) import Data.Word (Word8) import Data.List (isPrefixOf)@@ -101,7 +101,7 @@ empty _ = False  {- Decodes a C-style encoding, where \n is a newline, \NNN is an octal- - encoded character, etc.+ - encoded character, and \xNN is a hex encoded character.  -} decode_c :: FormatString -> FormatString decode_c [] = []@@ -114,7 +114,12 @@ 	  where 		pair = span (/= e) v 	isescape x = x == e-	-- \NNN is an octal encoded character+	handle (x:'x':n1:n2:rest)+		| isescape x && allhex = (fromhex, rest)+	  where+	  	allhex = isHexDigit n1 && isHexDigit n2+		fromhex = [chr $ readhex [n1, n2]]+		readhex h = Prelude.read $ "0x" ++ h :: Int 	handle (x:n1:n2:n3:rest) 		| isescape x && alloctal = (fromoctal, rest) 	  where
− Utility/FreeDesktop.o

binary file changed (39336 → absent bytes)

Utility/Gpg.hs view
@@ -11,6 +11,7 @@  import Control.Applicative import Control.Concurrent+import qualified Data.Map as M  import Common import qualified Build.SysConfig as SysConfig@@ -23,8 +24,11 @@ #else import Utility.Tmp #endif+import Utility.Format (decode_c) -newtype KeyIds = KeyIds { keyIds :: [String] }+type KeyId = String++newtype KeyIds = KeyIds { keyIds :: [KeyId] } 	deriving (Ord, Eq)  {- If a specific gpg command was found at configure time, use it.@@ -138,17 +142,70 @@  - a key id, or a name; See the section 'HOW TO SPECIFY A USER ID' of  - GnuPG's manpage.) -} findPubKeys :: String -> IO KeyIds-findPubKeys for = KeyIds . parse <$> readStrict params+findPubKeys for = KeyIds . parse . lines <$> readStrict params   where 	params = [Params "--with-colons --list-public-keys", Param for]-	parse = catMaybes . map (keyIdField . split ":") . lines+	parse = catMaybes . map (keyIdField . split ":") 	keyIdField ("pub":_:_:_:f:_) = Just f 	keyIdField _ = Nothing +type UserId = String++{- All of the user's secret keys, with their UserIds.+ - Note that the UserId may be empty. -}+secretKeys :: IO (M.Map KeyId UserId)+secretKeys = M.fromList . parse . lines <$> readStrict params+  where+  	params = [Params "--with-colons --list-secret-keys --fixed-list-mode"]+	parse = extract [] Nothing . map (split ":")+	extract c (Just keyid) (("uid":_:_:_:_:_:_:_:_:userid:_):rest) =+		extract ((keyid, decode_c userid):c) Nothing rest+	extract c (Just keyid) rest =+		extract ((keyid, ""):c) Nothing rest+	extract c _ [] = c+	extract c _ (("sec":_:_:_:keyid:_):rest) =+		extract c (Just keyid) rest+	extract c k (_:rest) =+		extract c k rest++type Passphrase = String+type Size = Int+data KeyType = Algo Int | DSA | RSA++{- The maximum key size that gpg currently offers in its UI when+ - making keys. -}+maxRecommendedKeySize :: Size+maxRecommendedKeySize = 4096++{- Generates a secret key using the experimental batch mode.+ - The key is added to the secret key ring.+ - Can take a very long time, depending on system entropy levels.+ -}+genSecretKey :: KeyType -> Passphrase -> UserId -> Size -> IO ()+genSecretKey keytype passphrase userid keysize =+	withHandle StdinHandle createProcessSuccess (proc gpgcmd params) feeder+  where+	params = ["--batch", "--gen-key"]+  	feeder h = do+		hPutStr h $ unlines $ catMaybes+			[ Just $  "Key-Type: " ++ +				case keytype of+					DSA -> "DSA"+					RSA -> "RSA"+					Algo n -> show n+			, Just $ "Key-Length: " ++ show keysize+			, Just $ "Name-Real: " ++ userid+			, Just $ "Expire-Date: 0"+			, if null passphrase+				then Nothing+				else Just $ "Passphrase: " ++ passphrase+			]+		hClose h+ {- Creates a block of high-quality random data suitable to use as a cipher.  - It is armored, to avoid newlines, since gpg only reads ciphers up to the  - first newline. -}-genRandom :: Bool -> Int -> IO String+genRandom :: Bool -> Size -> IO String genRandom highQuality size = checksize <$> readStrict 	[ Params params 	, Param $ show randomquality@@ -312,7 +369,7 @@ 		(Just (KeyIds ks), ls, []) -> do 			-- Find the master key associated with the 			-- encryption subkey.-			ks' <- concat <$> mapM (findPubKeys >=*> keyIds)+			ks' <- concat <$> mapM (keyIds <$$> findPubKeys) 					[ k | k:"keyid":_ <- map (reverse . words) ls ] 			return $ sort (nub ks) == sort (nub ks') 		_ -> return False
+ Utility/Hash.hs view
@@ -0,0 +1,29 @@+{- Convenience wrapper around cryptohash.+ -+ - The resulting Digests can be shown to get a canonical hash encoding. -}++module Utility.Hash where++import Crypto.Hash+import qualified Data.ByteString.Lazy as L++sha1 :: L.ByteString -> Digest SHA1+sha1 = hashlazy++sha224 :: L.ByteString -> Digest SHA224+sha224 = hashlazy++sha256 :: L.ByteString -> Digest SHA256+sha256 = hashlazy++sha384 :: L.ByteString -> Digest SHA384+sha384 = hashlazy++sha512 :: L.ByteString -> Digest SHA512+sha512 = hashlazy++-- sha3 is not yet fully standardized+--sha3 :: L.ByteString -> Digest SHA3+--sha3 = hashlazy++
Utility/InodeCache.hs view
@@ -49,6 +49,9 @@ inodeCacheToKey :: InodeComparisonType -> InodeCache -> InodeCacheKey  inodeCacheToKey ct (InodeCache prim) = InodeCacheKey ct prim +inodeCacheToMtime :: InodeCache -> EpochTime+inodeCacheToMtime (InodeCache (InodeCachePrim _ _ mtime)) = mtime+ showInodeCache :: InodeCache -> String showInodeCache (InodeCache (InodeCachePrim inode size mtime)) = unwords 	[ show inode
Utility/Misc.hs view
@@ -91,12 +91,6 @@ 			go (replacement:acc) vs (drop (length val) s) 		| otherwise = go acc rest s -{- First item in the list that is not Nothing. -}-firstJust :: Eq a => [Maybe a] -> Maybe a-firstJust ms = case dropWhile (== Nothing) ms of-	[] -> Nothing-	(md:_) -> md- {- Given two orderings, returns the second if the first is EQ and returns  - the first otherwise.  -
− Utility/Misc.o

binary file changed (33792 → absent bytes)

Utility/Monad.hs view
@@ -53,16 +53,6 @@ infixr 3 <&&> infixr 2 <||> -{- Left-to-right Kleisli composition with a pure left/right hand side. -}-(*>=>) :: Monad m => (a -> b) -> (b -> m c) -> (a -> m c)-f *>=> g = return . f >=> g--(>=*>) :: Monad m => (a -> m b) -> (b -> c) -> (a -> m c)-f >=*> g = f >=> return . g--{- Same fixity as >=> and <=< -}-infixr 1 *>=>, >=*>- {- Runs an action, passing its value to an observer before returning it. -} observe :: Monad m => (a -> m b) -> m a -> m a observe observer a = do
− Utility/Monad.o

binary file changed (14976 → absent bytes)

− Utility/OSX.o

binary file changed (14632 → absent bytes)

− Utility/PartialPrelude.o

binary file changed (8648 → absent bytes)

− Utility/Path.o

binary file changed (56016 → absent bytes)

− Utility/Process.o

binary file changed (71704 → absent bytes)

Utility/SRV.hs view
@@ -67,8 +67,14 @@ lookupSRV (SRV srv) = do 	seed <- makeResolvSeed defaultResolvConf 	r <- withResolver seed $ flip DNS.lookupSRV $ B8.fromString srv-	return $ maybe [] (orderHosts . map tohosts) r+	return $+#if MIN_VERSION_dns(1,0,0)+		either (const []) use r+#else+		maybe [] use r+#endif   where+  	use = orderHosts . map tohosts 	tohosts (priority, weight, port, hostname) = 		( (priority, weight) 		, (B8.toString hostname, PortNumber $ fromIntegral port)
− Utility/SafeCommand.o

binary file changed (49128 → absent bytes)

− Utility/Tmp.o

binary file changed (22000 → absent bytes)

− Utility/UserInfo.o

binary file changed (10264 → absent bytes)

Utility/WebApp.hs view
@@ -12,6 +12,7 @@ import Common import Utility.Tmp import Utility.FileMode+import Utility.Hash  import qualified Yesod import qualified Network.Wai as Wai@@ -24,7 +25,6 @@ import Network.Socket import Control.Exception import Crypto.Random-import Data.Digest.Pure.SHA import qualified Web.ClientSession as CS import qualified Data.ByteString.Lazy as L import qualified Data.ByteString.Lazy.UTF8 as L8@@ -214,7 +214,7 @@ 	return $ 		case genBytes 512 g of 			Left e -> error $ "failed to generate secret token: " ++ show e-			Right (s, _) -> showDigest $ sha512 $ L.fromChunks [s]+			Right (s, _) -> show $ sha512 $ L.fromChunks [s]  {- A Yesod isAuthorized method, which checks the auth cgi parameter  - against a token extracted from the Yesod application.
debian/NEWS view
@@ -1,3 +1,11 @@+git-annex (4.20130921) unstable; urgency=low++   The layout of gcrypt repositories has changed, and+   if you created one you must manually upgrade it.+   See /usr/share/doc/git-annex/html/upgrades/gcrypt.html++ -- Joey Hess <joeyh@debian.org>  Tue, 24 Sep 2013 13:55:23 -0400+ git-annex (3.20120123) unstable; urgency=low    There was a bug in the handling of directory special remotes that
debian/changelog view
@@ -1,3 +1,57 @@+git-annex (4.20130921) UNRELEASED; urgency=low++  * Note that the layout of gcrypt repositories has changed, and+    if you created one you must manually upgrade it.+    See http://git-annex.branchable.com/upgrades/gcrypt/+  * git-annex-shell: Added support for operating inside gcrypt repositories.+  * import: Preserve top-level directory structure.+  * Use cryptohash rather than SHA for hashing when no external hash program+    is available. This is a significant speedup for SHA256 on OSX, for+    example.+  * Android build redone from scratch, many dependencies updated,+    and entire build can now be done using provided scripts.+  * assistant: Clear the list of failed transfers when doing a full transfer+    scan. This prevents repeated retries to download files that are not+    available, or are not referenced by the current git tree.+  * indirect: Better behavior when a file in direct mode is not owned by+    the user running the conversion.+  * add, import, assistant: Better preserve the mtime of symlinks,+    when when adding content that gets deduplicated.+  * webapp: Support storing encrypted git repositories on rsync.net.++ -- Joey Hess <joeyh@debian.org>  Sun, 22 Sep 2013 19:42:29 -0400++git-annex (4.20130920) unstable; urgency=low++  * webapp: Initial support for setting up encrypted removable drives.+  * Recommend using my patched gcrypt, which fixes some bugs:+    https://github.com/joeyh/git-remote-gcrypt+  * Support hot-swapping of removable drives containing gcrypt repositories.+  * list: New command, displays a compact table of remotes that+    contain files.+    (Thanks, anarcat for display code and mastensg for inspiration.)+  * fsck: Fix detection and fixing of present direct mode files that are+    wrongly represented as standin symlinks on crippled filesystems.+  * sync: Fix bug that caused direct mode mappings to not be updated+    when merging files into the tree on Windows.+  * sync: Don't fail if the directory it is run in gets removed by the+    sync.+  * addurl: Fix quvi audodetection, broken in last release.+  * status: In local mode, displays information about variance from configured+    numcopies levels. (--fast avoids calculating these)+  * gcrypt: Ensure that signing key is set to one of the participants keys.+  * webapp: Show encryption information when editing a remote.+  * Avoid unnecessarily catting non-symlink files from git, which can be+    so large it runs out of memory.++ -- Joey Hess <joeyh@debian.org>  Fri, 20 Sep 2013 10:34:51 -0400++git-annex (4.20130911) unstable; urgency=low++  * Fix problem with test suite in non-unicode locale.++ -- Joey Hess <joeyh@debian.org>  Wed, 11 Sep 2013 12:14:16 -0400+ git-annex (4.20130909) unstable; urgency=low    * initremote: Syntax change when setting up an encrypted special remote.
debian/control view
@@ -9,6 +9,7 @@ 	libghc-hslogger-dev, 	libghc-pcre-light-dev, 	libghc-sha-dev,+	libghc-cryptohash-dev, 	libghc-regex-tdfa-dev [!mips !mipsel !s390], 	libghc-dataenc-dev, 	libghc-utf8-string-dev,@@ -72,7 +73,7 @@ 	wget, 	curl, 	openssh-client (>= 1:5.6p1)-Recommends: lsof, gnupg, bind9-host, ssh-askpass, quvi, git-remote-gcrypt+Recommends: lsof, gnupg, bind9-host, ssh-askpass, quvi, git-remote-gcrypt (>= 0.20130908-4) Suggests: graphviz, bup, libnss-mdns Description: manage files with git, without checking their contents into git  git-annex allows managing files with git, without checking the file
− doc/Android.mdwn
@@ -1,53 +0,0 @@-git-annex is now available for Android. This includes the -[[git-annex assistant|/assistant]], for easy syncing between your Android-and other devices. You do not need to root your Android to use git-annex.--[[Android installation instructions|/install/android]]--When you run the git-annex Android app, two windows will open. The first is-a terminal window, and the second is a web browser showing the git-annex-webapp.--[[!img apps.png alt="two windows"]]--[[!toc ]]--## closing and reopening the webapp--The webapp does not need to be left open after you've set up your-repository. As long as the terminal window is left open, git-annex will-remain running and sync your files. To re-open the webapp after closing it,-use the [[!img newwindow.png alt="New Window"]] icon in the terminal window.--## starting git-annex--The app is not currently automatically started on boot, so you will need to-manually open it to keep your files in sync. You do not need to leave the-app running all the time, though. It will sync back up automatically when-started.--## stopping git-annex--Simply close the terminal window to stop git-annex from running.--## using the command line--[[!img terminal.png alt="Android terminal"]]--If you prefer to use `git-annex` at the command line, you can do so using the-terminal. A fairly full set of tools is provided, including `git`, `ssh`,-`rsync`, and `gpg`.--To prevent the webapp from being automatically started-when a terminal window opens, go into the terminal preferences, to "Inital-Command", and clear out the default `git annex webapp` setting.--Or, if you'd like to run the assistant automatically, but not open the-webapp, change the "Initial Command" to: `git annex assistant --autostart`--## using from adb shell--To set up the git-annex environment from within `adb shell`, run:-`/data/data/ga.androidterm/runshell`--This will launch a shell that has git-annex, git, etc in PATH.
− doc/Android/comment_15_77bafc01b47d4cf8f96bde2b6704ed71._comment
@@ -1,8 +0,0 @@-[[!comment format=mdwn- username="http://yarikoptic.myopenid.com/"- nickname="site-myopenid"- subject="asking for ssh password in the terminal (not in web ui)"- date="2013-05-24T23:49:40Z"- content="""-not sure if that is a known issue:  whenever \"remote server\" is added, password needs to be typed back in the original terminal... is a bit challenging to do on android and not straightforward user-wise  -"""]]
− doc/Android/comment_19_dc7b428f525a082834cb87221fc627ff._comment
@@ -1,8 +0,0 @@-[[!comment format=mdwn- username="http://afoolishmanifesto.com/"- nickname="frioux"- subject="SSH Keys?"- date="2013-07-17T16:50:46Z"- content="""-Is there a way I can use an SSH Key to connect to a remote server?  What would be really cool, though maybe not feasible, would be to use connectbot as an ssh-agent.-"""]]
− doc/Android/comment_20_81940ea56ace3dcd5fa84dfccd88ad96._comment
@@ -1,10 +0,0 @@-[[!comment format=mdwn- username="http://joeyh.name/"- ip="4.154.4.90"- subject="comment 20"- date="2013-07-17T19:06:31Z"- content="""-@frioux the webapp has a \"ssh server\" option that will set up a ssh key and use it for passwordless data transfer to a ssh server. You have to enter your password twice in the git-annex terminal app, and then it's set up.--The openssh included in the git-annex app fully supports everything you can usually do with ssh keys, so you can also set this up by hand.-"""]]
− doc/Android/comment_29_37aa87a451d4390ed367402eec740855._comment
@@ -1,12 +0,0 @@-[[!comment format=mdwn- username="http://joeyh.name/"- ip="4.154.0.21"- subject="comment 29"- date="2013-07-30T17:45:27Z"- content="""-If you are experiencing a problem using git-annex on Android, please examine the list of [[bugs]] and add a new, detailed bug report if no-one has reported the problem. If you are not sure if you have a bug, or need help in filing a good bug report, ask for help in the [[forum]].--I have moved to [[oldcomments]] a lot of old comments about problems that may be fixed or-not (hard to tell without a bug report!) " This page cannot-scale to handle every bug report that someone wants to paste into it.-"""]]
− doc/Android/oldcomments.mdwn
@@ -1,2 +0,0 @@-If one of these comments is yours, and you are still experiencing the-problem, please file a proper [[bug_report|bugs]]. --[[Joey]]
− doc/Android/oldcomments/comment_10_20e3d513b8b97496d76aca4619026cd6._comment
@@ -1,16 +0,0 @@-[[!comment format=mdwn- username="http://yarikoptic.myopenid.com/"- nickname="site-myopenid"- subject="comment 10"- date="2013-05-24T03:11:50Z"- content="""->you said before the error was \"Read-only file system\". Now you're saying it's \"Cross-device link\". I'm slightly confused.--;-)  Sorry for confusion, here are the details:--\"Read-only file system\" -- that error appeared when I started \"stock git annex\", i.e. from running /data/data/ga.androidterm/lib/lib.start.so .-Since you have suggested that it might be coming from hard linking command, I have ran that one manually, and that is when I got \"Cross-device link\" error, which suggests that hard linking is not the one at fault here.--I will try fresh build now-Cheers,-"""]]
− doc/Android/oldcomments/comment_11_c96b8f1cc1583a74eb2483f48357f023._comment
@@ -1,15 +0,0 @@-[[!comment format=mdwn- username="http://yarikoptic.myopenid.com/"- nickname="site-myopenid"- subject="fresh build"- date="2013-05-24T03:21:29Z"- content="""-With fresh build got:--u0_a39@android:/ $ git annex webapp-/system/bin/sh: git: not found--the PATH is /sbin:/system/bin:/system/xbin--where should git (and ga) reside now ? (/data somehow is not accessible now to u0_a39)-"""]]
− doc/Android/oldcomments/comment_12_6551f5fa081494b079c10a33c9b0d8ad._comment
@@ -1,10 +0,0 @@-[[!comment format=mdwn- username="http://joeyh.name/"- nickname="joey"- subject="comment 12"- date="2013-05-24T03:26:33Z"- content="""-You should be able to run /data/data/ga.androidterm/runshell even if you cannot ls /data. This adds /data/data/ga.androidterm/bin to PATH--However, the shell that the app starts is started by runshell anyway, so I don't understand how this could happen.-"""]]
− doc/Android/oldcomments/comment_13_7c633d245651ec08f63194fe1fc194ae._comment
@@ -1,8 +0,0 @@-[[!comment format=mdwn- username="https://www.google.com/accounts/o8/id?id=AItOawkwjBDXkP9HAQKhjTgThGOxUa1B99y_WRA"- nickname="Franck"- subject="Still problems with my old N1/CM7"- date="2013-05-24T06:01:18Z"- content="""-Hi, thank you for addressing this issue! I installed the new release but now it fails in another way: the message is just \"In mgmain NJI_OnLoad\" then the terminal says that the session is closed.-"""]]
− doc/Android/oldcomments/comment_14_60c2403140085f9caf48a33b59a36ab4._comment
@@ -1,8 +0,0 @@-[[!comment format=mdwn- username="http://yarikoptic.myopenid.com/"- nickname="site-myopenid"- subject="It starts after uninstall/install"- date="2013-05-24T23:29:52Z"- content="""-Hi Joey -- there is success here... previous installation was \"updated\" by installing the new package without uninstalling previous one, and that apparently didn't work correctly (I didn't even have bin/ directory you mentioned).  So I have removed previous installation and reinstalled it again -- it starts now!  Thanks ;)-"""]]
− doc/Android/oldcomments/comment_16_9af73451be09f03cfff81fdf9481ffc4._comment
@@ -1,27 +0,0 @@-[[!comment format=mdwn- username="http://yarikoptic.myopenid.com/"- nickname="site-myopenid"- subject="Few other issues"- date="2013-05-25T15:35:46Z"- content="""-Hi again.--talking about 4.20130523-gcfe07a2 version:--- because working in the terminal to interact with git-annex probably should not be a common case on Android, may be it is worth making default type of new added repository to become a full backup?  I have initiated a new one, attached a remote one, it said \"synced\" but all the files were just containing symlinks and were not usable.  I had to switch to \"full backup\" (or whatever that name) to finally get directory synced--- log file might grow too large simply because of containing numerous entries for attempting connect remote repository while offline, e.g.--Please make sure you have the correct access rights-and the repository exists.-ssh: Could not resolve hostname onerussian.com: No address associated with hostname-fatal: Could not read from remote repository.--IMHO those should not be there at all, e.g. if it is known that ATM there is no network connectivity--- 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--"""]]
− doc/Android/oldcomments/comment_17_f76561a654b534df3a807b1c045710b2._comment
@@ -1,8 +0,0 @@-[[!comment format=mdwn- username="http://yarikoptic.myopenid.com/"- nickname="site-myopenid"- subject="comment 17"- date="2013-05-29T02:43:29Z"- content="""-joey -- any additional information could I provide to troubleshoot the issue?  original repository seems to sync ok, but I can't \"administer\" it if I can't even switch to it...-"""]]
− doc/Android/oldcomments/comment_18_1b46cdf154ddadfe17e4b6e4054dc619._comment
@@ -1,17 +0,0 @@-[[!comment format=mdwn- username="http://aap.liquidid.net/"- nickname="AAP"- subject="comment 18"- date="2013-05-30T11:23:58Z"- content="""-I too get the 'link busybox: Read-only file system' message. Here is my phone info: --Phone: Samsung Galaxy Y GT-S5360 (rooted)   -Android: 2.3.6 Gingerbread   -BusyBox path: /system/xbin/ ---Androids own terminal seems not to understand the d argument (-ld: No such file or directory) but over ssh 'ls -ld /data/data/ga.androidterm' returns-     -         drwxr-x--x    1 app_97   app_97           0 May 30 12:57 /data/data/ga.androidterm/-"""]]
− doc/Android/oldcomments/comment_1_cc9caa5dd22dd67e5c1d22d697096dd2._comment
@@ -1,15 +0,0 @@-[[!comment format=txt- username="http://yarikoptic.myopenid.com/"- nickname="site-myopenid"- subject="Does it require the device to be rooted?"- date="2013-05-16T20:55:45Z"- content="""-Following your news on kickstarter downloaded the .apk, and installed it.  Upn start I just got a terminal window with--  link busybox: Read-only file system--  [Terminal session finished]--That is on Galaxy Note--"""]]
− doc/Android/oldcomments/comment_21_5903f6a4a81a6534fa8cfafb3b6c37bb._comment
@@ -1,8 +0,0 @@-[[!comment format=mdwn- username="http://afoolishmanifesto.com/"- nickname="frioux"- subject="SSH Keys - 2"- date="2013-07-17T22:56:37Z"- content="""-@joey should I be using the nightlies to see that?  Under \"Adding a remote server using ssh\" I only see  Host name, user name, directory, and port.  Will it only be an option after I type in a password?-"""]]
− doc/Android/oldcomments/comment_22_36afd354f9669a154d7b6b2c4d43ded9._comment
@@ -1,8 +0,0 @@-[[!comment format=mdwn- username="http://joeyh.name/"- ip="4.154.6.48"- subject="comment 22"- date="2013-07-17T23:25:21Z"- content="""-@frioux it will automatically generate a new ssh key and configure the server to use it, once you submit the form and enter the password to let it into the server.-"""]]
− doc/Android/oldcomments/comment_23_de98154792e8611a134429f06d82bcb1._comment
@@ -1,8 +0,0 @@-[[!comment format=mdwn- username="http://afoolishmanifesto.com/"- nickname="frioux"- subject="comment 23"- date="2013-07-18T02:01:28Z"- content="""-@joey: ok, I got it to connect and it indeed sent over a key etc.  For some reason now though git-annex (on android) \"crashes\" shortly after starting.  To be clear, the web app says that the program crashed, the console is still there.  I suspect that it may have something to do with my largish remote repo and the time required to sync just the metadata, but I can't tell.  Any ideas what I should do next?  (Note that I *did* change it to manual mode because my phone doesn't have 30G of storage :)-"""]]
− doc/Android/oldcomments/comment_24_7ab509c25243009bfbffd796ec64e77b._comment
@@ -1,10 +0,0 @@-[[!comment format=mdwn- username="http://afoolishmanifesto.com/"- nickname="frioux"- subject="comment 24"- date="2013-07-18T11:35:06Z"- content="""-ok, it eventually got the details from the remote server, but now I'm getting some other oddities.  here is some of my log that shows what I am running into--Watcher crashed: addWatch: does not exist (No such file or directory) [2013-07-18 06:22:46 CDT] Watcher: warning Watcher crashed: addWatch: does not exist (No such file or directory) (scanning...) [2013-07-18 06:23:19 CDT] Watcher: Performing startup scan Watcher crashed: addWatch: does not exist (No such file or directory) [2013-07-18 06:24:28 CDT] Watcher: warning Watcher crashed: addWatch: does not exist (No such file or directory) (scanning...) [2013-07-18 06:24:31 CDT] Watcher: Performing startup scan Watcher crashed: addWatch: does not exist (No such file or directory) [2013-07-18 06:25:44 CDT] Watcher: warning Watcher crashed: addWatch: does not exist (No such file or directory)-"""]]
− doc/Android/oldcomments/comment_25_026d1a01d5753d71ac3dfc002f2a5eec._comment
@@ -1,10 +0,0 @@-[[!comment format=mdwn- username="https://www.google.com/accounts/o8/id?id=AItOawnRfQArYOmDd7r2DC7DkIJFOQgqXCVcAeU"- nickname="Frew"- subject="comment 25"- date="2013-07-18T13:14:46Z"- content="""-frioux here (something messed up with myopenid or something)--So I deleted the repo on my phone (via the CLI since the web app seemed hung) and recreated it; this time making sure that I set things to manual mode ASAP.  It didn't have the problem it was having before, but now what seems to have happened is that it fetches from the remote, commits to the local repo, and then immediately fetches and commits again.  It looks like it's about a 4s repeat loop.  Any ideas what I should do next?-"""]]
− doc/Android/oldcomments/comment_26_f0a044fb649d43e32c96b08edbc336c3._comment
@@ -1,12 +0,0 @@-[[!comment format=mdwn- username="http://joeyh.name/"- ip="4.154.0.140"- subject="comment 26"- date="2013-07-18T17:07:27Z"- content="""-@Frew, you should file bug reports when you have a bug.--One problem you mentioned had already had a bug report filed by someone-else:-<http://git-annex.branchable.com/bugs/Watcher_crashed:_addWatch:_does_not_exist/> So you can post your details there.-"""]]
− doc/Android/oldcomments/comment_27_6b9ae35b1ceeba14cd7a74e142870705._comment
@@ -1,34 +0,0 @@-[[!comment format=mdwn- username="https://www.google.com/accounts/o8/id?id=AItOawnaH44G3QbxBAYyDwy0PbvL0ls60XoaR3Y"- nickname="Nigel"- subject="Watcher crashed in Android on /storage/sdcard1 - bug?"- date="2013-07-29T11:50:46Z"- content="""-In webapp UI, added on first install, the location for repository: /storage/sdcard1--!warning--Watcher crashed: addWatch:--permission denied (Permission denied)--[Restart Thread]--:Performing startup scan---In terminal Window 1:--nex webapp                                         <--  Detected a crippled filesystem.--  Enabling direct mode.--  Detected a filesystem without fifo support.--  Disabling ssh connection caching.---Android 4.1.1 Huawei Y300 Annex.apk v1.0.52 version 4.20130723-"""]]
− doc/Android/oldcomments/comment_28_c91db1215f529aa68bfb0576c3c5eddc._comment
@@ -1,10 +0,0 @@-[[!comment format=mdwn- username="Jonathan"- ip="63.131.117.194"- subject="link busybox: Read-only file system"- date="2013-07-29T20:08:12Z"- content="""-Phone: HTC EVO 3d 4g-Model Number: pg86100-Android Version: 4.0.3-"""]]
− doc/Android/oldcomments/comment_2_c2422b7dd9d526b3616e49f48cf178c2._comment
@@ -1,10 +0,0 @@-[[!comment format=mdwn- username="http://joeyh.name/"- nickname="joey"- subject="comment 2"- date="2013-05-17T22:28:34Z"- content="""-The Android app works on many non-rooted Android systems.--The \"link busybox: Read-only file system\" means that `/data/data/ga.androidterm/lib/lib.busybox.so` cannot be hard linked to `/data/data/ga.androidterm/busybox`. That's not normal. I'd appreciate if you could provide more information on your Android device, like Android version and model number.-"""]]
− doc/Android/oldcomments/comment_3_0e4980c27b13dbc28477c02a82898248._comment
@@ -1,14 +0,0 @@-[[!comment format=mdwn- username="http://yarikoptic.myopenid.com/"- nickname="site-myopenid"- subject="Follow-up information on my system"- date="2013-05-18T01:23:28Z"- content="""-Sorry for the delay:  my android is stock Samsung-tuned Jelly beans.-Android 4.1.2-Baseband version N7000XXLSO--not sure if that would be of any use :-/  nothing in the logs (aLogcat) if I filter by annex -- should there any debug output? what should be a key to search by?---"""]]
− doc/Android/oldcomments/comment_4_86f7b5444e2eaea7f8f7b9160f671a1d._comment
@@ -1,10 +0,0 @@-[[!comment format=mdwn- username="https://www.google.com/accounts/o8/id?id=AItOawnu1NYw8UF-NoDbKu8YKVGxi8FoZLH7JPs"- nickname="Chris"- subject="Not starting browser on Nexus 7, Android 4.2.2"- date="2013-05-19T14:04:28Z"- content="""-I just tried to run this on my Nexus 7 which has Android 4.2.2, and I received the following: <http://hodapple.com/files/Screenshot_2013-05-19-09-49-53.png> <http://hodapple.com/files/git-annex-error.txt>--In spite of that, though, the URL provided still worked.-"""]]
− doc/Android/oldcomments/comment_5_9d78009435736a178d5a3f5a9bc0ed6a._comment
@@ -1,8 +0,0 @@-[[!comment format=mdwn- username="http://joeyh.name/"- nickname="joey"- subject="comment 5"- date="2013-05-19T19:46:14Z"- content="""-@Chris, that is a known bug: [[bugs/Android_app_permission_denial_on_startup]]-"""]]
− doc/Android/oldcomments/comment_6_7b9523ddb20dc4a929e556c3ed0c7406._comment
@@ -1,18 +0,0 @@-[[!comment format=mdwn- username="http://joeyh.name/"- nickname="joey"- subject="comment 6"- date="2013-05-19T20:06:56Z"- content="""-@yarikoptic, there is a process you can perform that will help me determine what's going on.--You should be able to get the git-annex app to let you into a shell. You can do this by starting the app, and then going into its configuration menu, to Preferences, selecting \"Command Line\", and changing it to run \"/system/bin/sh\"--Then when you open a new window in the git-annex app, you'll be at a shell prompt. From there, you can run:--ls -ld /data/data/ga.androidterm--I'm interested to know a) whether the directory exists and b) what permissions and owner it has. On my tablet, I get back \"drwxr-x--x app_39 app_39\" .. and if I run `id` in the shell, it tells me it's running as `app_39`.--My guess is the directory probably does exist, but cannot be written to by the app. If you're able to verify that, the next step will be to investigate if there is some other directory that the app can write to. It needs to be able to write to someplace that is not on the `/sdcard` to install itself.-"""]]
− doc/Android/oldcomments/comment_7_a56628a622da752806c42c5b8b54ceef._comment
@@ -1,8 +0,0 @@-[[!comment format=mdwn- username="https://www.google.com/accounts/o8/id?id=AItOawkwjBDXkP9HAQKhjTgThGOxUa1B99y_WRA"- nickname="Franck"- subject="Link issue"- date="2013-05-22T12:01:38Z"- content="""-Hi, I have exactly the same problem with the link that fails on my phone. However, I checked the permissions and they are as you describe on your tablet (except for the app number). At the same time, everything is fine on my tablet... The phone runs an old Cyanogenmod 7.2.0 (Android 2.3.7) while the tablet is a more recent Asus TF700T (Android 4.1.1). Let me know if you want me to run tests.-"""]]
− doc/Android/oldcomments/comment_8_19656ec99b8f6aa64c1d01a3c9ae9bd0._comment
@@ -1,8 +0,0 @@-[[!comment format=mdwn- username="http://yarikoptic.myopenid.com/"- nickname="site-myopenid"- subject="why ln failed"- date="2013-05-23T13:27:39Z"- content="""-Finally got to check it out:  so indeed hardlinking fails but not because of permissions but \"link failed Cross-device link\"  that lib is -> /mnt/asec/ga.androidterm-1/lib  which resides on a different partition (vfat, /dev/block/dm-2, ro) from /data (ext4, /dev/block/mmcblk0p10)-"""]]
− doc/Android/oldcomments/comment_9_55e703ae105d0c0ee9ac50df8cc59dfb._comment
@@ -1,10 +0,0 @@-[[!comment format=mdwn- username="http://joeyh.name/"- nickname="joey"- subject="comment 9"- date="2013-05-23T18:44:46Z"- content="""-@yarikoptic you said before the error was \"Read-only file system\". Now you're saying it's \"Cross-device link\". I'm slightly confused.--I've reworked the android app to not need any hard links. Try the current autobuild: <http://downloads.kitenet.net/git-annex/autobuild/android/git-annex.apk>-"""]]
− doc/android/DCIM.png

binary file changed (95786 → absent bytes)

− doc/android/appinstalled.png

binary file changed (16805 → absent bytes)

− doc/android/apps.png

binary file changed (53971 → absent bytes)

− doc/android/install.png

binary file changed (55106 → absent bytes)

− doc/android/newwindow.png

binary file changed (1009 → absent bytes)

− doc/android/terminal.png

binary file changed (20565 → absent bytes)

− doc/android/webapp.png

binary file changed (64097 → absent bytes)

− doc/assistant.mdwn
@@ -1,42 +0,0 @@-The git-annex assistant creates a synchronised folder on each of your-OSX and Linux  computers, Android devices, removable drives, and-cloud services. The contents of the folder are the same everywhere.-It's very easy to use, and has all the power of git and git-annex.--## installation--The git-annex assistant comes as part of git-annex. -See [[install]] to get it installed.--See the [[release_notes]] for an overview of the status, and upgrade-instructions.--## intro screencast--[[!inline feeds=no template=bare pages=videos/git-annex_assistant_introduction]]--## documentation--* [[Basic usage|quickstart]]-* [[Android documentation|/Android]]-* Want to make two nearby computers share the same synchronised folder?  -  Follow the [[local_pairing_walkthrough]].-* Or perhaps you want to share files between computers in different-  locations, like home and work?  -  Follow the [[remote_sharing_walkthrough]].-* Want to share a synchronised folder with a friend?  -  Follow the [[share_with_a_friend_walkthrough]].-* Want to archive data to a drive or the cloud?  -  Follow the [[archival_walkthrough]].--## colophon--The git-annex assistant is being-[crowd funded on-Kickstarter](http://www.kickstarter.com/projects/joeyh/git-annex-assistant-like-dropbox-but-with-your-own/).-[[/assistant/Thanks]] to all my backers. This kickstarter is now closed, and there is a new home-made crowdfunding project to support the project for 2013-2014 [here](https://campaign.joeyh.name/).--I blog about my work on the git-annex assistant on a daily basis-in [[this_blog|design/assistant/blog]]. Follow along!--See also: The [[design|/design/assistant]] pages.
− doc/assistant/addsshserver.png

binary file changed (31740 → absent bytes)

− doc/assistant/archival_walkthrough.mdwn
@@ -1,32 +0,0 @@-Normally, the git-annex assistant makes your files be available-wherever you use it, and so a copy of each file is stored in each repository.-That's perfect for files you're using right now, but what about files you're-not using any more?--You could just delete those files, but it's better to archive them, so-you can access them later. All you need to get started archiving your old-files is a USB drive, or an [Amazon Glacier](http://aws.amazon.com/glacier/)-account.--The webapp makes it easy to make a repository on either a USB drive,-or on Amazon Glacier. Once the repository is created, be sure to-put it in either the small archive, or full archive repository group.--[[!img repogroups.png]]--Now when you're done with a file, just move it into a directory named-"archive". The assistant will notice you put it there, and next time it-has the opportunity (when you plug in the USB drive, or when it can-talk to Amazon Glacier over the network), will move the file's-content to your archive repository.--You'll no longer be able to open the file once it's been archived.-If you later want to access it, you can just copy or move it out-of the archive directory, and the assistant will retrieve its-content from the archive.--Note that retrieving data from Amazon Glacier takes 4 to 5 hours.--### screencast--[[!inline feeds=no template=bare pages=videos/git-annex_assistant_archiving]]
− doc/assistant/buddylist.png

binary file changed (4347 → absent bytes)

− doc/assistant/cloudnudge.png

binary file changed (7332 → absent bytes)

− doc/assistant/combinerepos.png

binary file changed (10677 → absent bytes)

− doc/assistant/comment_1_f2c4857b7b000e005f0c19279db14eaf._comment
@@ -1,8 +0,0 @@-[[!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/comment_2_befa1f48e5a43a7965060491430a6bc4._comment
@@ -1,9 +0,0 @@-[[!comment format=mdwn- username="https://www.google.com/accounts/o8/id?id=AItOawl9smfyJFgp3f2WjqqZWY6b7vo5eZv7GGQ"- nickname="Bryan"- subject="Ooh.  Do want on Windows"- date="2013-07-03T20:44:05Z"- content="""-Sadly, I didn't know about this when the Kickstarter was underway - I'd be happy to chip in $100 if it means I can get annex assistant on Windows earlier.--"""]]
− doc/assistant/controlmenu.png

binary file changed (8863 → absent bytes)

− doc/assistant/crashrecovery.png

binary file changed (6594 → absent bytes)

− doc/assistant/dashboard.png

binary file changed (41061 → absent bytes)

− doc/assistant/deleterepository.png

binary file changed (22780 → absent bytes)

− doc/assistant/example.png

binary file changed (110994 → absent bytes)

− doc/assistant/iaitem.png

binary file changed (34868 → absent bytes)

− doc/assistant/inotify_max_limit_alert.png

binary file changed (12583 → absent bytes)

− doc/assistant/local_pairing_walkthrough.mdwn
@@ -1,60 +0,0 @@-So you have two computers in the same building, and you want them to share-the same synchronised folder, communicating directly with each other.--This is incredibly easy to set up with the git annex assistant.--Let's say the two computers are your computer and your friend's computer.-We'll start on your computer, where you open up your git annex dashboard.--[[!img addrepository.png alt="Add another repository button"]]--`*click*`--[[!img pairing.png alt="Pair with another computer"]]--`*click*`--Now the hard bit. You have to think up a secret phrase, and type it in,-(and perhaps get the spelling correct).--[[!img secret.png alt="Enter secret phrase"]]--Now your computer is in pairing mode. When your friend looks at her git-annex dashboard, she sees something like this.--[[!img pairrequest.png alt="Pair request"]]--`*click*`--[[!img secretempty.png alt="Enter same secret phrase"]]--Now it's up to you to let her know what the secret is. As soon as she-enters it, both your computers will be paired, and will begin to sync their-git-annex folders. Just like that you can share files.--------Something to keep in mind, especially if pairing doesn't seem to be-working, is that the two computers need to be on the same network for this-pairing process to work. Sometimes a building will have more than one-network inside it, and you'll need to connect them both to the same one.-Make sure the wireless network name is the same, or that they're both-plugged into the same router.--Also, the file sharing set up by this pairing only works when both-computers are on the same network. If you go on a trip, any files you-edit will not be visible to your friend until you get back. --To get around this, you'll often also want to set up-[[jabber_pairing|share_with_a_friend_walkthrough]], and a server-in the cloud, which they can use to exchange files while away.--And also, you can pair with as many other computers as you like, not just-one!--## What does pairing actually do behind the scenes?--It ensures that both repositories have correctly configured -[[remotes|walkthrough/adding_a_remote]] pointing to each other.-If you have already configured this manually, you do not need to-perform pairing.
− doc/assistant/local_pairing_walkthrough/addrepository.png

binary file changed (2259 → absent bytes)

− doc/assistant/local_pairing_walkthrough/pairing.png

binary file changed (6771 → absent bytes)

− doc/assistant/local_pairing_walkthrough/pairrequest.png

binary file changed (5383 → absent bytes)

− doc/assistant/local_pairing_walkthrough/secret.png

binary file changed (5132 → absent bytes)

− doc/assistant/local_pairing_walkthrough/secretempty.png

binary file changed (9575 → absent bytes)

− doc/assistant/logs.png

binary file changed (33631 → absent bytes)

− doc/assistant/makerepo.png

binary file changed (32061 → absent bytes)

− doc/assistant/menu.png

binary file changed (22921 → absent bytes)

− doc/assistant/osx-app.png

binary file changed (2604 → absent bytes)

− doc/assistant/preferences.png

binary file changed (22815 → absent bytes)

− doc/assistant/quickstart.mdwn
@@ -1,30 +0,0 @@-## first run--To get started with the git-annex assistant, just pick it from-your system's list of applications.--[[!img assistant/menu.png]]-[[!img assistant/osx-app.png]]--It'll prompt you to set up a folder:--[[!img assistant/makerepo.png]]--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.--[[!img assistant/running.png]]--## starting on boot--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.--To start the webapp, run `git annex webapp` at the command line.--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.
− doc/assistant/release_notes.mdwn
@@ -1,334 +0,0 @@-## version 4.20130802--This release fixes several bugs, including a reversion introduced in the last-version that broke direct mode on Windows, Android, and other crippled-filesystems. It contains a workaround for a bug in recent git pre-releases-that broke handling of filenames containing spaces.-It is a highly recommended upgrade.--The webapp can now detect repositories that did not finish getting properly set-up, and can recover from one common bug that broke local pairing and remote-ssh server setups on systems using `ssh-agent`.--## version 4.20130723--This release fixes some bugs. Notably it fixes a bug that could result in data-loss when adding a tarball of a git-annex repository to your git-annex-repository.--Rsync.net have committed to support git-annex and offer a special-discounted rate for git-annex users.-<http://www.rsync.net/products/git-annex-pricing.html>--## version 4.20130709--This release is mostly bug fixes.--One of the bugs involved setting up rsync remotes on servers other than-rsync.net. The wrong `.ssh/authorized_keys` line was deployed to the-remote server. If you set up a rsync remote with a past release, and it does-not work, you will need to manually edit the `.ssh/authorized_keys` file,-and remove the `command=` forced command.--## version 4.20130621, 4.20130627--These releases mostly consist of bug fixes.--## version 4.20130601--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.--## version 4.20130516--This version contains numerous bug fixes, and improvements.--This is the first release with a fully usable Android app. No command-line-typing needed to set up syncing to your Android phone or tablet!-A few of the more advanced features may not work (or not work reliably)-on Android. The Android app is still beta quality.--This is also the first release with a Windows port! The Windows port-is in an alpha quality state, and is missing many features.-It does not yet include the assistant.--## version 4.20130501--This version contains numerous bug fixes, and improvements.--## version 4.20130417--This version contains numerous bug fixes, and improvements.--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. --If you experience this problem you can fix it by-moving `.ssh/key.git-annex*` to `.ssh/git-annex/` (creating-that directory first), and edit `.ssh/config` to reflect the new-location of the key. You will also need to restart gnome-keyring.--Another change relates to files in `archive/` directories. Client repositories-now sync these files between themselves like any other files, until-the files reach an archive repository. Only then are they removed from-the client repositories. So you need to ensure you have at least one-archive repository if you want to use the `archive/` directory feature.--## version 4.20130323, 4.20130405--These versions continue fixing bugs and adding features.--## version 4.20130314--This version makes a great many improvements and bugfixes, and is-a recommended upgrade.--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.--## version 4.20130227--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.--In this release, the assistant is fully working on Android, although-it must be set up using the command line.--Repositories can now be placed on filesystems that lack support for symbolic-links; FAT support is complete.--## version 3.20130216--This adds a port to Android. Only usable at the command line so far;-beta qualitty.--Also a bugfix release, and improves support for FAT.--The following are known limitations of this release of the git-annex-assistant:--* No Android app yet.-* 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 [[this_bug|bugs/Issue_on_OSX_with_some_system_limits]]-  for a workaround.-* Also on systems with kqueue, modifications to existing files in direct-  mode will not be noticed.--## version 3.20130107, 3.20130114, 3.20130124, 3.20130207--These are bugfix releases.--## version 3.20130102--This release makes several significant improvements to the git-annex-assistant, which is still in beta.--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 `git annex direct` inside the repository.--## version 3.20121211--This release of the git-annex assistant (which is still in beta)-consists of mostly bugfixes, user interface improvements, and improvements-to existing features.--In general, anything you can configure with the assistant's web app-will work. Some examples of use cases supported by this release include:--* 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.)-* Archiving or backing up files to Amazon Glacier. See [[archival_walkthrough]].-* [[Sharing repositories with friends|share_with_a_friend_walkthrough]]-  contacted through a Jabber server (such as Google Talk).-* [[Pairing|local_pairing_walkthrough]] 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.-* 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.--The following are known limitations of this release of the git-annex-assistant:--* The Max OSX standalone app may not work on all versions of Max OSX.-  Please test!-* 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 [[bugs/Issue_on_OSX_with_some_system_limits]]-  for a workaround.--## version 3.20121126--This adds several features to the git-annex assistant, which is still in beta.--In general, anything you can configure with the assistant's web app-will work. Some examples of use cases supported by this release include:--* 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.)-* Archiving or backing up files to Amazon Glacier.-* [[Sharing repositories with friends|share_with_a_friend_walkthrough]]-  contacted through a Jabber server (such as Google Talk).-* [[Pairing|local_pairing_walkthrough]] 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.-* 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.--The following are known limitations of this release of the git-annex-assistant:--* The Max OSX standalone app does not work on all versions of Max OSX.-* 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 [[bugs/Issue_on_OSX_with_some_system_limits]]-  for a workaround.-* 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.--## version 3.20121112--This is a major upgrade of the git-annex assistant, which is still in beta.--In general, anything you can configure with the assistant's web app-will work. Some examples of use cases supported by this release include:--* [[Sharing repositories with friends|share_with_a_friend_walkthrough]]-  contacted through a Jabber server (such as Google Talk).-* Setting up cloud repositories, that are used as backups, archives,-  or transfer points between repositories that cannot directly contact-  one-another.-* [[Pairing|local_pairing_walkthrough]] 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.-* 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.--The following upgrade notes apply if you're upgrading from a previous version:--* 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.-* 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-* 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 `~/.ssh/authorized_keys`.--The following are known limitations of this release of the git-annex-assistant:--* 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 [[bugs/Issue_on_OSX_with_some_system_limits]]-  for a workaround.--## version 3.20121009--This is a maintenance release of the git-annex assistant, which is still in-beta.--In general, anything you can configure with the assistant's web app-will work. Some examples of use cases supported by this release include:--* [[Pairing|local_pairing_walkthrough]] 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.-* 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.-* 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.--The following are known limitations of this release of the git-annex-assistant:--* 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 [[bugs/Issue_on_OSX_with_some_system_limits]]-  for a workaround.-* In order to ensure that all multiple repositories are kept in sync,-  each computer with a repository must be running the git-annex assistant.-* The assistant does not yet always manage to keep repositories in sync-  when some are hidden from others behind firewalls.--## version 3.20120924--This is the first beta release of the git-annex assistant.--In general, anything you can configure with the assistant's web app-will work. Some examples of use cases supported by this release include:--* [[Pairing|local_pairing_walkthrough]] 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.-* 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.-* 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.--The following are known limitations of this release of the git-annex-assistant:--* 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 [[bugs/Issue_on_OSX_with_some_system_limits]]-  for a workaround.-* In order to ensure that all multiple repositories are kept in sync,-  each computer with a repository must be running the git-annex assistant.-* The assistant does not yet always manage to keep repositories in sync-  when some are hidden from others behind firewalls.-* 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.-* If you `git annex unlock` a file, it will immediately be re-locked.-  See [[bugs/watcher_commits_unlocked_files]].
− doc/assistant/remote_sharing_walkthrough.mdwn
@@ -1,12 +0,0 @@-So you have two computers that are not in the same place, and you want them-to share the same synchronised folder, communicating directly with each other.--[[!inline feeds=no template=bare pages=videos/git-annex_assistant_remote_sharing]]--You can add even more computers using the same method shown here.--------If you have a laptop that is sometimes near another computer, you can-speed up file transfers when it is by also connecting it using the-[[local_pairing_walkthrough]].
− doc/assistant/repogroups.png

binary file changed (15636 → absent bytes)

− doc/assistant/repositories.png

binary file changed (63405 → absent bytes)

− doc/assistant/rsync.net.png

binary file changed (61465 → absent bytes)

− doc/assistant/running.png

binary file changed (24664 → absent bytes)

− doc/assistant/share_with_a_friend_walkthrough.mdwn
@@ -1,58 +0,0 @@-Want to share all the files in your repository with a friend?--Let's suppose you use Google Mail, and so does your friend, and you-sometimes also chat in Google Talk. The git-annex assistant will-use your Google account to share with your friend. (This actually-works with any Jabber account you use, not just Google Talk.)--Start by opening up your git annex dashboard.--[[!img local_pairing_walkthrough/addrepository.png alt="Add another repository button"]]--`*click*`--[[!img pairing.png alt="Share with a friend"]]--`*click*`--[[!img xmpp.png alt="Configuring Jabber account"]]--Fill that out, and git-annex will be able to show you a list of your-friends.--[[!img buddylist.png alt="Buddy list"]]--This list will refresh as friends log on and off, so you can-leave it open in a tab until a friend is available to start pairing.--(If your friend is not using git-annex yet, now's a great time to spread-the word!)--Once you click on "Start Pairing", your friend will see this pop up-on their git annex dashboard.--[[!img xmppalert.png alt="Pair request"]]--Once your friend clicks on that, your repositories will be paired.--### But, wait, there's one more step...--Despite the repositories being paired now, you and your friend can't yet-quite share files. You'll start to see your friend's files show up in your-git-annex folder, but you won't be able to open them yet.--What you need to do now is set up a repository out there in the cloud,-that both you and your friend can access. This will be used to transfer-files between the two of you.--At the end of the pairing process, a number of cloud providers are-suggested, and the git-annex assistant makes it easy to configure one of-them. Once you or your friend sets it up, it'll show up in the other-one's list of repositories:--[[!img repolist.png alt="Repository list"]]--The final step is to share the login information for the cloud repository-with your friend, so they can enable it too.--With that complete, you'll be able to open your friend's files!
− doc/assistant/share_with_a_friend_walkthrough/buddylist.png

binary file changed (5114 → absent bytes)

− doc/assistant/share_with_a_friend_walkthrough/pairing.png

binary file changed (6892 → absent bytes)

− doc/assistant/share_with_a_friend_walkthrough/repolist.png

binary file changed (8525 → absent bytes)

− doc/assistant/share_with_a_friend_walkthrough/xmppalert.png

binary file changed (4070 → absent bytes)

− doc/assistant/thanks.mdwn
@@ -1,243 +0,0 @@-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. --[[Joey]]--(If I got your name wrong, or you don't want it publically posted here,-email <joey@kitenet.net>.)--## Major Backers--These people are just inspiring in their enthusiasm and generosity to this-project.--* Jason Scott-* strager--## Beta Testers--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.--* Jimmy Tang-* David Pollak-* Pater-* Francois Marier-* Paul Sherwood-* Fred Epma-* Robert Ristroph-* Josh Triplett-* David Haslem-* AJ Ashton-* Svenne Krap-* Drew Hess-* Peter van Westen--## Prioritizers--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.--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--And special thanks to Kevin McKenzie, who also gave me a login to a Mac OSX-machine, which has proven invaluable, Jimmy Tang who has helped-with Mac OSX autobuilding and packaging, and Yury V. Zaytsev who-provides the Windows autobuilder.--## Other Backers--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.--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--## Also thanks to--* The Kickstarter team, who have unleashed much good on the world.-* 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.-* The Git developers, for obvious reasons.-* 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.-* Rsync.net, for providing me a free account so I can make sure git-annex-  works well with it.-* 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.-* 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.-* 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.
− doc/assistant/thumbnail.png

binary file changed (3491 → absent bytes)

− doc/assistant/xmpp.png

binary file changed (27753 → absent bytes)

− doc/assistant/xmppnudge.png

binary file changed (6156 → absent bytes)

− doc/assistant/xmpppairingend.png

binary file changed (34379 → absent bytes)

− doc/automatic_conflict_resolution.mdwn
@@ -1,23 +0,0 @@-Running `git annex sync` or using the [[assistant]] involves merging-changes from elsewhere into your repository's currently checked out branch.-This could lead to a merge conflict, perhaps because the same file-got changed in two different ways. A nice feature is that these-merge conflicts are automatically resolved, rather than leaving-git in the middle of a conflicted merge, which would prevent further-syncing from happening.--When a conflict occurs, there will be several messages printed about the merge-conflict, and the file that has the merge conflict will be renamed, with-".variant-XXX" tacked onto it. So if there are two versions of file foo,-you might end up with "foo.variant-AAA" and "foo.variant-BBB". It's then-up to you to decide what to do with these two files. Perhaps you can-manually combine them back into a single file. Or perhaps you choose to-rename them to better names and keep two versions, or delete one version-you don't want.--The "AAA" and "BBB" in the above example are essentially arbitrary-(technically they are the MD5 checksum of the key). The automatic merge-conflict resoltuion is designed so that if two or more repositories both get-a merge conflict, and resolve it, the resolved repositories will not-themselves conflict. This is why it doesn't use something nicer, like-perhaps the name of the remote that the file came from.
− doc/backends.mdwn
@@ -1,40 +0,0 @@-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).--Multiple pluggable key-value backends are supported, and a single repository-can use different ones for different files.--* `SHA256E` -- The default backend for new files, combines a SHA256 hash of-  the file's content with the file's extension. 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. -* `SHA256` -- Does not include the file extension in the key, which can-  lead to better deduplication but can confuse some programs.-* `WORM` ("Write Once, Read Many") This assumes that any file with-  the same basename, size, and modification time has the same content.-  This is the least expensive backend, recommended for really large-  files or slow systems.-* `SHA512`, `SHA512E` -- Best currently available hash, for the very paranoid.-* `SHA1`, `SHA1E` -- Smaller hash than `SHA256` for those who want a checksum-   but are not concerned about security.-* `SHA384`, `SHA384E`, `SHA224`, `SHA224E` -- Hashes for people who like-  unusual sizes.--The `annex.backends` 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.--For finer control of what backend is used when adding different types of-files, the `.gitattributes` file can be used. The `annex.backend`-attribute can be set to the name of the backend to use for matching files.--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 `.gitattributes`:--	* annex.backend=WORM-	*.mp3 annex.backend=SHA256E-	*.ogg annex.backend=SHA256E
− doc/backends/comment_1_375bb1fb5973e8fa67b763f2dd6e404b._comment
@@ -1,13 +0,0 @@-[[!comment format=mdwn- username="http://nanotech.nanotechcorp.net/"- nickname="NanoTech"- subject="SHA performance"- date="2012-08-10T04:37:32Z"- content="""-It turns out that (at least on x86-64 machines) `SHA512` [is faster than][1] `SHA256`. In some benchmarks I performed<sup>1</sup> `SHA256` was 1.8–2.2x slower than `SHA1` while `SHA512` was only 1.5–1.6x slower.--`SHA224` and `SHA384` are effectively just truncated versions of `SHA256` and `SHA512` so their performance characteristics are identical.--[1]: https://community.emc.com/community/edn/rsashare/blog/2010/11/01/sha-2-algorithms-when-sha-512-is-more-secure-and-faster-<sup>1</sup> `time head -c 100000000 /dev/zero | shasum -a 512`-"""]]
− doc/backends/comment_2_1f2626eca9004b31a0b7fc1a0df8027b._comment
@@ -1,24 +0,0 @@-[[!comment format=mdwn- username="https://www.google.com/accounts/o8/id?id=AItOawm7eqCMh_B7mxE0tnchbr0JoYu11FUAFRY"- nickname="Stéphane"- subject="Tracking remote copies not even stored locally / URL backend turned into a &quot;special remote&quot;."- date="2013-01-03T10:59:35Z"- content="""-In case you came here looking for the URL backend.--## The URL backend--Several documents on the web refer to a special \"URL backend\", e.g. [Large file management with git-annex [LWN.net]](http://lwn.net/Articles/419241/).  Historical content will never be updated yet it drives people to living places.--## Why a URL backend ?--It is interesting because you can:--* let `git-annex` 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).-* 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 ;-).--## How/Where now ?--`git-annex` 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 [[special remotes]].--"""]]
− doc/backends/comment_3_fdcbf8727fdefb9942a54689234b9698._comment
@@ -1,12 +0,0 @@-[[!comment format=mdwn- username="https://www.google.com/accounts/o8/id?id=AItOawmicVKRM8vJX4wPuAwlLEoS2cjmFXQkjkE"- nickname="Thomas"- subject="Please be more specific about what information goes into the key"- date="2013-07-31T11:55:09Z"- content="""-It's a bit confusing to read that SHA256 does not include the file extension from which I can deduct that SHA256E does include it. What else does it include? I used to \"seed\" my git-annex with localy available data by \"git-annex add\"-ing it in a temporary folder without doing a commit and than to initiate a copy from the slow remote annex repo. My theory was that remote copy sees the pre-seeded files and does not need to copy them again.--But does this theory hold true for different file names, extensions, modification date, full path? Maybe you could also link to the code that implements the different backends so that curious readers can check for themselves.--Thank you!-"""]]
− doc/bare_repositories.mdwn
@@ -1,48 +0,0 @@-Due to popular demand, git-annex can now be used with bare repositories.--So, for example, you can stash a file away in the origin:-`git annex move mybigfile --to origin`--Of course, for that to work, the bare repository has to be on a system with-[[git-annex-shell]] installed. If "origin" is on GitWeb, you still can't-use git-annex to store stuff there.--It took a while, but bare repositories are now supported exactly as well-as non-bare repositories. Except for these caveats:--* `git annex fsck` works in a bare repository, but does not display-  warnings about insufficient-  [[copies]]. To get those warnings, just run it in one of the non-bare-  checkouts.-* `git annex unused` in a bare repository only knows about keys used in-  branches that have been pushed to the bare repository. So use it with care..-* Commands that need a work tree, like `git annex add` won't work in a bare-  repository, of course.-* However, you can (with recent versions of git-annex) run `git annex copy`,-  `git annex get`, and `git annex move` in a bare repository. These behave-  as if the `--all` option were used, and just operate on every single-  version of every single file that is present in the git repository-  history.--***--Here is a quick example of how to set this up, using `origin` as the remote name, and assuming `~/annex` contains an annex:--On the server:--    git init --bare bare-annex.git-    git annex init origin--Now configure the remote and do the initial push:--    cd ~/annex-    git remote add origin example.com:bare-annex.git-    git push origin master git-annex--Now `git annex status` should show the configured bare remote. If it does not, you may have to pull from the remote first (older versions of `git-annex`)--If you wish to configure git such that you can push/pull without arguments, set the upstream branch:--    git branch master --set-upstream origin/master--   
− doc/bare_repositories/comment_1_148e1da70d37d311634a0309a4ff8dcd._comment
@@ -1,22 +0,0 @@-[[!comment format=mdwn- username="https://www.google.com/accounts/o8/id?id=AItOawmraN_ldJplGunVGmnjjLN6jL9s9TrVMGE"- nickname="Ævar Arnfjörð"- subject="How to convert bare repositories to non-bare"- date="2012-11-11T20:14:44Z"- content="""-I made a repository bare and later wanted to convert it, this would have worked with just plain git:--    cd bare-repo.git-    mkdir .git-    mv .??* * .git/-    git config --unset core.bare-    git reset --hard--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):--    mv .git/annex/objects from-bare-repo-    git annex add from-bare-repo-    git rm -f from-bare-repo---"""]]
− doc/bugs.mdwn
@@ -1,18 +0,0 @@-This is git-annex's bug list.--[[!sidebar content="""-[[!inline feeds=no template=bare pages=sidebar]]--Categories:--* [[Bugs_affecting_the_assistant|design/assistant/todo]]-* [[Bugs_needing_more_info|moreinfo]]-* [[Closed_bugs|bugs/done]]-"""-]]--[[!inline pages="./bugs/* and !./bugs/*/* and !./bugs/done and !link(done) -and !./bugs/moreinfo and !link(moreinfo)-and !*/Discussion" actions=yes postform=yes show=0 archive=yes]]--[[!edittemplate template=templates/bugtemplate match="bugs/*" silent=yes]]
− doc/bugs/3.20121112:_build_error_in_assistant.mdwn
@@ -1,432 +0,0 @@-Git-annex stopped compiling with GHC 7.4.2 after updating Yesod and friends to the respective latest version. The complete build log is attached below. I hope this helps. Further build logs are available at <http://hydra.nixos.org/job/nixpkgs/trunk/gitAndTools.gitAnnex>, too.--    building-    make flags:  PREFIX=/nix/store/9az61h33v1j6fkdmwdfy7gi0rhspsb9k-git-annex-3.20121112-    building Build/SysConfig.hs-    ghc -O2 -Wall -outputdir tmp -IUtility  -DWITH_ASSISTANT -DWITH_S3 -DWITH_WEBAPP -DWITH_PAIRING -DWITH_XMPP -DWITH_DNS -DWITH_INOTIFY -DWITH_DBUS -threaded --make configure[b-    [1 of 7] Compiling Utility.Exception ( Utility/Exception.hs, tmp/Utility/Exception.o )-    [2 of 7] Compiling Utility.Misc     ( Utility/Misc.hs, tmp/Utility/Misc.o )-    [3 of 7] Compiling Utility.Process  ( Utility/Process.hs, tmp/Utility/Process.o )-    [4 of 7] Compiling Utility.SafeCommand ( Utility/SafeCommand.hs, tmp/Utility/SafeCommand.o )-    [5 of 7] Compiling Build.TestConfig ( Build/TestConfig.hs, tmp/Build/TestConfig.o )-    [6 of 7] Compiling Build.Configure  ( Build/Configure.hs, tmp/Build/Configure.o )-    [7 of 7] Compiling Main             ( configure.hs, tmp/Main.o )-    Linking configure ...-    ./configure-      checking version... 3.20121112-      checking git... yes-      checking git version... 1.8.0-      checking cp -a... yes-      checking cp -p... yes-      checking cp --reflink=auto... yes-      checking uuid generator... uuidgen-      checking xargs -0... yes-      checking rsync... yes-      checking curl... yes-      checking wget... no-      checking bup... no-      checking gpg... no-      checking lsof... no-      checking ssh connection caching... yes-      checking sha1... sha1sum-      checking sha256... sha256sum-      checking sha512... sha512sum-      checking sha224... sha224sum-      checking sha384... sha384sum-    building Utility/Touch.hs-    hsc2hs Utility/Touch.hsc[b-    building Utility/Mounts.hs-    hsc2hs Utility/Mounts.hsc[b-    building Utility/libdiskfree.o-    cc -Wall   -c -o Utility/libdiskfree.o Utility/libdiskfree.c[b-    building Utility/libmounts.o-    cc -Wall   -c -o Utility/libmounts.o Utility/libmounts.c[b-    building git-annex-    install -d tmp[b-    ghc -O2 -Wall -outputdir tmp -IUtility  -DWITH_ASSISTANT -DWITH_S3 -DWITH_WEBAPP -DWITH_PAIRING -DWITH_XMPP -DWITH_DNS -DWITH_INOTIFY -DWITH_DBUS -threaded --make git-annex -o tmp/git-annex Utility/libdiskfree.o Utility/libmounts.o[b-    [  1 of 279] Compiling Utility.Dot      ( Utility/Dot.hs, tmp/Utility/Dot.o )-    [  2 of 279] Compiling Utility.ThreadLock ( Utility/ThreadLock.hs, tmp/Utility/ThreadLock.o )-    [  3 of 279] Compiling Utility.Mounts   ( Utility/Mounts.hs, tmp/Utility/Mounts.o )-    [  4 of 279] Compiling Utility.Yesod    ( Utility/Yesod.hs, tmp/Utility/Yesod.o )-    [  5 of 279] Compiling Utility.Tense    ( Utility/Tense.hs, tmp/Utility/Tense.o )-    [  6 of 279] Compiling Utility.Verifiable ( Utility/Verifiable.hs, tmp/Utility/Verifiable.o )-    [  7 of 279] Compiling Assistant.Types.TransferSlots ( Assistant/Types/TransferSlots.hs, tmp/Assistant/Types/TransferSlots.o )-    [  8 of 279] Compiling Types.StandardGroups ( Types/StandardGroups.hs, tmp/Types/StandardGroups.o )-    [  9 of 279] Compiling Utility.Percentage ( Utility/Percentage.hs, tmp/Utility/Percentage.o )-    [ 10 of 279] Compiling Utility.Base64   ( Utility/Base64.hs, tmp/Utility/Base64.o )-    [ 11 of 279] Compiling Utility.DataUnits ( Utility/DataUnits.hs, tmp/Utility/DataUnits.o )-    [ 12 of 279] Compiling Utility.JSONStream ( Utility/JSONStream.hs, tmp/Utility/JSONStream.o )-    [ 13 of 279] Compiling Messages.JSON    ( Messages/JSON.hs, tmp/Messages/JSON.o )-    [ 14 of 279] Compiling Build.SysConfig  ( Build/SysConfig.hs, tmp/Build/SysConfig.o )-    [ 15 of 279] Compiling Types.KeySource  ( Types/KeySource.hs, tmp/Types/KeySource.o )-    [ 16 of 279] Compiling Utility.State    ( Utility/State.hs, tmp/Utility/State.o )-    [ 17 of 279] Compiling Types.UUID       ( Types/UUID.hs, tmp/Types/UUID.o )-    [ 18 of 279] Compiling Types.Messages   ( Types/Messages.hs, tmp/Types/Messages.o )-    [ 19 of 279] Compiling Types.Group      ( Types/Group.hs, tmp/Types/Group.o )-    [ 20 of 279] Compiling Types.TrustLevel ( Types/TrustLevel.hs, tmp/Types/TrustLevel.o )-    [ 21 of 279] Compiling Types.BranchState ( Types/BranchState.hs, tmp/Types/BranchState.o )-    [ 22 of 279] Compiling Utility.PartialPrelude ( Utility/PartialPrelude.hs, tmp/Utility/PartialPrelude.o )-    [ 23 of 279] Compiling Utility.HumanTime ( Utility/HumanTime.hs, tmp/Utility/HumanTime.o )-    [ 24 of 279] Compiling Utility.Format   ( Utility/Format.hs, tmp/Utility/Format.o )-    [ 25 of 279] Compiling Utility.FileSystemEncoding ( Utility/FileSystemEncoding.hs, tmp/Utility/FileSystemEncoding.o )-    [ 26 of 279] Compiling Utility.Touch    ( Utility/Touch.hs, tmp/Utility/Touch.o )-    [ 27 of 279] Compiling Utility.Applicative ( Utility/Applicative.hs, tmp/Utility/Applicative.o )-    [ 28 of 279] Compiling Utility.Monad    ( Utility/Monad.hs, tmp/Utility/Monad.o )-    [ 29 of 279] Compiling Utility.Exception ( Utility/Exception.hs, tmp/Utility/Exception.o )-    [ 30 of 279] Compiling Utility.DBus     ( Utility/DBus.hs, tmp/Utility/DBus.o )-    [ 31 of 279] Compiling Utility.Misc     ( Utility/Misc.hs, tmp/Utility/Misc.o )-    [ 32 of 279] Compiling Utility.Process  ( Utility/Process.hs, tmp/Utility/Process.o )-    [ 33 of 279] Compiling Utility.SafeCommand ( Utility/SafeCommand.hs, tmp/Utility/SafeCommand.o )-    [ 34 of 279] Compiling Utility.Network  ( Utility/Network.hs, tmp/Utility/Network.o )-    [ 35 of 279] Compiling Utility.SRV      ( Utility/SRV.hs, tmp/Utility/SRV.o )--    Utility/SRV.hs:88:1: Warning: Defined but not used: `lookupSRVHost'--    Utility/SRV.hs:94:1: Warning: Defined but not used: `parseSrvHost'-    [ 36 of 279] Compiling Git.Types        ( Git/Types.hs, tmp/Git/Types.o )-    [ 37 of 279] Compiling Utility.UserInfo ( Utility/UserInfo.hs, tmp/Utility/UserInfo.o )-    [ 38 of 279] Compiling Utility.Path     ( Utility/Path.hs, tmp/Utility/Path.o )-    [ 39 of 279] Compiling Utility.TempFile ( Utility/TempFile.hs, tmp/Utility/TempFile.o )-    [ 40 of 279] Compiling Utility.Directory ( Utility/Directory.hs, tmp/Utility/Directory.o )-    [ 41 of 279] Compiling Utility.FreeDesktop ( Utility/FreeDesktop.hs, tmp/Utility/FreeDesktop.o )-    [ 42 of 279] Compiling Assistant.Install.AutoStart ( Assistant/Install/AutoStart.hs, tmp/Assistant/Install/AutoStart.o )-    [ 43 of 279] Compiling Common           ( Common.hs, tmp/Common.o )-    [ 44 of 279] Compiling Utility.FileMode ( Utility/FileMode.hs, tmp/Utility/FileMode.o )-    [ 45 of 279] Compiling Git              ( Git.hs, tmp/Git.o )-    [ 46 of 279] Compiling Git.FilePath     ( Git/FilePath.hs, tmp/Git/FilePath.o )-    [ 47 of 279] Compiling Utility.Matcher  ( Utility/Matcher.hs, tmp/Utility/Matcher.o )-    [ 48 of 279] Compiling Utility.Gpg      ( Utility/Gpg.hs, tmp/Utility/Gpg.o )-    [ 49 of 279] Compiling Types.Crypto     ( Types/Crypto.hs, tmp/Types/Crypto.o )-    [ 50 of 279] Compiling Types.Key        ( Types/Key.hs, tmp/Types/Key.o )-    [ 51 of 279] Compiling Types.Backend    ( Types/Backend.hs, tmp/Types/Backend.o )-    [ 52 of 279] Compiling Types.Remote     ( Types/Remote.hs, tmp/Types/Remote.o )-    [ 53 of 279] Compiling Git.Sha          ( Git/Sha.hs, tmp/Git/Sha.o )-    [ 54 of 279] Compiling Utility.CoProcess ( Utility/CoProcess.hs, tmp/Utility/CoProcess.o )-    [ 55 of 279] Compiling Git.Command      ( Git/Command.hs, tmp/Git/Command.o )-    [ 56 of 279] Compiling Git.Ref          ( Git/Ref.hs, tmp/Git/Ref.o )-    [ 57 of 279] Compiling Git.Branch       ( Git/Branch.hs, tmp/Git/Branch.o )-    [ 58 of 279] Compiling Git.UpdateIndex  ( Git/UpdateIndex.hs, tmp/Git/UpdateIndex.o )-    [ 59 of 279] Compiling Git.Queue        ( Git/Queue.hs, tmp/Git/Queue.o )-    [ 60 of 279] Compiling Git.HashObject   ( Git/HashObject.hs, tmp/Git/HashObject.o )-    [ 61 of 279] Compiling Git.CatFile      ( Git/CatFile.hs, tmp/Git/CatFile.o )-    [ 62 of 279] Compiling Git.UnionMerge   ( Git/UnionMerge.hs, tmp/Git/UnionMerge.o )-    [ 63 of 279] Compiling Git.Url          ( Git/Url.hs, tmp/Git/Url.o )-    [ 64 of 279] Compiling Git.Construct    ( Git/Construct.hs, tmp/Git/Construct.o )-    [ 65 of 279] Compiling Git.Config       ( Git/Config.hs, tmp/Git/Config.o )-    [ 66 of 279] Compiling Git.SharedRepository ( Git/SharedRepository.hs, tmp/Git/SharedRepository.o )-    [ 67 of 279] Compiling Git.Version      ( Git/Version.hs, tmp/Git/Version.o )-    [ 68 of 279] Compiling Git.CheckAttr    ( Git/CheckAttr.hs, tmp/Git/CheckAttr.o )-    [ 69 of 279] Compiling Annex            ( Annex.hs, tmp/Annex.o )-    [ 70 of 279] Compiling Types.Option     ( Types/Option.hs, tmp/Types/Option.o )-    [ 71 of 279] Compiling Types            ( Types.hs, tmp/Types.o )-    [ 72 of 279] Compiling Messages         ( Messages.hs, tmp/Messages.o )-    [ 73 of 279] Compiling Types.Command    ( Types/Command.hs, tmp/Types/Command.o )-    [ 74 of 279] Compiling Locations        ( Locations.hs, tmp/Locations.o )-    [ 75 of 279] Compiling Common.Annex     ( Common/Annex.hs, tmp/Common/Annex.o )-    [ 76 of 279] Compiling Fields           ( Fields.hs, tmp/Fields.o )-    [ 77 of 279] Compiling Annex.BranchState ( Annex/BranchState.hs, tmp/Annex/BranchState.o )-    [ 78 of 279] Compiling Annex.CatFile    ( Annex/CatFile.hs, tmp/Annex/CatFile.o )-    [ 79 of 279] Compiling Annex.Perms      ( Annex/Perms.hs, tmp/Annex/Perms.o )-    [ 80 of 279] Compiling Crypto           ( Crypto.hs, tmp/Crypto.o )-    [ 81 of 279] Compiling Annex.Exception  ( Annex/Exception.hs, tmp/Annex/Exception.o )-    [ 82 of 279] Compiling Annex.Journal    ( Annex/Journal.hs, tmp/Annex/Journal.o )-    [ 83 of 279] Compiling Annex.Branch     ( Annex/Branch.hs, tmp/Annex/Branch.o )-    [ 84 of 279] Compiling Usage            ( Usage.hs, tmp/Usage.o )-    [ 85 of 279] Compiling Annex.CheckAttr  ( Annex/CheckAttr.hs, tmp/Annex/CheckAttr.o )-    [ 86 of 279] Compiling Remote.Helper.Special ( Remote/Helper/Special.hs, tmp/Remote/Helper/Special.o )-    [ 87 of 279] Compiling Logs.Presence    ( Logs/Presence.hs, tmp/Logs/Presence.o )-    [ 88 of 279] Compiling Logs.Location    ( Logs/Location.hs, tmp/Logs/Location.o )-    [ 89 of 279] Compiling Logs.Web         ( Logs/Web.hs, tmp/Logs/Web.o )-    [ 90 of 279] Compiling Annex.LockPool   ( Annex/LockPool.hs, tmp/Annex/LockPool.o )-    [ 91 of 279] Compiling Logs.Transfer    ( Logs/Transfer.hs, tmp/Logs/Transfer.o )-    [ 92 of 279] Compiling Backend.SHA      ( Backend/SHA.hs, tmp/Backend/SHA.o )-    [ 93 of 279] Compiling Backend.WORM     ( Backend/WORM.hs, tmp/Backend/WORM.o )-    [ 94 of 279] Compiling Backend.URL      ( Backend/URL.hs, tmp/Backend/URL.o )-    [ 95 of 279] Compiling Assistant.Types.ScanRemotes ( Assistant/Types/ScanRemotes.hs, tmp/Assistant/Types/ScanRemotes.o )-    [ 96 of 279] Compiling Assistant.Types.ThreadedMonad ( Assistant/Types/ThreadedMonad.hs, tmp/Assistant/Types/ThreadedMonad.o )-    [ 97 of 279] Compiling Assistant.Types.TransferQueue ( Assistant/Types/TransferQueue.hs, tmp/Assistant/Types/TransferQueue.o )-    [ 98 of 279] Compiling Assistant.Types.Pushes ( Assistant/Types/Pushes.hs, tmp/Assistant/Types/Pushes.o )-    [ 99 of 279] Compiling Assistant.Types.BranchChange ( Assistant/Types/BranchChange.hs, tmp/Assistant/Types/BranchChange.o )-    [100 of 279] Compiling Logs.UUIDBased   ( Logs/UUIDBased.hs, tmp/Logs/UUIDBased.o )-    [101 of 279] Compiling Logs.Remote      ( Logs/Remote.hs, tmp/Logs/Remote.o )-    [102 of 279] Compiling Logs.Group       ( Logs/Group.hs, tmp/Logs/Group.o )-    [103 of 279] Compiling Utility.DiskFree ( Utility/DiskFree.hs, tmp/Utility/DiskFree.o )-    [104 of 279] Compiling Utility.Url      ( Utility/Url.hs, tmp/Utility/Url.o )-    [105 of 279] Compiling Utility.CopyFile ( Utility/CopyFile.hs, tmp/Utility/CopyFile.o )-    [106 of 279] Compiling Utility.Rsync    ( Utility/Rsync.hs, tmp/Utility/Rsync.o )-    [107 of 279] Compiling Git.LsFiles      ( Git/LsFiles.hs, tmp/Git/LsFiles.o )-    [108 of 279] Compiling Git.AutoCorrect  ( Git/AutoCorrect.hs, tmp/Git/AutoCorrect.o )-    [109 of 279] Compiling Git.CurrentRepo  ( Git/CurrentRepo.hs, tmp/Git/CurrentRepo.o )-    [110 of 279] Compiling Locations.UserConfig ( Locations/UserConfig.hs, tmp/Locations/UserConfig.o )-    [111 of 279] Compiling Utility.ThreadScheduler ( Utility/ThreadScheduler.hs, tmp/Utility/ThreadScheduler.o )-    [112 of 279] Compiling Git.Merge        ( Git/Merge.hs, tmp/Git/Merge.o )-    [113 of 279] Compiling Utility.Parallel ( Utility/Parallel.hs, tmp/Utility/Parallel.o )-    [114 of 279] Compiling Git.Remote       ( Git/Remote.hs, tmp/Git/Remote.o )-    [115 of 279] Compiling Assistant.Ssh    ( Assistant/Ssh.hs, tmp/Assistant/Ssh.o )-    [116 of 279] Compiling Assistant.Pairing ( Assistant/Pairing.hs, tmp/Assistant/Pairing.o )-    [117 of 279] Compiling Assistant.Types.NetMessager ( Assistant/Types/NetMessager.hs, tmp/Assistant/Types/NetMessager.o )-    [118 of 279] Compiling Utility.NotificationBroadcaster ( Utility/NotificationBroadcaster.hs, tmp/Utility/NotificationBroadcaster.o )-    [119 of 279] Compiling Assistant.Types.Buddies ( Assistant/Types/Buddies.hs, tmp/Assistant/Types/Buddies.o )-    [120 of 279] Compiling Utility.TSet     ( Utility/TSet.hs, tmp/Utility/TSet.o )-    [121 of 279] Compiling Assistant.Types.Commits ( Assistant/Types/Commits.hs, tmp/Assistant/Types/Commits.o )-    [122 of 279] Compiling Assistant.Types.Changes ( Assistant/Types/Changes.hs, tmp/Assistant/Types/Changes.o )-    [123 of 279] Compiling Utility.WebApp   ( Utility/WebApp.hs, tmp/Utility/WebApp.o )-    [124 of 279] Compiling Utility.Daemon   ( Utility/Daemon.hs, tmp/Utility/Daemon.o )-    [125 of 279] Compiling Utility.LogFile  ( Utility/LogFile.hs, tmp/Utility/LogFile.o )-    [126 of 279] Compiling Git.Filename     ( Git/Filename.hs, tmp/Git/Filename.o )-    [127 of 279] Compiling Git.LsTree       ( Git/LsTree.hs, tmp/Git/LsTree.o )-    [128 of 279] Compiling Utility.Types.DirWatcher ( Utility/Types/DirWatcher.hs, tmp/Utility/Types/DirWatcher.o )-    [129 of 279] Compiling Utility.INotify  ( Utility/INotify.hs, tmp/Utility/INotify.o )-    [130 of 279] Compiling Utility.DirWatcher ( Utility/DirWatcher.hs, tmp/Utility/DirWatcher.o )-    [131 of 279] Compiling Utility.Lsof     ( Utility/Lsof.hs, tmp/Utility/Lsof.o )-    [132 of 279] Compiling Config           ( Config.hs, tmp/Config.o )-    [133 of 279] Compiling Annex.UUID       ( Annex/UUID.hs, tmp/Annex/UUID.o )-    [134 of 279] Compiling Logs.UUID        ( Logs/UUID.hs, tmp/Logs/UUID.o )-    [135 of 279] Compiling Backend          ( Backend.hs, tmp/Backend.o )-    [136 of 279] Compiling Remote.Helper.Hooks ( Remote/Helper/Hooks.hs, tmp/Remote/Helper/Hooks.o )-    [137 of 279] Compiling Remote.Helper.Encryptable ( Remote/Helper/Encryptable.hs, tmp/Remote/Helper/Encryptable.o )-    [138 of 279] Compiling Annex.Queue      ( Annex/Queue.hs, tmp/Annex/Queue.o )-    [139 of 279] Compiling Annex.Content    ( Annex/Content.hs, tmp/Annex/Content.o )-    [140 of 279] Compiling Remote.S3        ( Remote/S3.hs, tmp/Remote/S3.o )-    [141 of 279] Compiling Remote.Directory ( Remote/Directory.hs, tmp/Remote/Directory.o )-    [142 of 279] Compiling Remote.Rsync     ( Remote/Rsync.hs, tmp/Remote/Rsync.o )-    [143 of 279] Compiling Remote.Web       ( Remote/Web.hs, tmp/Remote/Web.o )-    [144 of 279] Compiling Remote.Hook      ( Remote/Hook.hs, tmp/Remote/Hook.o )-    [145 of 279] Compiling Upgrade.V2       ( Upgrade/V2.hs, tmp/Upgrade/V2.o )-    [146 of 279] Compiling Annex.Ssh        ( Annex/Ssh.hs, tmp/Annex/Ssh.o )-    [147 of 279] Compiling Remote.Helper.Ssh ( Remote/Helper/Ssh.hs, tmp/Remote/Helper/Ssh.o )-    [148 of 279] Compiling Remote.Bup       ( Remote/Bup.hs, tmp/Remote/Bup.o )-    [149 of 279] Compiling Annex.Version    ( Annex/Version.hs, tmp/Annex/Version.o )-    [150 of 279] Compiling Init             ( Init.hs, tmp/Init.o )-    [151 of 279] Compiling Checks           ( Checks.hs, tmp/Checks.o )-    [152 of 279] Compiling Remote.Git       ( Remote/Git.hs, tmp/Remote/Git.o )-    [153 of 279] Compiling Remote.List      ( Remote/List.hs, tmp/Remote/List.o )-    [154 of 279] Compiling Logs.Trust       ( Logs/Trust.hs, tmp/Logs/Trust.o )-    [155 of 279] Compiling Remote           ( Remote.hs, tmp/Remote.o )-    [156 of 279] Compiling Assistant.Alert  ( Assistant/Alert.hs, tmp/Assistant/Alert.o )-    Loading package ghc-prim ... linking ... done.-    Loading package integer-gmp ... linking ... done.-    Loading package base ... linking ... done.-    Loading object (static) Utility/libdiskfree.o ... done-    Loading object (static) Utility/libmounts.o ... done-    final link ... done-    Loading package pretty-1.1.1.0 ... linking ... done.-    Loading package filepath-1.3.0.0 ... linking ... done.-    Loading package old-locale-1.0.0.4 ... linking ... done.-    Loading package old-time-1.1.0.0 ... linking ... done.-    Loading package bytestring-0.9.2.1 ... linking ... done.-    Loading package unix-2.5.1.0 ... linking ... done.-    Loading package directory-1.1.0.2 ... linking ... done.-    Loading package process-1.1.0.1 ... linking ... done.-    Loading package array-0.4.0.0 ... linking ... done.-    Loading package deepseq-1.3.0.0 ... linking ... done.-    Loading package time-1.4 ... linking ... done.-    Loading package containers-0.4.2.1 ... linking ... done.-    Loading package text-0.11.2.0 ... linking ... done.-    Loading package blaze-builder-0.3.1.0 ... linking ... done.-    Loading package blaze-markup-0.5.1.1 ... linking ... done.-    Loading package blaze-html-0.5.1.0 ... linking ... done.-    Loading package hashable-1.1.2.5 ... linking ... done.-    Loading package case-insensitive-0.4.0.3 ... linking ... done.-    Loading package primitive-0.5.0.1 ... linking ... done.-    Loading package vector-0.10.0.1 ... linking ... done.-    Loading package random-1.0.1.1 ... linking ... done.-    Loading package dlist-0.5 ... linking ... done.-    Loading package data-default-0.5.0 ... linking ... done.-    Loading package transformers-0.3.0.0 ... linking ... done.-    Loading package mtl-2.1.1 ... linking ... done.-    Loading package parsec-3.1.2 ... linking ... done.-    Loading package network-2.3.0.13 ... linking ... done.-    Loading package failure-0.2.0.1 ... linking ... done.-    Loading package template-haskell ... linking ... done.-    Loading package shakespeare-1.0.2 ... linking ... done.-    Loading package hamlet-1.1.1.1 ... linking ... done.-    Loading package http-types-0.7.3.0.1 ... linking ... done.-    Loading package base-unicode-symbols-0.2.2.4 ... linking ... done.-    Loading package transformers-base-0.4.1 ... linking ... done.-    Loading package monad-control-0.3.1.4 ... linking ... done.-    Loading package lifted-base-0.2 ... linking ... done.-    Loading package resourcet-0.4.3 ... linking ... done.-    Loading package semigroups-0.8.4.1 ... linking ... done.-    Loading package void-0.5.8 ... linking ... done.-    Loading package conduit-0.5.4.1 ... linking ... done.-    Loading package unordered-containers-0.2.2.1 ... linking ... done.-    Loading package vault-0.2.0.1 ... linking ... done.-    Loading package wai-1.3.0.1 ... linking ... done.-    Loading package date-cache-0.3.0 ... linking ... done.-    Loading package unix-time-0.1.2 ... linking ... done.-    Loading package fast-logger-0.3.1 ... linking ... done.-    Loading package attoparsec-0.10.2.0 ... linking ... done.-    Loading package cookie-0.4.0.1 ... linking ... done.-    Loading package shakespeare-css-1.0.2 ... linking ... done.-    Loading package syb-0.3.6.1 ... linking ... done.-    Loading package aeson-0.6.0.2 ... linking ... done.-    Loading package shakespeare-js-1.1.0 ... linking ... done.-    Loading package ansi-terminal-0.5.5 ... linking ... done.-    Loading package blaze-builder-conduit-0.5.0.2 ... linking ... done.-    Loading package stringsearch-0.3.6.4 ... linking ... done.-    Loading package byteorder-1.0.3 ... linking ... done.-    Loading package wai-logger-0.3.0 ... linking ... done.-    Loading package zlib-0.5.3.3 ... linking ... done.-    Loading package zlib-bindings-0.1.1.1 ... linking ... done.-    Loading package zlib-conduit-0.5.0.2 ... linking ... done.-    Loading package wai-extra-1.3.0.4 ... linking ... done.-    Loading package monad-logger-0.2.1 ... linking ... done.-    Loading package cereal-0.3.5.2 ... linking ... done.-    Loading package base64-bytestring-1.0.0.0 ... linking ... done.-    Loading package cipher-aes-0.1.2 ... linking ... done.-    Loading package entropy-0.2.1 ... linking ... done.-    Loading package largeword-1.0.3 ... linking ... done.-    Loading package tagged-0.4.4 ... linking ... done.-    Loading package crypto-api-0.10.2 ... linking ... done.-    Loading package cpu-0.1.1 ... linking ... done.-    Loading package crypto-pubkey-types-0.1.1 ... linking ... done.-    Loading package cryptocipher-0.3.5 ... linking ... done.-    Loading package cprng-aes-0.2.4 ... linking ... done.-    Loading package skein-0.1.0.9 ... linking ... done.-    Loading package clientsession-0.8.0.1 ... linking ... done.-    Loading package path-pieces-0.1.2 ... linking ... done.-    Loading package shakespeare-i18n-1.0.0.2 ... linking ... done.-    Loading package yesod-routes-1.1.1.1 ... linking ... done.-    Loading package yesod-core-1.1.5 ... linking ... done.-    [157 of 279] Compiling Assistant.Types.DaemonStatus ( Assistant/Types/DaemonStatus.hs, tmp/Assistant/Types/DaemonStatus.o )-    [158 of 279] Compiling Assistant.Monad  ( Assistant/Monad.hs, tmp/Assistant/Monad.o )-    [159 of 279] Compiling Assistant.Types.NamedThread ( Assistant/Types/NamedThread.hs, tmp/Assistant/Types/NamedThread.o )-    [160 of 279] Compiling Assistant.Common ( Assistant/Common.hs, tmp/Assistant/Common.o )-    [161 of 279] Compiling Assistant.XMPP   ( Assistant/XMPP.hs, tmp/Assistant/XMPP.o )-    [162 of 279] Compiling Assistant.XMPP.Buddies ( Assistant/XMPP/Buddies.hs, tmp/Assistant/XMPP/Buddies.o )-    [163 of 279] Compiling Assistant.NetMessager ( Assistant/NetMessager.hs, tmp/Assistant/NetMessager.o )--    Assistant/NetMessager.hs:12:1:-        Warning: The import of `Types.Remote' is redundant-                   except perhaps to import instances from `Types.Remote'-                 To import instances alone, use: import Types.Remote()--    Assistant/NetMessager.hs:13:1:-        Warning: The import of `Git' is redundant-                   except perhaps to import instances from `Git'-                 To import instances alone, use: import Git()--    Assistant/NetMessager.hs:20:1:-        Warning: The import of `Data.Text' is redundant-                   except perhaps to import instances from `Data.Text'-                 To import instances alone, use: import Data.Text()-    [164 of 279] Compiling Assistant.Pushes ( Assistant/Pushes.hs, tmp/Assistant/Pushes.o )-    [165 of 279] Compiling Assistant.ScanRemotes ( Assistant/ScanRemotes.hs, tmp/Assistant/ScanRemotes.o )-    [166 of 279] Compiling Assistant.Install ( Assistant/Install.hs, tmp/Assistant/Install.o )-    [167 of 279] Compiling Assistant.XMPP.Client ( Assistant/XMPP/Client.hs, tmp/Assistant/XMPP/Client.o )-    [168 of 279] Compiling Assistant.Commits ( Assistant/Commits.hs, tmp/Assistant/Commits.o )-    [169 of 279] Compiling Assistant.BranchChange ( Assistant/BranchChange.hs, tmp/Assistant/BranchChange.o )-    [170 of 279] Compiling Assistant.Changes ( Assistant/Changes.hs, tmp/Assistant/Changes.o )-    [171 of 279] Compiling Assistant.WebApp.Types ( Assistant/WebApp/Types.hs, tmp/Assistant/WebApp/Types.o )-    Loading package unix-compat-0.4.0.0 ... linking ... done.-    Loading package file-embed-0.0.4.6 ... linking ... done.-    Loading package system-filepath-0.4.7 ... linking ... done.-    Loading package system-fileio-0.3.10 ... linking ... done.-    Loading package cryptohash-0.7.8 ... linking ... done.-    Loading package crypto-conduit-0.4.0.1 ... linking ... done.-    Loading package http-date-0.0.2 ... linking ... done.-    Loading package mime-types-0.1.0.0 ... linking ... done.-    Loading package wai-app-static-1.3.0.4 ... linking ... done.-    Loading package yesod-static-1.1.1.1 ... linking ... done.-    [172 of 279] Compiling Assistant.WebApp ( Assistant/WebApp.hs, tmp/Assistant/WebApp.o )-    Loading package network-conduit-0.6.1.1 ... linking ... done.-    Loading package safe-0.3.3 ... linking ... done.-    Loading package simple-sendfile-0.2.8 ... linking ... done.-    Loading package warp-1.3.4.4 ... linking ... done.-    Loading package yaml-0.8.1 ... linking ... done.-    Loading package yesod-default-1.1.2 ... linking ... done.-    [173 of 279] Compiling Assistant.WebApp.OtherRepos ( Assistant/WebApp/OtherRepos.hs, tmp/Assistant/WebApp/OtherRepos.o )-    [174 of 279] Compiling Limit            ( Limit.hs, tmp/Limit.o )-    [175 of 279] Compiling Option           ( Option.hs, tmp/Option.o )-    [176 of 279] Compiling Seek             ( Seek.hs, tmp/Seek.o )-    [177 of 279] Compiling Command          ( Command.hs, tmp/Command.o )-    [178 of 279] Compiling CmdLine          ( CmdLine.hs, tmp/CmdLine.o )-    [179 of 279] Compiling Command.ConfigList ( Command/ConfigList.hs, tmp/Command/ConfigList.o )-    [180 of 279] Compiling Command.InAnnex  ( Command/InAnnex.hs, tmp/Command/InAnnex.o )-    [181 of 279] Compiling Command.DropKey  ( Command/DropKey.hs, tmp/Command/DropKey.o )-    [182 of 279] Compiling Command.SendKey  ( Command/SendKey.hs, tmp/Command/SendKey.o )-    [183 of 279] Compiling Command.RecvKey  ( Command/RecvKey.hs, tmp/Command/RecvKey.o )-    [184 of 279] Compiling Command.TransferInfo ( Command/TransferInfo.hs, tmp/Command/TransferInfo.o )-    [185 of 279] Compiling Command.Commit   ( Command/Commit.hs, tmp/Command/Commit.o )-    [186 of 279] Compiling Command.Add      ( Command/Add.hs, tmp/Command/Add.o )-    [187 of 279] Compiling Command.Unannex  ( Command/Unannex.hs, tmp/Command/Unannex.o )-    [188 of 279] Compiling Command.FromKey  ( Command/FromKey.hs, tmp/Command/FromKey.o )-    [189 of 279] Compiling Command.ReKey    ( Command/ReKey.hs, tmp/Command/ReKey.o )-    [190 of 279] Compiling Command.Fix      ( Command/Fix.hs, tmp/Command/Fix.o )-    [191 of 279] Compiling Command.Describe ( Command/Describe.hs, tmp/Command/Describe.o )-    [192 of 279] Compiling Command.InitRemote ( Command/InitRemote.hs, tmp/Command/InitRemote.o )-    [193 of 279] Compiling Command.Unlock   ( Command/Unlock.hs, tmp/Command/Unlock.o )-    [194 of 279] Compiling Command.Lock     ( Command/Lock.hs, tmp/Command/Lock.o )-    [195 of 279] Compiling Command.PreCommit ( Command/PreCommit.hs, tmp/Command/PreCommit.o )-    [196 of 279] Compiling Command.Log      ( Command/Log.hs, tmp/Command/Log.o )-    [197 of 279] Compiling Command.Merge    ( Command/Merge.hs, tmp/Command/Merge.o )-    [198 of 279] Compiling Command.Group    ( Command/Group.hs, tmp/Command/Group.o )-    [199 of 279] Compiling Command.Ungroup  ( Command/Ungroup.hs, tmp/Command/Ungroup.o )-    [200 of 279] Compiling Command.Import   ( Command/Import.hs, tmp/Command/Import.o )-    [201 of 279] Compiling Logs.Unused      ( Logs/Unused.hs, tmp/Logs/Unused.o )-    [202 of 279] Compiling Command.AddUnused ( Command/AddUnused.hs, tmp/Command/AddUnused.o )-    [203 of 279] Compiling Command.Find     ( Command/Find.hs, tmp/Command/Find.o )-    [204 of 279] Compiling Logs.PreferredContent ( Logs/PreferredContent.hs, tmp/Logs/PreferredContent.o )-    [205 of 279] Compiling Annex.Wanted     ( Annex/Wanted.hs, tmp/Annex/Wanted.o )-    [206 of 279] Compiling Command.Whereis  ( Command/Whereis.hs, tmp/Command/Whereis.o )-    [207 of 279] Compiling Command.Trust    ( Command/Trust.hs, tmp/Command/Trust.o )-    [208 of 279] Compiling Command.Untrust  ( Command/Untrust.hs, tmp/Command/Untrust.o )-    [209 of 279] Compiling Command.Semitrust ( Command/Semitrust.hs, tmp/Command/Semitrust.o )-    [210 of 279] Compiling Command.Dead     ( Command/Dead.hs, tmp/Command/Dead.o )-    [211 of 279] Compiling Command.Vicfg    ( Command/Vicfg.hs, tmp/Command/Vicfg.o )-    [212 of 279] Compiling Command.Map      ( Command/Map.hs, tmp/Command/Map.o )-    [213 of 279] Compiling Command.Init     ( Command/Init.hs, tmp/Command/Init.o )-    [214 of 279] Compiling Command.Uninit   ( Command/Uninit.hs, tmp/Command/Uninit.o )-    [215 of 279] Compiling Command.Version  ( Command/Version.hs, tmp/Command/Version.o )-    [216 of 279] Compiling Upgrade.V1       ( Upgrade/V1.hs, tmp/Upgrade/V1.o )-    [217 of 279] Compiling Upgrade.V0       ( Upgrade/V0.hs, tmp/Upgrade/V0.o )-    [218 of 279] Compiling Upgrade          ( Upgrade.hs, tmp/Upgrade.o )-    [219 of 279] Compiling Command.Upgrade  ( Command/Upgrade.hs, tmp/Command/Upgrade.o )-    [220 of 279] Compiling Command.Drop     ( Command/Drop.hs, tmp/Command/Drop.o )-    [221 of 279] Compiling Command.Move     ( Command/Move.hs, tmp/Command/Move.o )-    [222 of 279] Compiling Command.Copy     ( Command/Copy.hs, tmp/Command/Copy.o )-    [223 of 279] Compiling Command.Get      ( Command/Get.hs, tmp/Command/Get.o )-    [224 of 279] Compiling Command.TransferKey ( Command/TransferKey.hs, tmp/Command/TransferKey.o )-    [225 of 279] Compiling Command.DropUnused ( Command/DropUnused.hs, tmp/Command/DropUnused.o )-    [226 of 279] Compiling Command.Fsck     ( Command/Fsck.hs, tmp/Command/Fsck.o )-    [227 of 279] Compiling Command.Reinject ( Command/Reinject.hs, tmp/Command/Reinject.o )-    [228 of 279] Compiling Command.Migrate  ( Command/Migrate.hs, tmp/Command/Migrate.o )-    [229 of 279] Compiling Command.Unused   ( Command/Unused.hs, tmp/Command/Unused.o )-    [230 of 279] Compiling Command.Status   ( Command/Status.hs, tmp/Command/Status.o )-    [231 of 279] Compiling Command.Sync     ( Command/Sync.hs, tmp/Command/Sync.o )-    [232 of 279] Compiling Command.Help     ( Command/Help.hs, tmp/Command/Help.o )-    [233 of 279] Compiling Command.AddUrl   ( Command/AddUrl.hs, tmp/Command/AddUrl.o )-    [234 of 279] Compiling Assistant.DaemonStatus ( Assistant/DaemonStatus.hs, tmp/Assistant/DaemonStatus.o )-    [235 of 279] Compiling Assistant.Sync   ( Assistant/Sync.hs, tmp/Assistant/Sync.o )-    [236 of 279] Compiling Assistant.MakeRemote ( Assistant/MakeRemote.hs, tmp/Assistant/MakeRemote.o )-    [237 of 279] Compiling Assistant.XMPP.Git ( Assistant/XMPP/Git.hs, tmp/Assistant/XMPP/Git.o )-    [238 of 279] Compiling Command.XMPPGit  ( Command/XMPPGit.hs, tmp/Command/XMPPGit.o )-    [239 of 279] Compiling Assistant.Threads.NetWatcher ( Assistant/Threads/NetWatcher.hs, tmp/Assistant/Threads/NetWatcher.o )-    [240 of 279] Compiling Assistant.NamedThread ( Assistant/NamedThread.hs, tmp/Assistant/NamedThread.o )-    [241 of 279] Compiling Assistant.WebApp.Notifications ( Assistant/WebApp/Notifications.hs, tmp/Assistant/WebApp/Notifications.o )--    Assistant/WebApp/Notifications.hs:39:11:-        No instances for (Text.Julius.ToJavascript String,-                          Text.Julius.ToJavascript Text)-          arising from a use of `Text.Julius.toJavascript'-        Possible fix:-          add instance declarations for-          (Text.Julius.ToJavascript String, Text.Julius.ToJavascript Text)-        In the first argument of `Text.Julius.Javascript', namely-          `Text.Julius.toJavascript delay'-        In the expression:-          Text.Julius.Javascript (Text.Julius.toJavascript delay)-        In the first argument of `Data.Monoid.mconcat', namely-          `[Text.Julius.Javascript-              ((Data.Text.Lazy.Builder.fromText . Text.Shakespeare.pack')-                 "function longpoll_"),-            Text.Julius.Javascript (Text.Julius.toJavascript ident),-            Text.Julius.Javascript-              ((Data.Text.Lazy.Builder.fromText . Text.Shakespeare.pack')-                 "() {\-                 \\tlongpoll(longpoll_"),-            Text.Julius.Javascript (Text.Julius.toJavascript ident), ....]'-    make: *** [git-annex] Error 1--> Reproduced this and confirmed it's fixed in git. --[[Joey]] [[done]]
− doc/bugs/3.20121112_build_fails_on_Ubuntu_12.04.mdwn
@@ -1,97 +0,0 @@-What steps will reproduce the problem?--* Start with Ubuntu 12.04-* sudo apt-get install haskell-platform libgsasl7-dev gsasl g2hs-* cabal install git-annex --bindir=$HOME/bin--What is the expected output? What do you see instead?--Expected omething like "installation successful"--Actual output, after build notices:---Loading package IfElse-0.85 ... linking ... done.-Loading object (static) dist/build/git-annex/git-annex-tmp/Utility/libdiskfree.o ... done-Loading object (static) dist/build/git-annex/git-annex-tmp/Utility/libmounts.o ... done-final link ... done-[157 of 279] Compiling Assistant.Types.DaemonStatus ( Assistant/Types/DaemonStatus.hs, dist/build/git-annex/git-annex-tmp/Assistant/Types/DaemonStatus.o )-[158 of 279] Compiling Assistant.Monad  ( Assistant/Monad.hs, dist/build/git-annex/git-annex-tmp/Assistant/Monad.o )--Assistant/Monad.hs:86:16:-    Couldn't match expected type `Assistant a'-                with actual type `Reader AssistantData a'-    Expected type: (AssistantData -> a) -> Assistant a-      Actual type: (AssistantData -> a) -> Reader AssistantData a-    In the expression: reader-    In an equation for `getAssistant': getAssistant = reader--Assistant/Monad.hs:93:15:-    Couldn't match expected type `Assistant t0'-                with actual type `Reader r0 a0'-    In the return type of a call of `reader'-    In a stmt of a 'do' block: st <- reader threadState-    In the expression:-      do { st <- reader threadState;-           liftIO $ runThreadState st a }--Assistant/Monad.hs:99:14:-    Couldn't match expected type `Assistant t0'-                with actual type `Reader r0 a0'-    In the return type of a call of `reader'-    In a stmt of a 'do' block: d <- reader id-    In the expression:-      do { d <- reader id;-           liftIO $ io $ runAssistant d a }--Assistant/Monad.hs:105:14:-    Couldn't match expected type `Assistant t0'-                with actual type `Reader r0 a0'-    In the return type of a call of `reader'-    In a stmt of a 'do' block: d <- reader id-    In the expression:-      do { d <- reader id;-           return $ runAssistant d a }--Assistant/Monad.hs:110:14:-    Couldn't match expected type `Assistant t0'-                with actual type `Reader r0 a0'-    In the return type of a call of `reader'-    In a stmt of a 'do' block: d <- reader id-    In the expression:-      do { d <- reader id;-           return $ \ v -> runAssistant d $ a v }--Assistant/Monad.hs:115:14:-    Couldn't match expected type `Assistant t0'-                with actual type `Reader r0 a0'-    In the return type of a call of `reader'-    In a stmt of a 'do' block: d <- reader id-    In the expression:-      do { d <- reader id;-           return $ \ v1 v2 -> runAssistant d (a v1 v2) }--Assistant/Monad.hs:120:12:-    Couldn't match expected type `Assistant a0'-                with actual type `Reader r0 a1'-    In the return type of a call of `reader'-    In the first argument of `(>>=)', namely `reader v'-    In the expression: reader v >>= liftIO . io-cabal: Error: some packages failed to install:-git-annex-3.20121112 failed during the building phase. The exception was:-ExitFailure 1---What version of git-annex are you using? On what operating system?--git annex 3.20121112-Ubuntu 12.04 (current "long term support", all packages up to date)--Please provide any additional information below.--No idea how important this is for git-annex in general but reporting in case it is. Thank you for working on git annex!--> I was able to reproduce this build error when I force installed-> an old version of the haskell mtl library. So git-annex needs version-> 2.1.1 to build, and I have adjusted the build dependencies appropriately.-> [[done]] --[[Joey]] 
− doc/bugs/3.20121113_build_error___39__not_in_scope_getAddBoxComR__39__.mdwn
@@ -1,33 +0,0 @@-What steps will reproduce the problem?--Building from latest source, Cabal update, cabal install --only dependencies, cabal configure, Cabal build--What is the expected output? What do you see instead?--Error message from build--...--Loading package DAV-0.2 ... linking ... done.--Loading object (static) dist/build/git-annex/git-annex-tmp/Utility/libdiskfree.o ... done--Loading object (static) dist/build/git-annex/git-annex-tmp/Utility/libmounts.o ... done--final link ... done---Assistant/Threads/WebApp.hs:47:1: Not in scope: `getAddBoxComR'--Assistant/Threads/WebApp.hs:47:1: Not in scope: `getEnableWebDAVR'---What version of git-annex are you using? On what operating system?--Latest version via git from git-annex.branchable.com--Debian Squeeze (6.0.6)--Please provide any additional information below.--> I noticed this earlier and fixed it. [[done]] --[[Joey]]
− doc/bugs/4.20130601_xmpp_sync_error.mdwn
@@ -1,125 +0,0 @@-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/400_mode_leakage.mdwn
@@ -1,25 +0,0 @@-git-annex tends to preserve files that are added to an annex with-a mode such as 400. (Happens to me sometimes with email attachments.) -As these files are rsynced around, and end up on eg, a-publically visible repo with a webserver frontend, or a repo that is-acessible to a whole group of users, they will not be readable. --I think it would make sense for git-annex to normalize file permissions-when adding them. Of course, there's some tension here with generally-storing file metadata when possible. Perhaps the normalization should only-ensure that group and other have read access?--(Security: We can assume that a repo that is not intended to be public is-in a 700 directory. And since git-annex cannot preserve file modes when-files transit through a special remote, using modes to limit access to-individual files is not wise.)----[[Joey]]--> Revisiting this, git-annex already honors core.sharedrepository settings,-> so I just needed to set it to `world` to allow everyone to read.-> -> There was a code path in direct mode where that didn't work; fixed that.-> -> [[done]]-> --[[Joey]] 
− doc/bugs/Add_another_repository_on_USB_drive_causes_sync_loop.mdwn
@@ -1,22 +0,0 @@-What steps will reproduce the problem?--Mount USB drive formatted as FAT-Make directory for repository in it.-Set up another repository and choose to sync it with the existing one.--What is the expected output? What do you see instead?-The files should transfer from the main repository to the directory on the USB drive.-This happens, but afterwards a new sync happens from the USB drive repository back to the other existing repositories, because the file date of all the files on the USB drive has been set to today.-Further, git seemed to keep the USB key locked so umount was impossible until after killing it.--What version of git-annex are you using? On what operating system?-4.20130405-Linux--Please provide any additional information below.---> Reproduced the core bug, which is that the assistant saw symlink standin-> files as new files, and annexed them. Now it doesn't, and I have-> it running on FAT with no trouble; can even rename symlink standin files-> and it commits symlink changes. Calling this [[done]]. --[[Joey]]
− doc/bugs/Adding_box.com_remote_on_Android_fails_for_me.mdwn
@@ -1,20 +0,0 @@-### Please describe the problem.--After submitting the form in the webapp for adding a box.com remote, I get:--   Internal Server Error - WEBDAV failed to write file: "Unauthorized": user error--### What steps will reproduce the problem?--Fill in the box.com add remote form. Username=username, password=password, "share..."=checked, directory=annex, Encryption="Encrypt all data" and hit the "Add repository" button.--### What version of git-annex are you using? On what operating system?--  git-annex version 4.20130513-g5185533 on Android 4.2.2--### Please provide any additional information below.--Didn't find a .git/annex/debug.log--> This error seems entirely consistent with you entering the wrong password.-> [[done]] --[[Joey]]
− doc/bugs/Adding_git_ssh_remote_fails.mdwn
@@ -1,32 +0,0 @@-### Please describe the problem.--While trying to add a ssh remote, the webapp promts the error:--    Reinitialized existing shared Git repository in /home/chris/annex-test/-    git-annex: please specify a description of this repository--resp.--    Initialized empty shared Git repository in /home/chris/annex-test-2/-    git-annex: please specify a description of this repository--### What steps will reproduce the problem?--Adding a ssh git remote.--### What version of git-annex are you using? On what operating system?--4.20130704-gaf18656 linux-amd64 and 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--only successful ssh key generation in daemon.log--# End of transcript or log.-"""]]--> [[done]]; bad installation. --[[Joey]]
− doc/bugs/Adding_second_remote_repository_over_ssh_fails.mdwn
@@ -1,41 +0,0 @@-What steps will reproduce the problem?--Create a local and "remote server" repository--Create another local repositorty and keep it seperate from the first one. Fails while creating second repository on the remote.--What is the expected output? What do you see instead?--Expected to get two seperate repositories on the client and server. Only first one works.--Got an error:--    Failed to make repository--    Something went wrong setting up the repository on the remote server.--    Transcript: fatal: unrecognized command 'sh -c 'mkdir -p '"'"'second'"'"'&&cd '"'"'second'"'"'&&git init --bare --shared&&git annex init&&mkdir -p ~/.ssh&&if [ ! -e ~/.ssh/git-annex-shell ]; then (echo '"'"'#!/bin/sh'"'"';echo '"'"'set -e'"'"';echo '"'"'if [ "x$SSH_ORIGINAL_COMMAND" != "x" ]; then'"'"';echo '"'"'exec git-annex-shell -c "$SSH_ORIGINAL_COMMAND"'"'"';echo '"'"'else'"'"';echo '"'"'exec git-annex-shell -c "$@"'"'"';echo '"'"'fi'"'"') > ~/.ssh/git-annex-shell; fi&&chmod 700 ~/.ssh/git-annex-shell&&touch ~/.ssh/authorized_keys&&chmod 600 ~/.ssh/authorized_keys&&echo '"'"'command="GIT_ANNEX_SHELL_DIRECTORY='"'"'"'"'"'"'"'"'second'"'"'"'"'"'"'"'"' ~/.ssh/git-annex-shell",no-agent-forwarding,no-port-forwarding,no-X11-forwarding ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCvoTn+XBdlw/mQlu+NScAeuddUJqJaVXH6KUsO09OddnUvzv4W185ezbAjXfWDgN7ou0Q0xQzwiCzdoSl7T3USJQ1ywTG5Xt2sBV3RIqxyReNA7Nz0yhwWhZBJcFzof34ezNIsi9NVgEJcK2JEs2XqhO5wK5nxEDeays7ti2bqY6V21iOWSy9hlzjD4VTWTEFxQkDp4BCzDpPN934ztOtInwI8ayiTRJZlNQ+ej/AaA+/zOBWNvIFc/96iuMLKY6lLFThw1jNj5r5N7yPaysLdnwTJ3irtCzDygCpD4mau4frrOPvG90ZdcdrQSfIjRtM9nPZ5jIpohfvz0dIfgNFz marvin@marvin-U-100 '"'"' >>~/.ssh/authorized_keys'' git-annex-shell: git-shell failed---What version of git-annex are you using? On what operating system?--4.20130413-g5747bf4 ubuntu 12.10 local--3.20120629 debian wheezy remote (also tried 4.20130413-g5747bf4)--Please provide any additional information below.--> This bug would appear to be the same as a bug I fixed today.-> -> Except this last bit:--**Also noticed if a user has no full name set in unix account, creating-remote repository always fails**--> So, I'm going to repurpose this bug to track that problem. --[[Joey]]--[[!meta title="assistant can fail to make git repository if remote server is lacking GECOS"]]-->> [[done]]; git-annex always checks for missing gecos and enables->> a workaround. This does mean the server needs to be upgraded in order->> for the fix to work. --[[Joey]]
− doc/bugs/Addurl_downloads_but_does_not_checkout_files.mdwn
@@ -1,74 +0,0 @@-What steps will reproduce the problem?--Example below illustrates downloading a podcast with git annex addurl:--list directory before...--~/Podcasts/TuxRadar Linux Podcast (Ogg)$ ls-folder.jpg           tuxradar_s04e24.ogg-tuxradar_s04e09.ogg  tuxradar_s05e01.ogg-tuxradar_s04e11.ogg  tuxradar_s05e02.ogg-tuxradar_s04e13.ogg  tuxradar_s05e03.ogg-tuxradar_s04e15.ogg  tuxradar_s05e04.ogg-tuxradar_s04e16.ogg  www.tuxradar.com_files_podcast_tuxradar_s04e10.ogg-tuxradar_s04e19.ogg  www.tuxradar.com_files_podcast_tuxradar_s04e12.ogg-tuxradar_s04e20.ogg  www.tuxradar.com_files_podcast_tuxradar_s04e14.ogg-tuxradar_s04e21.ogg  www.tuxradar.com_files_podcast_tuxradar_s04e17.ogg-tuxradar_s04e22.ogg  www.tuxradar.com_files_podcast_tuxradar_s04e18.ogg-tuxradar_s04e23.ogg--download file...--~/Podcasts/TuxRadar Linux Podcast (Ogg)$ git annex addurl http://www.tuxradar.com/files/podcast/tuxradar_s05e05.ogg-addurl www.tuxradar.com_files_podcast_tuxradar_s05e05.ogg (downloading http://www.tuxradar.com/files/podcast/tuxradar_s05e05.ogg ...) --2013-04-10 21:18:12--  http://www.tuxradar.com/files/podcast/tuxradar_s05e05.ogg-Resolving www.tuxradar.com (www.tuxradar.com)... 80.244.178.150-Connecting to www.tuxradar.com (www.tuxradar.com)|80.244.178.150|:80... connected.-HTTP request sent, awaiting response... 200 OK-Length: 33249291 (32M) [application/ogg]-Saving to: `/home/rob/Podcasts/.git/annex/tmp/URL--http&c%%www.tuxradar.com%files%podcast%tuxradar_s05e05.ogg'--100%[===============================>] 33,249,291   404K/s   in 81s     --2013-04-10 21:19:35 (399 KB/s) - `/home/rob/Podcasts/.git/annex/tmp/URL--http&c%%www.tuxradar.com%files%podcast%tuxradar_s05e05.ogg' saved [33249291/33249291]--(checksum...) ok-(Recording state in git...)--file appears to have been downloaded, but isn't there...--~/Podcasts/TuxRadar Linux Podcast (Ogg)$ ls-folder.jpg           tuxradar_s04e24.ogg-tuxradar_s04e09.ogg  tuxradar_s05e01.ogg-tuxradar_s04e11.ogg  tuxradar_s05e02.ogg-tuxradar_s04e13.ogg  tuxradar_s05e03.ogg-tuxradar_s04e15.ogg  tuxradar_s05e04.ogg-tuxradar_s04e16.ogg  www.tuxradar.com_files_podcast_tuxradar_s04e10.ogg-tuxradar_s04e19.ogg  www.tuxradar.com_files_podcast_tuxradar_s04e12.ogg-tuxradar_s04e20.ogg  www.tuxradar.com_files_podcast_tuxradar_s04e14.ogg-tuxradar_s04e21.ogg  www.tuxradar.com_files_podcast_tuxradar_s04e17.ogg-tuxradar_s04e22.ogg  www.tuxradar.com_files_podcast_tuxradar_s04e18.ogg-tuxradar_s04e23.ogg--What is the expected output? What do you see instead?--File should exist in current directory. As you can see from above output, this has worked in the past (with older versions).--What version of git-annex are you using? On what operating system?--git-annex version: 4.20130405-local repository version: 3-default repository version: 3-supported repository versions: 3 4-upgrade supported from repository versions: 0 1 2-build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP--OS: Debian Testing/Unstable--Please provide any additional information below.--The repository in question was created by the assistant and I tried the above with the assistant both running and not running, with no difference. I have also tried downloading other files.--EDIT: formatting--> Bug only affected direct mode. I think it used to work but I broke-> it when fixing another bug in direct mode. [[fixed|done]] --[[Joey]] 
− doc/bugs/Allow_syncing_to_a_specific_directory_on_a_USB_remote.mdwn
@@ -1,30 +0,0 @@-This follows up to the [comment made by-Laszlo](http://git-annex.branchable.com/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/#comment-f26d3b6b45bb66601ecfaa883ace161c)-on the [recent-poll](http://git-annex.branchable.com/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/).--I too need to be able to select the directory on the remote drive that the-annex will be synced to.--If I just add a remote drive via the web app, it syncs the repository to-`/mnt/usb/annex`, and it looks like it just creates a bare repository in-that folder. I need the repository to be synced to something like-`/mnt/usb/subfolder/myspecifiedfoldername` and I need that remote to be a-full repository.--My use case is that I use the USB drive to keep annexes in sync between two-computers. I have multiple annexes that need to be synced between the two-computers, and none of them are in a directory called `annex`. I also need-to be able to plug the drive into other computers and access the files-directly, without doing a `git clone` or anything like that. I have all of-this setup and working fine with just plain old git annex, but the web app-does not seem to support creating new repositories with this workflow.--I think it makes a lot of sense to allow the web application to add a new-remote that is simply a directory. People like me could specify the path of-the directory to be on the mounted USB drive. Others may want to add a-remote that is a mounted network share or something like that.--> [[done]], the webapp now has a "Add another repository" option,-> and you can just enter the path to whatever place you like inside a USB-> drive.  --[[Joey]]
− doc/bugs/Android_app_permission_denial_on_startup.mdwn
@@ -1,18 +0,0 @@-### Please describe the problem.--Android app barfs on startup.--### What steps will reproduce the problem?--Download/install/start Android app :)--### What version of git-annex are you using? On what operating system?--Just downloaded the .apk (Friday May 3rd).  Android 4.2.2 on Google/LG Nexus 4 --### Please provide any additional information below.--See this [screenshot](https://docs.google.com/file/d/0B8tqeaAn45VORU1ET1ZpTWxLTjQ/edit?usp=sharing).-Feel free to ping me on IRC if you need additional info or want to test a fix.--> [[done]]; now comprehensively fixed. --[[Joey]]
− doc/bugs/Android_daily_build_missing_webapp.mdwn
@@ -1,23 +0,0 @@-### Please describe the problem.--The daily Android build is missing the webapp, raising a bug in case this is unexpected.--### What steps will reproduce the problem?--Down the daily APK, it is 9MB.--### What version of git-annex are you using? On what operating system?---### 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.-"""]]--> Probably several of them were. I've fixed the cabal file, re-running-> android build now. [[done]] --[[Joey]] 
− doc/bugs/Annex_thinks_file_exists_afer_being_dropped.mdwn
@@ -1,27 +0,0 @@-#### What steps will reproduce the problem?--I've posted some code here:-   https://gist.github.com/4552036---#### What is the expected output? What do you see instead?--I think I've found three bugs.  If they aren't bugs then there is a usage issue that could do with some documentation improvements.--Problem 1 - With 3 local annexes git-annex doesn't seem to search properly for them  (See code)--Problem 2 - Even after a sync an annex thinks another (local) annex has a file, even after it has been dropped  (See code)--SCARY bug - `whereis` seems to think that a locally dropped file still exists  (See code) ---#### What version of git-annex are you using? On what operating system?--git-annex version: 3.20130114--OS: OSX 10.6.8---#### Please provide any additional information below.--> [[done]]; see comments --[[Joey]] 
− doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default.mdwn
@@ -1,16 +0,0 @@-### Please describe the problem.--I'm trying to use the assistant to replicate the basic dropbox functionality of having a synced folder between two machines. Instead of actually syncing file contents by default the assistant just creates broken symlinks.--### What steps will reproduce the problem?--I've setup two repositories with each other as ssh remotes and ran the assistant on each after setting them in direct mode. I can create files on each of the repositories and have them show up on the other but all that shows up is a broken link. Actual contents don't get transferred. If I do a "git annex get" I can get the contents just fine. I tried setting annex.numcopies to 2 and that didn't work either.--What I'm missing here is some setting to tell the assistant "sync the contents of every new file". What it's doing instead is unacceptable. If I have the file in both repositories and change it in one, the other repository gets it's previous version of the file replaced by a broken symlink. From my point of view for the assistant to be a dropbox replacement it should never, under any circumstances, create a broken symlink in the sync folder. I had understood that that's what direct mode was, but it's not behaving that way right now at least.--### What version of git-annex are you using? On what operating system?--My basic setup for testing is two Ubuntu 12.04 LTS machines running git-annex 4.20130501--> [[done]], broken ~/.config/git-annex/program file, which is now detected-> and worked around. --[[Joey]]
− doc/bugs/Assistant_dropping_from_backup_repo.mdwn
@@ -1,28 +0,0 @@-Setup:--* fresh install of Debian Wheezy with git-annex 4.20130227 pulled in from unstable--Steps:--* clone existing repository and activate assistant-* Have USB drive, U, with repository group `backup` and preferred content string `standard`--Expected:--* Assistant never ever tries to drop anything from U--Actual:--* Assistant immediately tries to drop files from U; fortunately I didn't have the USB drive plugged in-* Changing the preferred content string of U to `present or include=*` stops the dropping, but this was never required before--Additional information:--* The files that the Assistant started trying to drop were, I believe, the first (alphabetically) files in my repository to contain non-ascii characters in their file names (some French accented letters)--Thanks.--> The non-ascii characters are the giveaway: For 1 version, git-annex used-> a regex library that failed to ever match non-ascii characters. So it-> thought backup repos, which match "*" with a regex, wanted no such files.-> This is [[fixed|done]]. --[[Joey]]
− doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor.mdwn
@@ -1,28 +0,0 @@-### What steps will reproduce the problem?--Run `git annex assistant`.---### What is the expected output? What do you see instead?--git-annex complains:--     dbus failed; falling back to mtab polling (ClientError {clientErrorMessage =-        "Call failed: The name org.gtk.Private.GduVolumeMonitor was not provided-        by any .service files", clientErrorFatal = False})--This is because the `gvfs-gdu-volume-monitor` daemon has been obsoleted and removed from GNOME 3.6 (maybe even earlier).--git-annex should start using `gvfs-udisks2-volume-monitor` at bus name `org.gtk.Private.UDisks2VolumeMonitor`.--Alternatively, git-annex should stop relying on any per-user services, and use kernel interfaces directly when available. (This way, monitoring could work even if the user wasn't logged in and/or didn't have a DBus session bus.)--  * On all Linux kernels since 2.6.15, the `/proc/self/mounts` file is pollable – you can use **select(), poll() or epoll** to detect new mounted filesystems, without having to rely on periodic checks. (Run `findmnt -p` to see it in action.)--  * On BSD systems, kqueue on `/etc/mtab`.--### What version of git-annex are you using? On what operating system?--git-annex 3.20130102 on Linux 3.7.1, GNOME 3.7--> [[done]] --[[Joey]] 
− doc/bugs/Build-depends_needs___39__hxt__39___added_-_3.20121127.mdwn
@@ -1,36 +0,0 @@-What steps will reproduce the problem?--Install git-annex via cabal - either from Hackage or as a manual install.  (i.e. <http://git-annex.branchable.com/install/cabal/>)--What is the expected output? What do you see instead?--Expect a clean install.--However, get the following error:--    Assistant/Install.hs:24:8:-        Could not find module `Data.AssocList'-        It is a member of the hidden package `hxt-9.3.1.1'.-        Perhaps you need to add `hxt' to the build-depends in your .cabal file.-        Use -v to see a list of the files searched for.---What version of git-annex are you using? On what operating system?--git-annex: 3.20121127-OS: Mac OSX 10.6.8--Please provide any additional information below.--The fix seems to be as simple as adding 'htx' to the 'git-annex.cabal' file:--    Executable git-annex-      Main-Is: git-annex.hs-      Build-Depends: MissingH, hslogger, directory, filepath,-       unix, containers, utf8-string, network (>= 2.0), mtl (>= 2.1.1),-       bytestring, old-locale, time,-       -- Added htx here-       hxt,-       pcre-light, extensible-exceptions, dataenc, SHA, process, json, HTTP,--> I removed the need for hxt, which was accidental. [[done]] --[[Joey]] 
− doc/bugs/Build_error_on_Mac_OSX_10.6.mdwn
@@ -1,11 +0,0 @@-While following the instructions given at the OSX build page , I get this error:--$ make-ghc -O2 -Wall -ignore-package monads-fd -fspec-constr-count=5 --make git-annex--Utility/JSONStream.hs:14:8:-    Could not find module `Text.JSON':-      Use -v to see a list of the files searched for.-make: *** [git-annex] Error 1--> Updated the instructions. [[done]] --[[Joey]] 
− doc/bugs/Build_failure_at_commit_1efe4f3.mdwn
@@ -1,45 +0,0 @@-Applying this--<pre>-laplace:git-annex jtang$ git diff-diff --git a/Assistant/WebApp/Configurators.hs b/Assistant/WebApp/Configurators.hs-index b9630b1..bf36e59 100644---- a/Assistant/WebApp/Configurators.hs-+++ b/Assistant/WebApp/Configurators.hs-@@ -101,7 +101,7 @@ checkRepositoryPath p = do-  --  - If run in another directory, the user probably wants to put it there. -}- defaultRepositoryPath :: Bool -> IO FilePath--defaultRepositoryPath firstrun = do-+defaultRepositoryPath firstRun = do-        cwd <- liftIO $ getCurrentDirectory-        home <- myHomeDir-        if home == cwd && firstRun-</pre>--Causes this to occur,--<pre>-Assistant/WebApp/Configurators.hs:114:17:-    Couldn't match expected type `Control.Monad.Trans.RWS.Lazy.RWST-                                    (Maybe (Env, FileEnv), WebApp, [Yesod.Form.Types.Lang])-                                    Enctype-                                    Ints-                                    (GHandler WebApp WebApp)-                                    t0'-                with actual type `Text'-    Expected type: String-                   -> Control.Monad.Trans.RWS.Lazy.RWST-                        (Maybe (Env, FileEnv), WebApp, [Yesod.Form.Types.Lang])-                        Enctype-                        Ints-                        (GHandler WebApp WebApp)-                        t0-      Actual type: String -> Text-    In the first argument of `(.)', namely `T.pack'-    In the first argument of `(<$>)', namely-      `T.pack . addTrailingPathSeparator'-make: *** [git-annex] Error 1-</pre>--> [[fixed|done]] --[[Joey]] 
− doc/bugs/Building_fails:_Could_not_find_module___96__Text.Blaze__39__.mdwn
@@ -1,105 +0,0 @@-What steps will reproduce the problem?--<pre>-dominik@Atlantis:/var/tmp$ git clone git://github.com/joeyh/git-annex.git-Cloning into 'git-annex'...-remote: Counting objects: 40580, done.-remote: Compressing objects: 100% (10514/10514), done.-remote: Total 40580 (delta 29914), reused 40502 (delta 29837)-Receiving objects: 100% (40580/40580), 9.17 MiB | 238 KiB/s, done.-Resolving deltas: 100% (29914/29914), done.-dominik@Atlantis:/var/tmp$ cd git-annex/-dominik@Atlantis:/var/tmp/git-annex$ cabal update-Downloading the latest package list from hackage.haskell.org-dominik@Atlantis:/var/tmp/git-annex$ cabal install --only-dependencies-Resolving dependencies...-All the requested packages are already installed:-Use --reinstall if you want to reinstall anyway.-dominik@Atlantis:/var/tmp/git-annex$ cabal configure-Resolving dependencies...-[ 1 of 21] Compiling Utility.FileSystemEncoding ( Utility/FileSystemEncoding.hs, dist/setup/Utility/FileSystemEncoding.o )-[ 2 of 21] Compiling Utility.Applicative ( Utility/Applicative.hs, dist/setup/Utility/Applicative.o )-[ 3 of 21] Compiling Utility.PartialPrelude ( Utility/PartialPrelude.hs, dist/setup/Utility/PartialPrelude.o )-[ 4 of 21] Compiling Utility.UserInfo ( Utility/UserInfo.hs, dist/setup/Utility/UserInfo.o )-[ 5 of 21] Compiling Utility.Monad    ( Utility/Monad.hs, dist/setup/Utility/Monad.o )-[ 6 of 21] Compiling Utility.Path     ( Utility/Path.hs, dist/setup/Utility/Path.o )-[ 7 of 21] Compiling Utility.OSX      ( Utility/OSX.hs, dist/setup/Utility/OSX.o )-[ 8 of 21] Compiling Utility.Exception ( Utility/Exception.hs, dist/setup/Utility/Exception.o )-[ 9 of 21] Compiling Utility.TempFile ( Utility/TempFile.hs, dist/setup/Utility/TempFile.o )-[10 of 21] Compiling Utility.Misc     ( Utility/Misc.hs, dist/setup/Utility/Misc.o )-[11 of 21] Compiling Utility.Process  ( Utility/Process.hs, dist/setup/Utility/Process.o )-[12 of 21] Compiling Utility.FreeDesktop ( Utility/FreeDesktop.hs, dist/setup/Utility/FreeDesktop.o )-[13 of 21] Compiling Assistant.Install.AutoStart ( Assistant/Install/AutoStart.hs, dist/setup/Assistant/Install/AutoStart.o )-[14 of 21] Compiling Utility.SafeCommand ( Utility/SafeCommand.hs, dist/setup/Utility/SafeCommand.o )-[15 of 21] Compiling Utility.Directory ( Utility/Directory.hs, dist/setup/Utility/Directory.o )-[16 of 21] Compiling Common           ( Common.hs, dist/setup/Common.o )-[17 of 21] Compiling Locations.UserConfig ( Locations/UserConfig.hs, dist/setup/Locations/UserConfig.o )-[18 of 21] Compiling Build.TestConfig ( Build/TestConfig.hs, dist/setup/Build/TestConfig.o )-[19 of 21] Compiling Build.Configure  ( Build/Configure.hs, dist/setup/Build/Configure.o )-[20 of 21] Compiling Build.InstallDesktopFile ( Build/InstallDesktopFile.hs, dist/setup/Build/InstallDesktopFile.o )-[21 of 21] Compiling Main             ( Setup.hs, dist/setup/Main.o )-Linking ./dist/setup/setup ...-  checking version... 3.20121018-  checking git... yes-  checking git version... 1.7.10.4-  checking cp -a... yes-  checking cp -p... yes-  checking cp --reflink=auto... yes-  checking uuid generator... uuidgen-  checking xargs -0... yes-  checking rsync... yes-  checking curl... yes-  checking wget... yes-  checking bup... no-  checking gpg... yes-  checking lsof... yes-  checking host... no-  checking ssh connection caching... yes-  checking sha1... sha1sum-  checking sha256... sha256sum-  checking sha512... sha512sum-  checking sha224... sha224sum-  checking sha384... sha384sum-Configuring git-annex-3.20121018...-dominik@Atlantis:/var/tmp/git-annex$ cabal build-Building git-annex-3.20121018...-Preprocessing executable 'git-annex' for git-annex-3.20121018...--Assistant/Alert.hs:21:8:-    Could not find module `Text.Blaze'-    It is a member of the hidden package `blaze-markup-0.5.1.1'.-    Perhaps you need to add `blaze-markup' to the build-depends in your .cabal file.-    Use -v to see a list of the files searched for.-</pre>--What is the expected output? What do you see instead?--I expect the latest git HEAD to build without an error message or provide me with a package I need to install. Instead the error above is shown. In fact the package requested is installed:--<pre>-dominik@Atlantis:/var/tmp/git-annex$ cabal install blaze-markup-Resolving dependencies...-All the requested packages are already installed:-blaze-markup-0.5.1.1-Use --reinstall if you want to reinstall anyway.-</pre>--What version of git-annex are you using? On what operating system?--git HEAD, Ubuntu 12.10--Please provide any additional information below.--<pre>-$ cabal --version-cabal-install version 0.14.0-using version 1.14.0 of the Cabal library --$ ghc --version-The Glorious Glasgow Haskell Compilation System, version 7.4.2--$ uname -a-Linux Atlantis 3.5.0-17-generic #28-Ubuntu SMP Tue Oct 9 19:31:23 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux-</pre>--> [[done]] --[[Joey]]
− doc/bugs/Building_fails:_Not_in_scope:___96__myHomeDir__39___.mdwn
@@ -1,56 +0,0 @@-What steps will reproduce the problem?--Building of the current github HEAD fails with a strange error message regarding OSX. I'm not using OSX but Ubuntu 12.10, why is cabal trying to build these files?--<pre>-dominik@Atlantis:/var/tmp$ git clone git://github.com/joeyh/git-annex.git-Cloning into 'git-annex'...-remote: Counting objects: 40243, done.-remote: Compressing objects: 100% (10568/10568), done.-remote: Total 40243 (delta 29647), reused 40044 (delta 29449)-Receiving objects: 100% (40243/40243), 9.12 MiB | 184 KiB/s, done.-Resolving deltas: 100% (29647/29647), done.-dominik@Atlantis:/var/tmp$ cd git-annex/-dominik@Atlantis:/var/tmp/git-annex$ cabal update-Downloading the latest package list from hackage.haskell.org-dominik@Atlantis:/var/tmp/git-annex$ cabal install --only-dependencies-Resolving dependencies...-All the requested packages are already installed:-Use --reinstall if you want to reinstall anyway.-dominik@Atlantis:/var/tmp/git-annex$ cabal configure-Resolving dependencies...-[ 1 of 21] Compiling Utility.FileSystemEncoding ( Utility/FileSystemEncoding.hs, dist/setup/Utility/FileSystemEncoding.o )-[ 2 of 21] Compiling Utility.Applicative ( Utility/Applicative.hs, dist/setup/Utility/Applicative.o )-[ 3 of 21] Compiling Utility.PartialPrelude ( Utility/PartialPrelude.hs, dist/setup/Utility/PartialPrelude.o )-[ 4 of 21] Compiling Utility.UserInfo ( Utility/UserInfo.hs, dist/setup/Utility/UserInfo.o )-[ 5 of 21] Compiling Utility.Monad    ( Utility/Monad.hs, dist/setup/Utility/Monad.o )-[ 6 of 21] Compiling Utility.Path     ( Utility/Path.hs, dist/setup/Utility/Path.o )-[ 7 of 21] Compiling Utility.OSX      ( Utility/OSX.hs, dist/setup/Utility/OSX.o )--Utility/OSX.hs:22:17: Not in scope: `myHomeDir'-</pre>--What is the expected output? What do you see instead?--I expect cabal to build git-annex. --What version of git-annex are you using? On what operating system?--github HEAD on Ubuntu 12.10--Please provide any additional information below.--<pre>-$ cabal --version-cabal-install version 0.14.0-using version 1.14.0 of the Cabal library --$ ghc --version-The Glorious Glasgow Haskell Compilation System, version 7.4.2--$ uname -a-Linux Atlantis 3.5.0-17-generic #28-Ubuntu SMP Tue Oct 9 19:31:23 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux--</pre>--> [[fixed|done]] --[[Joey]] 
− doc/bugs/Cabal_cannot_solve_dependencies.mdwn
@@ -1,36 +0,0 @@-### Please describe the problem.--This is a follow up of [[Problems building on Mac OS X]].-As of 4.20130521.1, cabal still cannot resolve the dependencies.--### What steps will reproduce the problem?--    cabal update-    cabal install git-annex-4.20130521.1 --user --only-dependencies--### Please provide any additional information below.--[[!format sh """-Resolving dependencies...-cabal: Could not resolve dependencies:-trying: git-annex-4.20130521.1-trying: git-annex-4.20130521.1:+webapp-trying: yesod-form-1.3.0-trying: yesod-core-1.2.1-rejecting: yesod-default-1.2.0 (conflict: git-annex-4.20130521.1:webapp =>-yesod-default(<1.2))-rejecting: yesod-default-1.1.3.2, 1.1.3.1, 1.1.3, 1.1.2, 1.1.1, 1.1.0.2,-1.1.0.1, 1.1.0 (conflict: yesod-core==1.2.1, yesod-default => yesod-core>=1.1-&& <1.2)-rejecting: yesod-default-1.0.1.1, 1.0.1, 1.0.0 (conflict: yesod-core==1.2.1,-yesod-default => yesod-core>=1.0 && <1.1)-rejecting: yesod-default-0.6.1 (conflict: yesod-core==1.2.1, yesod-default =>-yesod-core>=0.10.1 && <0.11)-rejecting: yesod-default-0.5.0 (conflict: yesod-core==1.2.1, yesod-default =>-yesod-core>=0.9.4 && <0.10)-rejecting: yesod-default-0.4.1, 0.4.0, 0.3.1 (conflict: yesod-core==1.2.1,-yesod-default => yesod-core>=0.9 && <0.10-"""]]--> At the risk of closing early again, I have uploaded a .2 with-> hints for the version of yesod-form and yesod-static. [[done]] --[[Joey]] 
− doc/bugs/Cabal_dependency_monadIO_missing.mdwn
@@ -1,17 +0,0 @@-Just issuing the command `cabal install` results in the following error message.--    Command/Add.hs:54:3:-        No instance for (Control.Monad.IO.Control.MonadControlIO-                           (Control.Monad.State.Lazy.StateT Annex.AnnexState IO))-          arising from a use of `handle' at Command/Add.hs:54:3-24--Adding the dependency for `monadIO` to `git-annex.cabal` should fix this?  --- Thomas--> No, it's already satisfied by `monad-control` being listed as a-> dependency in the cabal file. Your system might be old/new/or broken,-> perhaps it's time to provide some details about the version of haskell-> and of `monad-control` you have installed? --[[Joey]] -->> Closing as apparently user error or a broken system.->> If you see this problem please do say. [[done]] --[[Joey]] 
− doc/bugs/Calls_to_rsync_don__39__t_always_use__annex-rsync-options.mdwn
@@ -1,35 +0,0 @@-What steps will reproduce the problem?--Add a rsync special remote - one that you need a username/password to access (stored in text file $HOME/.rsync.password):--    $ git annex initremote myrsync type=rsync rsyncurl=rsync://username@rsync.example.com/myrsync encryption=none-    $ git annex describe myrsync "rsync server"-    $ git config remote.myrsync.annex-rsync-options "--password-file=$HOME/.rsync.password"--Copy a file to the remote:--    $ git annex -d copy my-file --to myrsync--What is the expected output? What do you see instead?--Expect to see the file copied over to the rsync remote, but the check doesn't use the annex-rsync-options and asks for a password.  The debug output is:--    copy my-file (checking myrsync...) [2012-10-28 01:01:01 EST] call: sh ["-c","rsync --quiet 'rsync://username@rsync.example.com/myrsync/[...SNIP...]' 2>/dev/null"]--However the actual copy does use annex-rsync-options and the copy works:--    [2012-10-28 01:01:05 EST] read: rsync ["--password-file=/home/blah/.rsync.password","--progress","--recursive","--partial","--partial-dir=.rsync-partial","/home/blah/annex/.git/annex/tmp/rsynctmp/12345/","rsync://username@rsync.example.com/myrsync"]---What version of git-annex are you using? On what operating system?--git-annex: 3.20121017--OS: Ubuntu 12.04--Please provide any additional information below.--I think this fix is as easy as including the annex-rsync-options wherever rsync is called.--> I belive there was only the one place this was neglected. [[done]]-> --[[Joey]]
− doc/bugs/Can__39__t___34__git-annex_get__34___with_3.20111203.mdwn
@@ -1,27 +0,0 @@-Hi there,--After updating to 3.20111203 (on Arch Linux) I noticed I was not able to use `git annex get` from a SSH remote (server running Arch Linux, same version of git-annex): "requested key is not present". Same behavior with current master (commit 6cf28585). I had no issue with the previous version (3.20111122).--On this server, I was able to track down the issue using `git-annex-shell inannex` and `strace`:--    $ strace -f -o log git-annex-shell inannex ~/photos-annex.git WORM-s369360-m1321602916--2011-11-17.jpg   -    $ echo $?-    1-    $ tail -n20 log-    [...]-    25623 chdir("/home/schnouki/git-annex") = 0-    25623 stat("/home/schnouki/photos-annex.git/annex/objects/082/676/WORM-s369360-m1321602916--2011-11-17.jpg/WORM-s369360-m1321602916--2011-11-17.jpg", {st_mode=S_IFREG|0400, st_size=369360, ...}) = 0-    25623 open("annex/objects/082/676/WORM-s369360-m1321602916--2011-11-17.jpg/WORM-s369360-m1321602916--2011-11-17.jpg", O_RDONLY) = -1 ENOENT (No such file or directory)-    [...]--Note there is a call to `stat()` with the full path to the requested file, and *then* a call to `open()` with a relative path -- which calls this call to fail, and git-annex-shell to return 1. With 3.20111122, there was no call to `stat()`, just a successful call to `open()` with a full absolute path.--Using `git bisect` I was able to determine that this bug appeared in commit 64672c62 ("refactor"). Reverting it makes `git-annex-shell` work as expected, but I'm sure there are better ways to fix this. However I don't know enough Haskell to do it myself.--Could you please try to fix this in a future version?--> Thanks for a very good bug report. -> -> I've fixed this stupid mistake introduced in the code refactoring.-> [[done]]-> --[[Joey]]
− doc/bugs/Can__39__t_rename___34__here__34___repository.mdwn
@@ -1,32 +0,0 @@-### 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/Can__39__t_set_repositories_directory.mdwn
@@ -1,15 +0,0 @@-Can't set the repository directory---At beginning during the webapp installation---0.0.1 for OS X 10.8.2---user error (git ["--git-dir=/Users/filippo/Desktop/annex/.git","--work-tree=/Users/filippo/Desktop/annex","commit-tree","4b825dc642cb6eb9a060e54bf8d69288fbee4904"] exited 128)--[[!tag moreinfo assistant]]--> [[done]]; based on the comment, this was a broken git email issue, which-> git-annex now works around. --[[Joey]]
− doc/bugs/Can__39__t_start_on_Cyanogenmod_10.2_nightly.mdwn
@@ -1,158 +0,0 @@-### Please describe the problem.-The android app won't start on Cyanogenmod 10.2. Not sure if this is cyanogenmod specific or if it is because the underlying android is now version 4.3--### What steps will reproduce the problem?-Install the apk and start the program--### What version of git-annex are you using? On what operating system?-A 7 day old nightly as of this post(can't get specific number since it won't run)--### Please provide any additional information below.--Tested this on both a samsung galaxy S and a samsung galaxy note 2. With different nightlies of cyanogenmod 10.2--[[!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--Falling back to hardcoded app location; cannot find expected files in /data/app-lib-git annex webapp-u0_a115@android:/sdcard/git-annex.home $ git annex webapp-CANNOT LINK EXECUTABLE: git-annex invalid R_ARM_COPY relocation against DT_SYMBOLIC shared library libc.so (built with -Bsymbolic?)-1|u0_a115@android:/sdcard/git-annex.home $--------cat git-annex-install.log--Installation starting to /data/data/ga.androidterm-34c88243533e9b0a725ebe33533d990e628dc44b-installing busybox-installing git-annex-installing git-shell-installing git-upload-pack-installing git-installing gpg-installing rsync-installing ssh-installing ssh-keygen-linking ./libexec/git-core/git-config to git-linking ./libexec/git-core/git-fetch to git-linking ./libexec/git-core/git-fsck to git-linking ./libexec/git-core/git-unpack-file to git-linking ./libexec/git-core/git-get-tar-commit-id to git-linking ./libexec/git-core/git-fmt-merge-msg to git-linking ./libexec/git-core/git-push to git-linking ./libexec/git-core/git-for-each-ref to git-linking ./libexec/git-core/git-pack-redundant to git-linking ./libexec/git-core/git-mv to git-linking ./libexec/git-core/git-ls-remote to git-linking ./libexec/git-core/git-prune-packed to git-linking ./libexec/git-core/git-apply to git-linking ./libexec/git-core/git-check-ignore to git-linking ./libexec/git-core/git-log to git-linking ./libexec/git-core/git-cherry-pick to git-linking ./libexec/git-core/git-diff-files to git-linking ./libexec/git-core/git-commit-tree to git-linking ./libexec/git-core/git-index-pack to git-linking ./libexec/git-core/git-reflog to git-linking ./libexec/git-core/git-merge-index to git-linking ./libexec/git-core/git-column to git-linking ./libexec/git-core/git-checkout-index to git-linking ./libexec/git-core/git-diff-index to git-linking ./libexec/git-core/git-count-objects to git-linking ./libexec/git-core/git-fast-export to git-linking ./libexec/git-core/git-fetch-pack to git-linking ./libexec/git-core/git-merge-file to git-linking ./libexec/git-core/git-init to git-linking ./libexec/git-core/git-remote to git-linking ./libexec/git-core/git-init-db to git-linking ./libexec/git-core/git-ls-tree to git-linking ./libexec/git-core/git-merge-subtree to git-linking ./libexec/git-core/git-rev-parse to git-linking ./libexec/git-core/git-bundle to git-linking ./libexec/git-core/git-prune to git-linking ./libexec/git-core/git-peek-remote to git-linking ./libexec/git-core/git-tar-tree to git-linking ./libexec/git-core/git-describe to git-linking ./libexec/git-core/git-update-index to git-linking ./libexec/git-core/git to git-linking ./libexec/git-core/git-revert to git-linking ./libexec/git-core/git-show-ref to git-linking ./libexec/git-core/git-upload-archive to git-linking ./libexec/git-core/git-add to git-linking ./libexec/git-core/git-verify-tag to git-linking ./libexec/git-core/git-format-patch to git-linking ./libexec/git-core/git-show-branch to git-linking ./libexec/git-core/git-remote-fd to git-linking ./libexec/git-core/git-pack-refs to git-linking ./libexec/git-core/git-replace to git-linking ./libexec/git-core/git-pack-objects to git-linking ./libexec/git-core/git-notes to git-linking ./libexec/git-core/git-tag to git-linking ./libexec/git-core/git-var to git-linking ./libexec/git-core/git-help to git-linking ./libexec/git-core/git-gc to git-linking ./libexec/git-core/git-check-ref-format to git-linking ./libexec/git-core/git-shortlog to git-linking ./libexec/git-core/git-stage to git-linking ./libexec/git-core/git-mktree to git-linking ./libexec/git-core/git-merge-recursive to git-linking ./libexec/git-core/git-grep to git-linking ./libexec/git-core/git-clean to git-linking ./libexec/git-core/git-merge-base to git-linking ./libexec/git-core/git-repo-config to git-linking ./libexec/git-core/git-hash-object to git-linking ./libexec/git-core/git-read-tree to git-linking ./libexec/git-core/git-rm to git-linking ./libexec/git-core/git-fsck-objects to git-linking ./libexec/git-core/git-ls-files to git-linking ./libexec/git-core/git-mktag to git-linking ./libexec/git-core/git-stripspace to git-linking ./libexec/git-core/git-mailsplit to git-linking ./libexec/git-core/git-diff-tree to git-linking ./libexec/git-core/git-merge-ours to git-linking ./libexec/git-core/git-cherry to git-linking ./libexec/git-core/git-checkout to git-linking ./libexec/git-core/git-rev-list to git-linking ./libexec/git-core/git-write-tree to git-linking ./libexec/git-core/git-update-ref to git-linking ./libexec/git-core/git-blame to git-linking ./libexec/git-core/git-archive to git-linking ./libexec/git-core/git-update-server-info to git-linking ./libexec/git-core/git-merge-tree to git-linking ./libexec/git-core/git-show to git-linking ./libexec/git-core/git-remote-ext to git-linking ./libexec/git-core/git-merge to git-linking ./libexec/git-core/git-name-rev to git-linking ./libexec/git-core/git-bisect--helper to git-linking ./libexec/git-core/git-clone to git-linking ./libexec/git-core/git-symbolic-ref to git-linking ./libexec/git-core/git-send-pack to git-linking ./libexec/git-core/git-commit to git-linking ./libexec/git-core/git-mailinfo to git-linking ./libexec/git-core/git-credential to git-linking ./libexec/git-core/git-diff to git-linking ./libexec/git-core/git-patch-id to git-linking ./libexec/git-core/git-rerere to git-linking ./libexec/git-core/git-branch to git-linking ./libexec/git-core/git-reset to git-linking ./libexec/git-core/git-receive-pack to git-linking ./libexec/git-core/git-verify-pack to git-linking ./libexec/git-core/git-unpack-objects to git-linking ./libexec/git-core/git-check-attr to git-linking ./libexec/git-core/git-whatchanged to git-linking ./libexec/git-core/git-status to git-linking ./libexec/git-core/git-cat-file to git-linking ./libexec/git-core/git-annotate to git-linking ./bin/git-upload-archive to git-linking ./bin/git-receive-pack to git-linking ./libexec/git-core/git-shell to git-shell-linking ./libexec/git-core/git-upload-pack to git-upload-pack-Installation complete--# End of transcript or log.-"""]]--> [[dup|done]] of [[git-annex_broken_on_Android_4.3]].--[[Joey]] 
− doc/bugs/Cannot_build_the_latest_with_GHC_7.6.1.mdwn
@@ -1,18 +0,0 @@-What steps will reproduce the problem?--cabal install git-annex--What is the expected output? What do you see instead?--I get this:--    Assistant/WebApp/Configurators/Local.hs:55:11:-    `fieldEnctype' is not a (visible) field of constructor `Field'--What version of git-annex are you using? On what operating system?--20121127--Please provide any additional information below.--> [[done]]; see comments. --[[Joey]] 
− doc/bugs/Cannot_clone_an_annex.mdwn
@@ -1,69 +0,0 @@-I have an annex that I use to store my digital photos.  I had a few false-starts creating this annex, but now it's looking good on my server:--    root@titan.local:/tank/Media/Pictures# git annex status-    supported backends: SHA256E SHA1E SHA512E SHA224E SHA384E SHA256 SHA1 SHA512 SHA224 SHA384 WORM URL-    supported remote types: git S3 bup directory rsync web hook-    trusted repositories: 0-    semitrusted repositories: 2-            00000000-0000-0000-0000-000000000001 -- web-            be88bc5a-17e2-11e2-a99b-d388d4437350 -- here (titan)-    untrusted repositories: 0-    dead repositories: 5-            0A9F3136-A12A-43C7-9BE2-33F59954FD52 -- vulcan-            57349F02-E497-4420-9230-6B15D8AB14EE -- vulcan-            6195C912-2707-4B75-AC8C-11C51FAA8FE0 -- vulcan-            D51DEDC4-9255-4A99-8520-2B1CED337674 -- hermes-            EE327B34-3E20-4B5B-8F0E-D500CBC9738D -- hermes-    transfers in progress: none-    available local disk space: unknown-    local annex keys: 20064-    local annex size: 217 gigabytes-    known annex keys: 21496-    known annex size: 217 gigabytes-    bloom filter size: 16 mebibytes (4% full)-    backend usage: -            SHA256E: 41560-    root@titan.local:/tank/Media/Pictures# git annex unused-    unused . (checking for unused data...) ok--It passes `git annex fsck` without any problems.  However, when I "git clone"-this annex to my desktop machine and then do a `git annex sync`, I see this:--    Vulcan /Volumes/tank/Media/Pictures (master) $ git annex status-    supported backends: SHA256E SHA1E SHA512E SHA224E SHA384E SHA256 SHA1 SHA512 SHA224 SHA384 WORM URL-    supported remote types: git S3 bup directory rsync web hook-    trusted repositories: 0-    semitrusted repositories: 5-            00000000-0000-0000-0000-000000000001 -- web-            0A9F3136-A12A-43C7-9BE2-33F59954FD52 -- vulcan-            274D3474-7A25-44CD-8368-CF11C451014F -- here (vulcan)-            EE327B34-3E20-4B5B-8F0E-D500CBC9738D -- hermes-            be88bc5a-17e2-11e2-a99b-d388d4437350 -- titan-    untrusted repositories: 0-    dead repositories: 3-            57349F02-E497-4420-9230-6B15D8AB14EE -- vulcan-            6195C912-2707-4B75-AC8C-11C51FAA8FE0 -- vulcan-            D51DEDC4-9255-4A99-8520-2B1CED337674 -- hermes-    transfers in progress: none-    available local disk space: 1 terabyte (+1 megabyte reserved)-    local annex keys: 0-    local annex size: 0 bytes-    known annex keys: 21025-    known annex size: 217 gigabytes-    bloom filter size: 16 mebibytes (0% full)-    backend usage: -            SHA256: 18707-            SHA256E: 2318--Where did all these `SHA256` keys come from?--Why doesn't the known annex keys size match?--Further, I cannot `git annex get` on most of the files, because it says that-the `SHA256` key is not present.--It looks like I'll have to rollback my ZFS snapshots and start over, but I'm-wondering: how was I even able to create this situation?--> [[Done]]; user error. --[[Joey]] 
− doc/bugs/Cannot_copy_to_a_git-annex_remote.mdwn
@@ -1,14 +0,0 @@-What steps will reproduce the problem?--I really have no way to reproduce.  I have these two annex repository, both living on CentOS 6.3 machines, using SSH to copy from one to the other.  Everything has always worked fine, and I've copied hundreds of gigabytes and tens of thousands of files so far without a problem.--What is the expected output? What do you see instead?--I do "git copy --to storage FILE" and it says "Copying FILE... failed".  That's it.--How do I fix things so that I can copy again?  Nothing that I tried had any effect on the problem.--Thanks!--> Thanks to Jim's smart correlation of this with another bug, I've fixed-> them both. [[done]] --[[Joey]]
− doc/bugs/Committer_crashed.mdwn
@@ -1,32 +0,0 @@-# What steps will reproduce the problem?--Editing a text file with vim--#What is the expected output? What do you see instead?--    # On branch master-    # Changes not staged for commit:--    #   (use "git add <file>..." to update what will be committed)-    #   (use "git checkout -- <file>..." to discard changes in working directory)-    #-    #       typechange: test-    #-    # Untracked files:-    #   (use "git add <file>..." to include in what will be committed)-    #-    #       .test.swp--    no changes added to commit (use "git add" and/or "git commit -a")--    /.test.swp still has writers, not adding--    Committer crashed: ./test~: createLink: does not exist (No such file or directory)--# What version of git-annex are you using? On what operating system?--3.20130107 prebuilt tar ball on Debian testing--> Could also fail in `getFileStatus`. In either case it's a race-> with the file being deleted while it's still in the process of being-> locked down. Fixed this [[done]] --[[Joey]]
− doc/bugs/Compile_needs_more_than_1.5gb_of_memory.mdwn
@@ -1,16 +0,0 @@-What steps will reproduce the problem?--> cabal install git-annex--What is the expected output? What do you see instead?--> I would expect a working git-annex on my little linode. I have a linode 768 and trouble building the latest version. The process get's killed because of an out of memory condition.--What version of git-annex are you using? On what operating system?--> git-annex version: 4.20130314-> Ubuntu 12.04--Please provide any additional information below.--[[done]]
− doc/bugs/Complete_failure_trying_to_unannex_a_large_annex.mdwn
@@ -1,56 +0,0 @@-I really don't know what's happened here, I just did `git annex unannex .` in a very large annex:--    unannex Inbox/Lolcat.JPG (Recording state in git...)-    ok-    unannex Inbox/Lolcat.jpg (Recording state in git...)-    ok-    unannex Inbox/May 2012 Photo Stream/120502_0004.JPG (Recording state in git...)-    ok-    unannex Inbox/May 2012 Photo Stream/120518_0005.JPG (Recording state in git...)-    ok-    unannex Inbox/May 2012 Photo Stream/120523_0006.JPG (Recording state in git...)-    ok-    unannex Inbox/May 2012 Photo Stream/120523_0007.JPG (Recording state in git...)-    ok-    unannex Inbox/My boyfriend of 7 years and I are both physicists. Here's how he proposed to me. - Imgur.jpg (Recording state in git...)-    ok-    unannex Inbox/Nov 2012 Photo Stream/121102_0035.JPG (Recording state in git...)-    ok-    unannex Inbox/Nov 2012 Photo Stream/121102_0036.JPG (Recording state in git...)-    ok-    unannex Inbox/Nov 2012 Photo Stream/121102_0037.JPG (Recording state in git...)-    ok-    unannex Inbox/Nov 2012 Photo Stream/121102_0038.JPG (Recording state in git...)-    ok-    unannex Inbox/Nov 2012 Photo Stream/121102_0039.JPG (Recording state in git...)-    ok-    unannex Inbox/Nov 2012 Photo Stream/121103_0040.JPG (Recording state in git...)-    ok-    unannex Inbox/Nov 2012 Photo Stream/121104_0041.JPG (Recording state in git...)-    ok-    unannex Inbox/Nov 2012 Photo Stream/121105_0042.JPG (Recording state in git...)-    error: bad index file sha1 signature-    fatal: index file corrupt-    git-annex: failed to read sha from git write-tree-    git-annex: git commit [Param "-q",Params "-m",Param "content removed from git annex",Param "--",File "Inbox/Nov 2012 Photo Stream/121105_0042.JPG"] failed-    Vulcan:~/Pictures $ ga unannex .-    unannex Inbox/Nov 2012 Photo Stream/121109_0043.JPG error: bad index file sha1 signature-    fatal: index file corrupt--    git-annex: fd:12: hClose: resource vanished (Broken pipe)-    failed-    git-annex: pre-commit: 1 failed-    git-annex: git commit [Param "-q",Params "-m",Param "content removed from git annex",Param "--",File "Inbox/Nov 2012 Photo Stream/121109_0043.JPG"] failed-    Vulcan:~/Pictures $ ga -F unannex .-    unannex Inbox/Nov 2012 Photo Stream/121124_0044.JPG error: bad index file sha1 signature-    fatal: index file corrupt--    git-annex: fd:12: hClose: resource vanished (Broken pipe)-    failed-    git-annex: pre-commit: 1 failed-    git-annex: git commit [Param "-q",Params "-m",Param "content removed from git annex",Param "--",File "Inbox/Nov 2012 Photo Stream/121124_0044.JPG"] failed--I guess now I'll just try to unlink the symlinks by hand, and drop the `.git` directory?--> [[done]]; per my comment this seems like a corrupt git repository.-> --[[Joey]]
− doc/bugs/ControlPath_too_long_for_Unix_domain_socket.mdwn
@@ -1,53 +0,0 @@-What steps will reproduce the problem?-Pairing an existing git annex repository with a fresh repository on another computer in the git-annex webapp---What is the expected output? What do you see instead?-Expected result is that the two machines sync correctly.--What i see are some "ControlPath <data>  too long for unix domain socket" errors from ssh, but the computers do actually sync properly. --Even though the data is synced properly, either the sender(or both of the clients) don't actually realize this. And the queue circles, all the transfers are being redone constantly(On every start of git-annex webapp on the original repository at least).---What version of git-annex are you using? On what operating system?-Latest git master as of this post. Debian sid and Ubuntu 12.04---Please provide any additional information below.---stdout snippet from git-annex webapp:---    ControlPath "/home/alansmithee/Desktop/annex/.git/annex/ssh/alansmithee@git-annex-debbook.local-alansmithee.dxpXHVCkLhsxvWaH" too long for Unix domain socket-    SHA256-s51233--0b4c59b3ab03b1ca6d95d4084fa6ff7220cf26695b6e3dd575f78af3dec6b701-           51233 100%    5.43MB/s    0:00:00 (xfer#1, to-check=0/1)--    sent 30 bytes  received 51385 bytes  102830.00 bytes/sec-    total size is 51233  speedup is 1.00-    ok-    (Recording state in git...)--    ControlPath "/home/alansmithee/Desktop/annex/.git/annex/ssh/alansmithee@git-annex-debbook.local-alansmithee.9ZQwEjraTxi20B6W" too long for Unix domain socket-    SHA256-s47883982--4b7cbb49506dcdd223a9db7b400cc41fc2e3ebbf5b2b17b75c9334bb949b6754-        47883982 100%    1.34MB/s    0:00:34 (xfer#1, to-check=0/1)--    sent 30 bytes  received 47889978 bytes  1388116.17 bytes/sec-    total size is 47883982  speedup is 1.00-    ok-    (Recording state in git...)---This data appears on both the sending and receiving git-annex stdout. At least for the initial sync. For later syncs it only appears on the sender, though the client system is using a lot of resources.--> I've made git-annex detect if the control path would be too long,-> and disable ssh connection caching. It also tries a relative path-> to the file, which tends to make it shorter, and I think would-> keep ssh connection caching working in your example.-> -> Please test and see if it works, and also if the "looping" problem-> still happens. --[[Joey]]-->> Closing; I'm pretty sure the looping is just transfer retrying, to be->> expected if they fail. [[done]] --[[Joey]] 
− doc/bugs/Could_not_find_module_Data.Default.mdwn
@@ -1,33 +0,0 @@-**What steps will reproduce the problem?**--Manually building git-annex from git.--**What is the expected output? What do you see instead?**--    $ cabal update-    ...-    $ cabal install --only-dependencies-    ...-    $ cabal configure-    ...-    $ cabal build-    Building git-annex-3.20120826...-    Preprocessing executable 'git-annex' for git-annex-3.20120826...-    -    Utility/Yesod.hs:15:8:-        Could not find module `Data.Default'-        It is a member of the hidden package `data-default-0.5.0'.-        Perhaps you need to add `data-default' to the build-depends in your .cabal file.-        Use -v to see a list of the files searched for.-    $--**What version of git-annex are you using? On what operating system?**--commit e7d728672a5fc923be9ab1d6fe4b65f2058b49c7-Arch Linux--**Please provide any additional information below.**--When I add data-default to git-annex.cabal's Build-Deps it works fine.--> Thanks, [[done]]. --[[Joey]]
− doc/bugs/Could_not_read_from_remote_repository.mdwn
@@ -1,24 +0,0 @@-### Please describe the problem.--I've been using git-annex for a few weeks now, and everything was working fine until today. Now, when git-annex goes to sync my files, it will hang for a while, and then display a red box on the left side, saying `! Synced with adam.liter`. So, basically, it doesn't really sync. The logs say that it cannot read from the remote repository, which is set up on box.com and was working just fine until today.--I've tried reconfiguring my jabber account on all my devices with git-annex as well as deleting and remaking the box.com repository, and none of these steps have solved the problem.--### What steps will reproduce the problem?--Making changes to any file located in the repository.--### What version of git-annex are you using? On what operating system?--Mac OS X 10.8.4 and git-annex version 4.20130801-gc88bbc4.--### Please provide any additional information below.--[[!format sh """-[2013-09-09 01:33:03 EDT] XMPPSendPack: Syncing with adam.liter -Already up-to-date.-fatal: Could not read from remote repository.--Please make sure you have the correct access rights-and the repository exists.-"""]]
− doc/bugs/Could_not_resolve_dependencies.mdwn
@@ -1,40 +0,0 @@-I'm not able to install git-annex with cabal.--What steps will reproduce the problem?--    bbigras@bbigras-VirtualBox:~$ cabal update-    Downloading the latest package list from hackage.haskell.org-    bbigras@bbigras-VirtualBox:~$ cabal install git-annex --bindir=$HOME/bin-    Resolving dependencies...-    cabal: Could not resolve dependencies:-    trying: git-annex-3.20130207 (user goal)-    trying: git-annex-3.20130207:+webdav-    trying: git-annex-3.20130207:+webapp-    trying: git-annex-3.20130207:+assistant-    trying: yesod-1.1.8.2 (dependency of git-annex-3.20130207:+assistant)-    trying: yesod-auth-1.1.5.2 (dependency of yesod-1.1.8.2)-    trying: authenticate-1.3.2.4 (dependency of yesod-auth-1.1.5.2)-    trying: xml-conduit-1.1.0.1 (dependency of authenticate-1.3.2.4)-    next goal: DAV (dependency of git-annex-3.20130207:+webdav)-    rejecting: DAV-0.3 (conflict: xml-conduit==1.1.0.1, DAV => xml-conduit>=1.0 &&-    <=1.1)-    rejecting: DAV-0.2, 0.1, 0.0.1, 0.0 (conflict: git-annex-3.20130207:webdav =>-    DAV(>=0.3))-    bbigras@bbigras-VirtualBox:~$---What version of git-annex are you using? On what operating system?--Ubuntu 12.10 x86_64--cabal-install version 0.14.0-using version 1.14.0 of the Cabal library--> The Haskell DAV library needs to be updated to build with-> the newer version of xml-conduit. Library skew of this sort -> is common when using cabal.-> -> You can work around this by building git-annex without webdav:-> `cabal configure --flags=-WebDAV`-> -> This is not a git-annex bug. [[done]] --[[Joey]]
− doc/bugs/Crash_trying_to_sync_with_a_repo_over_ssh.mdwn
@@ -1,43 +0,0 @@-What steps will reproduce the problem?--I create a new annex, added in a bunch of files.--I cloned this annex to another machine, where I already had those files, so I copied them into a directory named "foo", did "git annex add foo", and then did "git rm -r foo", and git commit'd my clone of the annex.--Then I try to "git annex sync" with the remote.--What is the expected output? What do you see instead?--I don't know, I've never used git-annex before.  This is what I get each time:--    Hermes ~/Products/tmp/Movies (master) $ ga sync-    git-annex-shell: Prelude.(!!): index too large--What version of git-annex are you using? On what operating system?--It's the 'master' as of yesterday: c504f4025fec49e62601fbd4a3cd8f1270c7d221--I'm on OS X 10.8.2, using GHC 7.6.1.  The annex in question has 38G in a few hundred files.--Please provide any additional information below.--I'm willing to help track this down!--> I've got it, October 9th's release -> included commit bc649a35bacbecef93e378b1497f6a05b30bf452, which included a-> change to a `segment` function. It was supposed to be a-> rewrite in terms of a more general version, but it introduced a bug-> in what it returned in an edge case and this in turn led git-annex-shell's-> parameter parser to fail in a code path that was never reachable before.-> -> It'd fail both when a new repo was running `git-annex-shell configlist`,-> and in `git-annex-shell commit`, although this latter crash was less-> noticible and I'm sure you saw the former.-> -> Fixed the reversion; fixed insufficient guards around the partial code-> (which I cannot see a way to entirely eliminate sadly; look at-> GitAnnexShell.hs's `partitionParams` and weep or let me know if you have -> any smart ideas..); added a regression test to check the non-obvious-> behavior of segment with an empty segment. I'll be releasing a new-> version with this fix as soon as I have bandwidth, ie tomorrow.-> [[done]] --[[Joey]]
− doc/bugs/Crash_when_adding_jabber_account_.mdwn
@@ -1,32 +0,0 @@-*What steps will reproduce the problem?*--1. Start git-annex webapp-2. Configuration-3. Configure Jabber Account-4. Insert user and pass-5. Click "User this account"--Tryed 4 times, all the same.---*What is the expected output? What do you see instead?*--On Chrome I get "Error 101 (net::ERR_CONNECTION_RESET): The connection was reset." or "Error 324 (net::ERR_EMPTY_RESPONSE): The server closed the connection without sending any data."--On the terminal where git-annex was running I get "Segmentation fault (core dumped)"---*What version of git-annex are you using? On what operating system?*--git-annex version: I downloaded 3.20130107 (twice to be sure), but for some reason 'git-annex version' reports 3.20130102 --OS: Ubuntu 12.04.1 LTS 3.2.0-35-generic-pae #55-Ubuntu SMP Wed Dec 5 18:04:39 UTC 2012 i686 i686 i386 GNU/Linux---*Please provide any additional information below.*--On dmesg: -[45773.212717] git-annex[26779]: segfault at b724e840 ip 09699150 sp b4cfd038 error 7 in git-annex[8048000+1762000]--[[!tag /design/assistant]]-> [[done]], see comments --[[Joey]] 
− doc/bugs/Creating_an_encrypted_S3_does_not_check_for_presence_of_GPG.mdwn
@@ -1,18 +0,0 @@-What steps will reproduce the problem?--Don't have gpg installed/on your $PATH, and attempt to create an encrypted S3 remote via the web interface.--What is the expected output? What do you see instead?--Expected to be told to install GPG. Actual output was a Yesod error:--Internal Server Error-user error (gpg ["--batch","--no-tty","--use-agent","--quiet","--trust-model","always","--gen-random","--armor","1","512"] exited 127)--What version of git-annex are you using? On what operating system?--3.20130107 on Fedora 17 (64-bit).--Please provide any additional information below.--[[!tag /design/assistant]]
− doc/bugs/DS__95__Store_not_gitignored.mdwn
@@ -1,26 +0,0 @@-What steps will reproduce the problem?--Create a new git repo on OS X.  create a .gitignore file containing the line ".DS_Store".  Check it into git.  do "git annex init" to make the directory into a git annex repo.  do "git annex direct" to put it in direct mode.  do "git annex assistant" to start the assistant and watch it with "git annex webapp".--Open the directory in the finder.  Drag in some files and watch the assistant as it checks them in.  Play with your window's viewing preferences, maybe view things as "icons" so that the finder is forced to store metadata about where you dragged the icons in the window in the .DS_Store file.  As you do this, watch the webapp.  .DS_Store will start to be checked into git annex, and rechecked in frequently as it is updated.  Git annex assistant is not respecting the .gitignore file.  Is there some other way to tell git annex assistant that certain files should be ignored than .gitignore?---What is the expected output? What do you see instead?--.DS_Store files are ignored by the assistant.---What version of git-annex are you using? On what operating system?--git-annex version: 3.20130124--OS X Lion--Please provide any additional information below.--> Assistant does not support .gitignore yet. Requires an efficient query-> interface for ignores, which git does not provide.->-> However, I've added a special case, OSX only ignore for .DS_Store files.-> [[done]] --[[Joey]] -
− doc/bugs/Deasn__39__t_clean_up_ssh_keys_after_removing_remote_repo.mdwn
@@ -1,18 +0,0 @@-### 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/Detection_assumes_that_shell_is_bash.mdwn
@@ -1,24 +0,0 @@-###What steps will reproduce the problem?###--"Adding a remote server using ssh" and try to add a remote server where the account has ex. tcsh as loginshell--###What is the expected output? What do you see instead?###--To discover remote programs, it dumps away some born-shell code like:-"echo git-annex-probe loggedin;if which git-annex-shell; then echo git-annex-probe git-annex-shell; fi;if which rsync; then echo git-annex-probe rsync; fi;if which ~/.ssh/git-annex-shell; then echo git-annex-probe ~/.ssh/git-annex-shell; fi"--just wrap it with a bash -c '..' and you know that its interpreted by bash.--###What version of git-annex are you using? On what operating system?###--git-annex version: 3.20121017--###Please provide any additional information below.###--Not everyone has bash as there login-shell.--[[!tag /design/assistant]]--> [[done]]; assistant now uses sh -c "sane shell stuff here" to work-> around csh. (There are systems without bash, but probably fewer without sh)-> --[[Joey]]
− doc/bugs/Difficult_to_troubleshoot_XMPP_login_failures.mdwn
@@ -1,11 +0,0 @@-### Please describe the problem.--I have a jabber account on `jabber.ccc.de`. When trying to log in to that account, I get "Unable to connect to the Jabber server. Maybe you entered the wrong password? (Error message: AuthenticationFailure)" I've typed the password enough times that I'm relatively certain that I've typed it correctly at least once. It's difficult to see behind this error message. This is the only thing that shows up in the debug log:--    [2013-05-26 21:40:16 EDT] read: host ["-t","SRV","--","_xmpp-client._tcp.jabber.ccc.de"]-    [2013-05-26 21:40:16 EDT] read: host ["-t","SRV","--","_xmpp-client._tcp.jabber.ccc.de"]--It'd be great if this error were a wee bit more verbose.--> The XMPP library has been updated to include the actual error message from the server.-> [[done]] --[[Joey]]
− doc/bugs/Direct_mode_keeps_re-checksuming_duplicated_files.mdwn
@@ -1,25 +0,0 @@-##What steps will reproduce the problem?--    mkdir test-    git init-    git annex init "test"-    echo "test" > a-    echo "test" > b-    git annex add a b-    git annex sync-    git annex direct-    git annex sync | grep add-    git annex sync | grep add--##What is the expected output? What do you see instead?--The last two syncs shouldn't need to add or checksum anything.-Firstly, the output is very confusing because the files have already been added.-Secondly, the sync can take quite a while if you have lots of duplicates or a lot of files that are incidentally similar.--##What version of git-annex are you using? On what operating system?--git-annex version: 4.20130227 on Archlinux--> [[done]]; fixed inode caching code to support multiple files for the-> same content. --[[Joey]] 
− doc/bugs/Direct_mode_repositories_end_up_with_unstaged_changes.mdwn
@@ -1,46 +0,0 @@-### Please describe the problem.--After running two repositories syncing with one another in direct mode "git status" shows unstaged changes in both.--### What steps will reproduce the problem?--1. Create two direct mode repositories with each other as ssh remotes-2. Run "git annex assistant" on each-3. Create files on each and they get synced-4. Run "git status"--In my current repository the output is:--[[!format sh """-$ git status-# On branch master-# Changes not staged for commit:-#   (use "git add <file>..." to update what will be committed)-#   (use "git checkout -- <file>..." to discard changes in working directory)-#-#	typechange: fromgolias-#	typechange: fromwintermute-#-no changes added to commit (use "git add" and/or "git commit -a")-"""]]--### What version of git-annex are you using? On what operating system?--[[!format sh """-$ git annex version-git-annex version: 4.20130516.1-build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP-local repository version: 4-default repository version: 3-supported repository versions: 3 4-upgrade supported from repository versions: 0 1 2--$ lsb_release -a-No LSB modules are available.-Distributor ID:	Ubuntu-Description:	Ubuntu 12.04.2 LTS-Release:	12.04-Codename:	precise-"""]]--> [[done]] --[[Joey]]
@@ -1,32 +0,0 @@-### Please describe the problem.--When a repository is set in direct mode it will still replace files with symlinks when it becomes aware of a change but still hasn't been able to sync the file contents. This can create repositories that are temporarily unusable with files replaced with broken symlinks.--### What steps will reproduce the problem?--1. Create two repositories with each other as remotes-2. Run the assistant on both-3. Create some file changes in one and watch the directory in another.-4. For a brief (or sometimes long) time the destination repository will have it's old version of the file replaced by a broken symlink--This is particularly noticeable when using XMPP as it can often be the case that the two repositories can't connect to each other directly but can talk through XMPP. This breaks using git-annex in direct mode for things like having a synced config directory across machines. Something like having "~/.bashrc" linked into "~/annex-repository/bashrc", doesn't work as there will be times when a machine is broken because .bashrc is linked to a broken symlink while it fetches a new version. --The desired behavior would be to have git-annex in direct mode only replace older versions of files with newer versions of files.--### What version of git-annex are you using? On what operating system?--[[!format sh """-$ git annex version-git-annex version: 4.20130516.1-build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP-local repository version: 4-default repository version: 3-supported repository versions: 3 4-upgrade supported from repository versions: 0 1 2-$ lsb_release -a-No LSB modules are available.-Distributor ID:	Ubuntu-Description:	Ubuntu 12.04.2 LTS-Release:	12.04-Codename:	precise-"""]]
− doc/bugs/Disconcerting_warning_from_git-annex.mdwn
@@ -1,6 +0,0 @@-I did a "git annex add" of a bunch of files on a storage server with low IOPS, and saw this:--    git-annex: /tank/Media/Pictures/.git/annex/tmp/430_32b_SHA256E-s4464838--c1785a76ee1451f602e93c99c147e214705004e541de8256d74a3be3717d15e5.jpg.log: openBinaryFile: resource busy (file is locked)-failed--How is that even possible, when the server is doing nothing else?
− doc/bugs/Displayed_copy_speed_is_wrong.mdwn
@@ -1,8 +0,0 @@-When copying data to my remote, I regularly see speeds in excess of 100 MB/s on my home DSL line.--    2073939 100%  176.96MB/s    0:00:00 (xfer#1, to-check=0/1)--This is definitely not correct.--> Closing, as rsync does this to show you when it's making your life-> faster than it would be w/o rsync. [[done]] --[[Joey]] 
− doc/bugs/Error_creating_remote_repository_using_ssh_on_OSX.mdwn
@@ -1,36 +0,0 @@-What steps will reproduce the problem?--1. Click  "Remote server: Set up a repository on a remote server using ssh." -2. Enter hostname and different username than currently logged in user-3. Click check this server---What is the expected output? --> I expected to see the next step in the remote repo creration process.--What do you see instead?---> Failed to ssh to the server. Transcript: ssh_askpass: exec(/usr/libexec/ssh-askpass): No such file or directory Permission denied, please try again. ssh_askpass: exec(/usr/libexec/ssh-askpass): No such file or directory Permission denied, please try again. ssh_askpass: exec(/usr/libexec/ssh-askpass): No such file or directory Permission denied (publickey,password). ---What version of git-annex are you using? --> git-annex: Version: 3.20130114 ---On what operating system?--> OSX: 10.8.2----Please provide any additional information below.--> I mentioned "with a different username" because the assistant will allow me to create a remote repository on the same target machine when I use my normal username. I think this is most likely because I have a ssh-key setup for the account on the remote machine. However I do not want to assume anything and send you down the wrong OSX rabbit hole. --> After a little research it seems that OSX does not have a ssh-askpass--[[!tag /design/assistant/OSX]]-[[!meta title="ssh-askpass not available on OSX"]]
− doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__.mdwn
@@ -1,31 +0,0 @@-Running 3.20121112 on Debian Squeeze.--Since adding a certain directory of files (just a bunch of PDFs) yesterday I am getting errors when I try to use `git annex drop .` when the files aren't present, rather doing nothing or saying 'ok', as it used to do/should do.  The errors are of the form `git-annex: fd:10: hGetLine: end of file` and sometimes of the form `git-annex: fd:17: hFlush: resource vanished (Broken pipe)`.  In my `daemon.log`, I have the errors--    (scanning...) Already up-to-date.-    Already up-to-date.-    TransferScanner crashed: fd:26: hGetLine: end of file-    Already up-to-date.-    (started...) git-annex: fd:25: hGetLine: end of file-    git-annex: fd:24: hFlush: resource vanished (Broken pipe)-    git-annex: fd:24: hFlush: resource vanished (Broken pipe)-    git-annex: fd:24: hFlush: resource vanished (Broken pipe)-    git-annex: fd:24: hFlush: resource vanished (Broken pipe)-    git-annex: fd:24: hFlush: resource vanished (Broken pipe)-    git-annex: fd:24: hFlush: resource vanished (Broken pipe)-    git-annex: fd:24: hFlush: resource vanished (Broken pipe)-    git-annex: fd:24: hFlush: resource vanished (Broken pipe)-    git-annex: fd:24: hFlush: resource vanished (Broken pipe)-    git-annex: fd:24: hFlush: resource vanished (Broken pipe)-    git-annex: fd:24: hFlush: resource vanished (Broken pipe)-    [many more repetitions]--If I `git annex get` the files and then drop them again, a further attempt at a drop gives all these errors again.--> So in summary, a git-annex built against the old version of git in-> debian stable fails to work with a newer version of git, and rebuilding-> fixes it. FWIW, the git-annex backport to stable does not have this-> problem, because it checks git version at runtime. But I want to avoid-> the overhead of that check in git-annex mainline, because this old git-> version is well, very old and increasingly unlikely to be used. So,-> I don't think any changes to git-annex are warrented. [[done]] --[[Joey]]
− doc/bugs/Error_when_moving_annexed_file_to_a_.gitignored_location.mdwn
@@ -1,21 +0,0 @@-I just noticed that if you move a git-annex symlink to a location ignored by git, it simply works.  Upon committing that change, however, part of git-annex's `fix` function apparently tries to `git-add` the symlink.  This fails because the new, ignored location requires a `git-add --force`.--Considering that git proper doesn't fail or warn, I think git-annex shouldn't either.--This is the error message:--	$ git mv annexed-file ignored-dir/-	$ git commit-	fix ignored-dir/annexed-file ok-	(Recording state in git...)-	The following paths are ignored by one of your .gitignore files:-	ignored-dir-	Use -f if you really want to add them.-	fatal: no files added-	Command xargs ["-0","git","--git-dir=/home/[...]/repo/.git","--work-tree=/home/[...]/repo","add","--"] failed; exit code 123--	git-annex: user error (Command xargs ["-0","git","--git-dir=/home/[...]/repo/.git","--work-tree=/home/[...]/repo","add","--"] failed; exit code 123)-	failed-	git-annex: 1 failed--> Weird edge case.. ok, fixed. [[done]] --[[Joey]] 
− doc/bugs/Every_new_file_gets_symlinked_to_a_git_object.mdwn
@@ -1,78 +0,0 @@-### Please describe the problem.-Every file I add to a watched repository (by git-annex assistant) becomes symlinked, and sub-subsequently write protected.--Sorry if I'm missing something obvious.--### What steps will reproduce the problem?-1) Fresh install-2) create directory, init repo and git-annex-3) git annex assistant-4) add a file-5) ls -lsa to see the symlinked file-6) trying to write to the file throws a write-protected error---### What version of git-annex are you using? On what operating system?-git-annex version: 4.20130725-g8140f7c  -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--Using the generic linux distribution with ./runshell on Ubuntu 13.04 (I saw this same behaviour from the ubuntu package, i.e. apt-get install git-annex)---### Please provide any additional information below.--Here is the output from my ls -lsa-[[!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- 4 drwxrwxr-x  3 jetaggart jetaggart  4096 Jul 27 20:38 .-16 drwx------ 60 jetaggart jetaggart 16384 Jul 27 20:44 ..- 4 drwxrwxr-x  7 jetaggart jetaggart  4096 Jul 27 20:38 .git- 4 lrwxrwxrwx  1 jetaggart jetaggart   188 Jul 27 20:38 another.org -> .git/annex/objects/Qm/j7/SHA256E-s11--9484d4be897ca66ad4c9bbf299d12adfe37e089bbca1daecbbb49c375a9cf1e9.org/SHA256E-s11--9484d4be897ca66ad4c9bbf299d12adfe37e089bbca1daecbbb49c375a9cf1e9.org- 4 lrwxrwxrwx  1 jetaggart jetaggart   186 Jul 27 20:33 blah.org -> .git/annex/objects/kj/q5/SHA256E-s0--e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.org/SHA256E-s0--e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.org-12 -rw-rw-r--  1 jetaggart jetaggart   119 Jul 27 20:37 todo.org---# End of transcript or log.-"""]]--Here is the daemon.log--[[!format sh """--[2013-07-27 20:32:55 BST] main: starting assistant version 4.20130725-g8140f7c-(scanning...) [2013-07-27 20:32:55 BST] Watcher: Performing startup scan-(started...) -[2013-07-27 20:33:52 BST] Committer: Adding blah.org-add blah.org (checksum...) ok-[2013-07-27 20:33:52 BST] Committer: Committing changes to git-(Recording state in git...)-(Recording state in git...)-[2013-07-27 20:35:59 BST] Committer: Committing changes to git-(Recording state in git...)-[2013-07-27 20:36:01 BST] Committer: Committing changes to git-(Recording state in git...)-[2013-07-27 20:37:52 BST] Committer: Committing changes to git-(Recording state in git...)-[2013-07-27 20:37:55 BST] Committer: Committing changes to git-(Recording state in git...)-[2013-07-27 20:38:44 BST] Committer: Committing changes to git-(Recording state in git...)-[2013-07-27 20:38:46 BST] Committer: Adding another.org-add another.org (checksum...) ok-[2013-07-27 20:38:46 BST] Committer: Committing changes to git-(Recording state in git...)-(Recording state in git...)-[2013-07-27 20:38:51 BST] Committer: Committing changes to git-(Recording state in git...)-[2013-07-27 20:38:56 BST] Committer: Committing changes to git-(Recording state in git...)--# End of transcript or log.-"""]]--> [[done]] --[[Joey]] 
− doc/bugs/Fails_to_create_remote_repo_if_no_global_email_set.mdwn
@@ -1,55 +0,0 @@-### 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.-"""]]--> [[done]]; I've made git-annex detect such broken systems and configure them so git will work. (sigh!) --[[Joey]]
− doc/bugs/Feature_request:___34__quvi__34___flag.mdwn
@@ -1,14 +0,0 @@-### Please describe the problem.-git-annex v4.20130827 can't be built on ARM. Technically it's vector that can't be built due to a lack of Template Haskell compilers for this architecture. Vector is a dependency of aeson, which is a dependency of git-annex, which therefore fails to compile.--The only functionality that relies on aeson is, to my knowledge, quvi. Thus my feature request: If you were to introduce a flag to switch quvi support on or off, ARM users like me could circumvent the aeson dependency at build time. In this case we weren't stuck with 4.20130815 (the latest version to not depend on aeson) and could use current and future versions of git-annex. I would appreciate it.---### What steps will reproduce the problem?-See above.---### What version of git-annex are you using? On what operating system?-I'm running Raspbian Wheezy on a Raspberry Pi. The git-annex version to be built is 4.20130827. --> [[done]] --[[Joey]]
− doc/bugs/Files_disappear_from_locally_paired_annexes_when_edited.mdwn
@@ -1,36 +0,0 @@-**What steps will reproduce the problem?**--Create two annexes from the command line on two separate machines:--    mkdir ~/Files.annex-    cd ~/Files.annex-    git init-    git annex init-    git annex untrust .-    git annex direct--Add remote to each one pointing to the other:--    git remote add [remote] [remote hostname]:Files.annex--Start assistant on both repos:--    git annex assistant--Fill one repository with a few text files, and wait for them to propagate.--Edit one of the text files using vim, and save.--**What is the expected output? What do you see instead?**--Edited file should remain in the repo, but a significant portion of the time, the file disappeared from the repo in which it was edited (the file is present and properly synced on the other repo).--**What version of git-annex are you using? On what operating system?**--git-annex 4.20130323, Mac OS X on the repo where the file was edited, Arch Linux for the other paired repo.--**Please provide any additional information below.**--I have observed this problem setting up the repos through the webapp as well, so I don't think it is related to setting up the repos manually. I think the way vim is writing the files seems to be tickling a race condition (both command-line vim and MacVim produce the behavior). I started trying to work around it by switching to emacs to edit those files, and the files haven't disappeared from the edited repo (so far at least).--[[!tag /design/assistant moreinfo]]
− doc/bugs/GIT_DIR_support_incomplete.mdwn
@@ -1,17 +0,0 @@-`GIT_DIR` support isn't right. Git does not look for `GIT_DIR/.git`;-git-annex does.--Also, to support this scenario, support for core.worktree needs to be added-as well:--	mkdir repo workdir-	git --work-tree=$PWD/workdir --git-dir=$PWD/repo init-	export GIT_DIR=$PWD/repo-	git status-	# ok-	git annex init "new repo"-	# fail----[[Joey]] --> [[fixed|done]] --[[Joey]] 
− doc/bugs/GPG_can__39__t_handle_some_files.mdwn
@@ -1,23 +0,0 @@-### Please describe the problem.--It looks like GPG is being used in text mode, or at least isn't overriding the GPG config.--### What steps will reproduce the problem?--Have a binary file with long lines, and attempt to copy it into git-annex.--This will happen:--    $ git-annex copy 09\ Into\ The\ Dissonance.mp3 -t rsync.net_annex-    copy 09 Into The Dissonance.mp3 (gpg) (checking rsync.net_annex...) (to rsync.net_annex...) gpg: can't handle text lines longer than 19995 characters-    failed-    git-annex: copy: 1 failed--A workaround is to remove "textmode" from your gpg.conf, but git-annex should force this.--### What version of git-annex are you using? On what operating system?--7ae625363bcb6e1fc8b3733c1d7814aca05a2368 on Ubuntu 13.04 x86_64--> The sheer number of ways gpg offers of shooting yourself in the foot..-> Ok [[done]] --[[Joey]] 
− doc/bugs/GPG_passphrase_repeated_prompt.mdwn
@@ -1,24 +0,0 @@-#### What steps will reproduce the problem?--1. Create a new repository with a directory-2. Add files-3. Select "Store your data in the cloud" with the "Remote server" option-4. Enter host, user, directory-5. Select "Use an encrypted rsync repository on the server" (Will there be an option for unencrypted later?)-6. GPG Passphrase prompt comes up for every file--#### What is the expected output? What do you see instead?--I expect to enter a passphase once and then it will sync all files with the remote server.--Instead, it begins syncing the files to the server but prompts for a GPG passphase for every single file.--#### What version of git-annex are you using? On what operating system?--3.20121017 precompiled binary on Arch Linux--#### Please provide any additional information below.--Not sure if I'm just missing a setting for GPG, but I would think I should only need to use the web app to configure the remote server.--[[!tag /design/assistant]]
− doc/bugs/GPG_problem_on_Mac.mdwn
@@ -1,34 +0,0 @@-### 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.-"""]]--> [[done]]; I've updated the OSX autobuild to -> use a gpg that doesn't fail when gpg-agent is missing. --[[Joey]]
− doc/bugs/Glacier_remote_uploads_duplicates.mdwn
@@ -1,36 +0,0 @@-### Please describe the problem.--Other references:--https://github.com/basak/glacier-cli/pull/19-http://git-annex.branchable.com/special_remotes/glacier/#comment-a2b05b8dc2d640ee498d90398f02931c--#### Background-- * Glacier doesn't support keys that the client selects, unlike S3. If you upload to Glacier, Glacier assigns a unique ID, not the client.- * Glacier does support an "archive description" which is immutable. It also provides this "archive description" in an inventory listing, together with the unique IDs.- * An "archive description" is not a unique key. It's perfectly possible to upload multiple archives to Glacier with the same "archive description".- * glacier-cli uses the "archive description" field as an upload identifier, since the unique IDs are unfriendly to users. However, since they are potentially ambiguous identifiers, it also supports disambiguation using the ID itself. See "Addressing Archives" in README.md for details.--#### The Problem--This what I believe is happening in the two reports referenced above. When git-annex is used without `--trust-glacier`, it can end up uploading the same data multiple times. From git-annex's point of view, it cannot verify that the data is already in Glacier, so it uploads again, expecting an overwrite operation if the key is already in Glacier. Since glacier-cli maps the key to an "archive description" that can be duplicated, this is not what happens. Instead, a second archive is uploaded.--When git-annex later does a "checkpresent" operation, glacier-cli fails. This is because the request is ambiguous, since there are two archives in Glacier with the same "key". The error message could be better here, but I believe that the behaviour is correct.--#### Discussion--glacier-cli can find out what data Glacier claims to have using an inventory retrieval. However, this retrieval takes about four hours and can be out of date (eg. if someone else recently deleted the archive from another client). Thus, I can understand git-annex's desire not to trust this data or a cache of it.--However, whatever we do, it is impossible to map an "upload or overwrite on key X" type command to Glacier. We'll always end up with duplicates. Even if git-annex stored the Glacier archive IDs, there is no API to replace an existing archive with the same ID, and inventories are out of date even before we retrieve them.--#### Workaround--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
@@ -1,26 +0,0 @@-### 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
@@ -1,46 +0,0 @@-### 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]]
@@ -1,125 +0,0 @@-### Please describe the problem.--Direct mode repositories seem to initially ignore hard linked files and then when changes are done to them sync them as separate files. However, changes to one file are only propagated to that file and not to any of the others that are hardlinked to it.--### What steps will reproduce the problem?--Inside a direct mode repository linked to a ssh remote:--[[!format sh """-$ ls -l-total 0-$ echo "something" > foo-$ ln foo bar-$ ls -l-total 8--rw-r--r-- 2 pedrocr pedrocr 10 May 29 12:08 bar--rw-r--r-- 2 pedrocr pedrocr 10 May 29 12:08 foo-$ tail .git/annex/daemon.log-   6c0fbd7..0bb8ef9  git-annex -> synced/git-annex-   0bae1b4..bfedc45  master -> synced/master--sent 77 bytes  received 31 bytes  72.00 bytes/sec-total size is 10  speedup is 0.09-[2013-05-29 12:08:03 WEST] Transferrer: Uploaded foo-Already up-to-date.-[2013-05-29 12:08:05 WEST] Pusher: Syncing with golias -To ssh://golias.git-annex/home/pedrocr/testsync-   0bb8ef9..2ce5013  git-annex -> synced/git-annex-$ git status-# On branch master-# Changes not staged for commit:-#   (use "git add <file>..." to update what will be committed)-#   (use "git checkout -- <file>..." to discard changes in working directory)-#-#	typechange: foo-#-# Untracked files:-#   (use "git add <file>..." to include in what will be committed)-#-#	bar-no changes added to commit (use "git add" and/or "git commit -a")-"""]]--On the remote repository:--[[!format sh """-$ ls -l-total 4--rw-r--r-- 1 pedrocr pedrocr 10 May 29 12:08 foo-"""]]--If I now just touch the linked file on the repository:--[[!format sh """-$ touch bar-$ tail .git/annex/daemon.log--(merging synced/git-annex into git-annex...)-(Recording state in git...)-add bar (checksum...) [2013-05-29 12:12:49 WEST] Committer: Committing changes to git-[2013-05-29 12:12:49 WEST] Pusher: Syncing with golias -Already up-to-date.-To ssh://golias.git-annex/home/pedrocr/testsync-   2ce5013..d36166b  git-annex -> synced/git-annex-   bfedc45..ee3a7a1  master -> synced/master-Already up-to-date.-"""]]--On the remote repository:--[[!format sh """-$ ls -l-total 8--rw-r--r-- 1 pedrocr pedrocr 10 May 29 12:08 bar--rw-r--r-- 1 pedrocr pedrocr 10 May 29 12:08 foo-"""]]--Note that now bar has been synced as a new file and not a hardlink as it should be (the 1's after the permissions). --The sync also isn't acting properly on the linked files. For example. --First in the origin repository:--[[!format sh """-$ cat bar-something-$ cat foo-something-$ echo "someotherthing" > bar-$ cat bar-someotherthing-$ cat foo-someotherthing-"""]]--The result in the destination:--[[!format sh """-$ cat bar-someotherthing-$ cat foo-something-"""]]--So even if the intended behavior is for hardlinked files to be synced as two separate files the sync isn't correct because the two files changed in the origin and only one of them changed in the destination. This probably needs to be fixed with actual hard links for real filesystems and with some copying for crippled filesystems.--### What version of git-annex are you using? On what operating system?--[[!format sh """-$ git annex version-git-annex version: 4.20130516.1-build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP-local repository version: 4-default repository version: 3-supported repository versions: 3 4-upgrade supported from repository versions: 0 1 2-$ lsb_release -a-No LSB modules are available.-Distributor ID:	Ubuntu-Description:	Ubuntu 12.04.2 LTS-Release:	12.04-Codename:	precise-"""]]--
− doc/bugs/Huge_annex_out_of_memory_on_switch_to_indirect_mode_and_status.mdwn
@@ -1,61 +0,0 @@-### Please describe the problem.--I added a lot of files to my annex in direct mode. Now I want to switch to indirect mode. git-annex status and indirect create an out-of-memory error.--### What steps will reproduce the problem?--I am not really sure, I added a lot of files to the annex, almost 3TB.-Then either git-annex status or git-annex indirect cause a similar error (see below).---### What version of git-annex are you using? On what operating system?--git-annex version: 4.20130501-g4a5bfb3-local repository version: 4-default repository version: 3-supported repository versions: 3 4-upgrade supported from repository versions: 0 1 2-build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP--Ubuntu precise-3.2.0-26-generic---### 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/debug.log-git-annex status-supported backends: SHA256E SHA1E SHA512E SHA224E SHA384E SHA256 SHA1 SHA512 SHA224 SHA384 WORM URL-supported remote types: git S3 bup directory rsync web webdav glacier hook-repository mode: direct-trusted repositories: 0-semitrusted repositories: 7-	00000000-0000-0000-0000-000000000001 -- web- 	0b8e6666-80d5-11e2-adf3-6f4d3d6ef0aa -- marek@x4:~/tmp/annex- 	65c057c6-6027-11e2-84b0-b77d71696e49 -- here (.)- 	96b31c5e-6524-11e2-b136-fbd1a03b2799 -- BackupOnGlacier- 	b509c388-629a-11e2-be5f-d376e201ad86 -- marek@x201:~/AllData- 	c636e33c-6e31-11e2-a9c4-a3c5546d69d9 -- desktop- 	fbaa1c3a-60d7-11e2-842f-9348368d2f4c -- .-untrusted repositories: 0-dead repositories: 0-transfers in progress: none-available local disk space: 81 gigabytes (+1 megabyte reserved)-temporary directory size: 9 megabytes (clean up with git-annex unused)-local annex keys: 61396-local annex size: 3 terabytes-known annex keys: git-annex: out of memory (requested 985661440 bytes)--OR--git-annex indirect-commit  git-annex: out of memory (requested 985661440 bytes)------# End of transcript or log.-"""]]
− doc/bugs/Incorrect_version_on_64_Standalone_Build.mdwn
@@ -1,11 +0,0 @@-    $ 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-    git-annex version: 4.20130324--Shouldn't that be `4.20130405`?--The md5sum of the build I downloaded is `aabbb3aa2397be206cae86f33db9eef4`.--> [[done]]; new version will look like eg `4.20130410-gc149c67` --[[Joey]] 
− doc/bugs/Install_of_git-annex-3.20121112_fails.mdwn
@@ -1,20 +0,0 @@-What steps will reproduce the problem?--- rm -rf ~/.ghc/ && cabal update && cabal install git-annex --bindir=$HOME/bin--What is the expected output? What do you see instead?--- I would like to have the latest release installed--What version of git-annex are you using? On what operating system?--- git-annex-3.20121112-- Ubuntu 12.04 LTS-- The Glorious Glasgow Haskell Compilation System, version 7.4.1--Please provide any additional information below.--I use it heavily on 4 machines since a month and I really like it.--> closing since this is a cabal library problem, and not something that-> can be fixed by any change to git-annex. [[done]] --[[Joey]] 
− doc/bugs/Internal_Server_Error:_Unknown_UUID.mdwn
@@ -1,37 +0,0 @@-### Please describe the problem.--One of my repositories has no name:-http://screencast.com/t/3OjxFzpz--And when I try to disable it I get this error:--    Internal Server Error-    Unknown UUID--When I try to delete it I get this error:--    Internal Server Error-    unknown UUID; cannot modify--I think this was the result of adding a Local Computer Repo, and then that computer signed off.  Maybe.--### What version of git-annex are you using? On what operating system?--git-annex version 4.20130601-g2b6c3f2-Mac OS 10.7.5--### Please provide any additional information below.--Maybe it's a glitch that only will happen this once, the problem is I can't get rid of it!  Are there anyways of manually getting rid of a repo with uid?--> Also reported here:-> [[Missing_repo_uuid_after_local_pairing_with_older_annex]] and-> [[Internal_Server_Error_unknown_UUID;_cannot_modify]]-> and [[Local_network___40__ssh__41___fails_to_pair__47__sync]]-> and [[Internal_Server_Error:_Unknown_UUID]]-> --[[Joey]] --[[!meta title="local pairing leads to unknown UUID"]]--> This bug is [[fixed|done]]. The webapp will detect the problem and-> provides an interface to correct it. --[[Joey]]
− doc/bugs/Internal_Server_Error_unknown_UUID__59___cannot_modify.mdwn
@@ -1,26 +0,0 @@-### 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.-"""]]--> [[dup|done]] of [[Internal_Server_Error:_Unknown_UUID]] --[[Joey]] 
− doc/bugs/Internal_server_error_adding_USB_drive_on_OS_X.mdwn
@@ -1,25 +0,0 @@-What steps will reproduce the problem?--* Start with a clean setup.-* Allow webapp to start; use it to create annex in ~/Documents/annex That works.-* Go to add remote repo. Removable drive.-* Select "/Volumes/G-DRIVE slim". Click next.--What is the expected output? What do you see instead?-Expected is something like "done". What I see is--Internal Server Error--git config [Param "annex.uuid",Param "6898F314-7817-4CD5-B1C3-588C55522A3B"] failed--What version of git-annex are you using? On what operating system?--git-annex version 3.20130107, OS X Mountain Lion. No MacPorts/homebrew/fink installed. gcc / git are installed.--Please provide any additional information below.--Maybe something to do with the drive name having spaces? "/Volumes/git-annex" worked fine.--> Good thought in the comment. I was able to reproduce the failure-> if the removable drive already had an "annex" directory that was not-> a git repo. I've made it handle this case. [[done]] --[[Joey]] 
− doc/bugs/Is_there_any_way_to_rate_limit_uploads_to_an_S3_backend__63__.mdwn
@@ -1,19 +0,0 @@-What steps will reproduce the problem?--Adding files to a local annex set up to sync to a remote S3 one---What is the expected output? What do you see instead?--It syncs, but maxes out the uplink---What version of git-annex are you using? On what operating system?--3.20121112 on Debian testing---Please provide any additional information below.--The man page lists how to configure rate limiting for rsync, not sure how to do it for this-
− doc/bugs/Issue_on_OSX_with_some_system_limits.mdwn
@@ -1,26 +0,0 @@-I was dumping ~gigs of files of approximately 3-6megs a pop (my music collection) so I could track the files that I want to listen to when I'm on the go. I had the git watch command running from the assistant branch.--I was getting something along the lines of...--    /Users/jtang/annex/.git/annex/tmp/: openTempFile: resource exhausted (Too many open files)--and--    git-annex: createPipe: resource exhausted (Too many open files)--I also noticed that I somehow ended up with 256 ssh-agent's running on one of my machines, I'm not sure if the two issues are related or not, I had not noticed this type of behaviour up until recently.--Also this was appearing in the logs--    x00:annex jtang$ tail -f .git/annex/daemon.log-    (scanning...) Already up-to-date.-    kqueue: Too many open files--To be precise, I suspect that the kqueue limit is 256, I had 325 files in the 'queue', I ended up doing a _git annex add_ manually and all was fine.--[[!meta title="kqueue system limits"]]--> This affects BSD systems that use Kqueue. It no longer affects OSX,-> since we use FSEvents there instead. --[[Joey]] --[[!tag /design/assistant]]
− doc/bugs/It_is_very_easy_to_turn_git-annex_into_a_zombie.mdwn
@@ -1,25 +0,0 @@-What steps will reproduce the problem?--Run the git-annex assitant, and then "sudo kill" it.--What is the expected output? What do you see instead?--I expect it to die, instead I end up with:--    14604   ??  S      0:00.64 ga assistant-    14623   ??  Z      0:00.00 (git)-    14624   ??  Z      0:00.00 (git)-    14936   ??  Z      0:00.00 (git-annex)--The only way to clear these zombies is to reboot.  Perhaps there is some resource not being correctly terminated under exceptional conditions?--Note that on OpenIndiana the problem is even more severe: Aborting git-annex at the wrong time leaves behind both zombie processes and lock files which cause the machine to suddenly halt if I try to access them in any way (via mv, rsync, etc)!--What version of git-annex are you using? On what operating system?--4d1e0c9 on OS X 10.8.2.--Please provide any additional information below.--[[!meta title="strange OSX behavior when killed"]]-[[!tag /design/assistant/OSX moreinfo]]
− doc/bugs/JSON_output_broken_with___34__git_annex_sync__34__.mdwn
@@ -1,21 +0,0 @@-What steps will reproduce the problem?--    $ git annex -j sync | json_reformat--What is the expected output? What do you see instead?--Expecting valid JSON, instead this happens:--    $ git annex -j sync | json_reformat-    lexical error: invalid char in json text.-              {"command":"commit","file":""# On branch master nothing to c-                         (right here) ------^-    $---What version of git-annex are you using? On what operating system?--Newest standalone (3.20121126), Linux i386. The "json_reformat" program is from the "yajl-tools" .deb package.--> [[done]]; I've updated the --json documentation to note that it only-> works with some query commands. --[[Joey]] 
− doc/bugs/Killing_the_assistant_daemon_leaves_ssh_mux_sessions_behind.mdwn
@@ -1,38 +0,0 @@-### Please describe the problem.--If the assistant daemon is killed, ssh mux sessions are left behind. Incidentally there may be a better way to stop the assistant daemon besides "killall git-annex" but I haven't found it in the docs.--### What steps will reproduce the problem?--[[!format sh """-$ ps aux | grep mux-$ git-annex assistant-$ date > fromwintermute # Just causing a change that needs to be pushed, any will do-$ ps aux | grep mux-pedrocr  32665  0.0  0.0   6396   948 ?        Ss   11:06   0:00 ssh: /home/pedrocr/testsync/.git/annex/ssh/golias.git-annex [mux]-$ killall git-annex-$ ps aux | grep mux-pedrocr  32665  0.0  0.0   6396   948 ?        Ss   11:06   0:00 ssh: /home/pedrocr/testsync/.git/annex/ssh/golias.git-annex [mux]-"""]]--### What version of git-annex are you using? On what operating system?--[[!format sh """-$ git annex version-git-annex version: 4.20130516.1-build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP-local repository version: 4-default repository version: 3-supported repository versions: 3 4-upgrade supported from repository versions: 0 1 2-$ lsb_release -a-No LSB modules are available.-Distributor ID:	Ubuntu-Description:	Ubuntu 12.04.2 LTS-Release:	12.04-Codename:	precise-"""]]----> [[done]] --[[Joey]]
− doc/bugs/Last_two_versions_didn__39__t_show_up_on_hackage.mdwn
@@ -1,11 +0,0 @@-### Please describe the problem.-I don't know how the packages at hackage are managed, but the last version there is 4.20130601 while in the mean time there have been two other releases.--### What steps will reproduce the problem?-Check [[http://hackage.haskell.org/packages/archive/git-annex/]]--> Thanks for reporting. Turns out that hackage was rejecting-> it since it doesn't know about the OS name for the hurd. Since I -> am not sure I have the right name either, I have removed those bits-> and re-uploaded.-> [[done]] --[[Joey]] 
− doc/bugs/Local_files_not_found.mdwn
@@ -1,50 +0,0 @@-### Please describe the problem.--I have a git annex repo which cannot find the files with whereis, even though the files and contents are there. I have changed ownership of all the files. I am not sure, but I think that is when the problem was introduced. The current user that is invoking git annex owns and can access all files in the repository/annex)--Creating a new repository from scratch works just fine.---### What steps will reproduce the problem?--    # (in my current, somehow corrupt annex)-    $ echo hello > testfile-    $ git annex add testfile-    add testfile (checksum...) ok-    (Recording state in git...)-    $ git commit -am testfile-    [master 73ed120] testfile-     1 file changed, 1 insertion(+)-     create mode 120000 testfile-    $ git annex whereis testfile-    whereis testfile (0 copies) failed-    git-annex: whereis: 1 failed-    -    -    # The contents exists though-    $ ls -l testfile-    lrwxrwxrwx 1 ftp ftp 176 May 13 09:43 testfile -> .git/annex/objects/P5/4q/SHA256-s6--5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03/SHA256-s6--5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03-    $ cat .git/annex/objects/P5/4q/SHA256-s6--5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03/SHA256-s6--5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03-    hello-    $ sha256sum testfile-    5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03  testfile---    # the file can be found when unlocking/locking-    $ git annex unlock testfile-    unlock testfile (copying...) ok-    $ git annex lock testfile-    lock testfile ok-    (Recording state in git...)--### What version of git-annex are you using? On what operating system?-I ran Debian squeeze, with git annex 3.20120629~bpo60+2 when the problem was introduced. I just upgraded to wheezy, but the same problem exists with 3.20120629 from wheezy.--I also manually installed 4.20130501 from unstable, which also showed the same problem.---### Please provide any additional information below.--I am not sure what information to supply, please provide pointers on what information might be useful.--> [[done]] per comment --[[Joey]]
− doc/bugs/Local_network___40__ssh__41___fails_to_pair__47__sync.mdwn
@@ -1,175 +0,0 @@-### Please describe the problem.-I am trying to set out two computers on the same network to synchronise.--### What steps will reproduce the problem?-Install Git-Annex. Start the webapp. Try to connect. Enter a secret phrase on both. The Mythbuntu machine shows "Failed to sync with Inspiron 14z" (the laptop). The laptop shows "Pairing in progress" forever.--The machines can normally connect together passwordlessly through ssh with public key encryption. --### What version of git-annex are you using? On what operating system?-Ubuntu Raring Version: 3.20121112ubuntu2 from the repos on my laptop.  Install version 4.20130627 from the PPA on Mythbuntu Precise (which I use as a home server).--### Please provide any additional information below.-From the the laptop, where I started the pairing:-[[!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 --(process:3084): GLib-CRITICAL **: g_slice_set_config: assertion `sys_page_size == 0' failed--** (firefox:3084): WARNING **: Failed to find domain member of JSON manifest-Running global cleanup code from study base classes.-(Recording state in git...)--Launching web browser on file:///tmp/webapp3075.html-(scanning...) -  dbus failed; falling back to mtab polling (ClientError {clientErrorMessage = "Call failed: The name org.gtk.Private.GduVolumeMonitor was not provided by any .service files", clientErrorFatal = False})-(started...) Generating public/private rsa key pair.-Your identification has been saved in /tmp/git-annex-keygen3075.0/key.-Your public key has been saved in /tmp/git-annex-keygen3075.0/key.pub.-The key fingerprint is:-79:00:67:a4:f0:5f:62:26:78:ed:09:97:e4:c4:dd:56 aaron@Inspiron-14z-The key's randomart image is:-+--[ RSA 2048]----+-|    . .o*. . .E  |-|     + X... o    |-|    . * X ..     |-|     . O *       |-|        S .      |-|         .       |-|                 |-|                 |-|                 |-+-----------------+-Control socket connect(/home/shared/annex/.git/annex/ssh/mythbuntu@git-annex-mythbuntu-server.local-mythbuntu): Connection refused-Failed to connect to new control master-warning: no common commits--  Remote mythbuntuserver.local_annex does not have git-annex installed; setting remote.mythbuntuserver.local_annex.annex-ignore-Already up-to-date.-Counting objects: 13, done.-Delta compression using up to 4 threads.-Compressing objects: 100% (9/9), done.-Writing objects: 100% (11/11), 1.06 KiB, done.-Total 11 (delta 2), reused 0 (delta 0)-To ssh://mythbuntu@git-annex-mythbuntu-server.local-mythbuntu/~/annex/- * [new branch]      git-annex -> synced/git-annex- * [new branch]      master -> synced/master-Already up-to-date!-Merge made by the 'recursive' strategy.-Already up-to-date.-Already up-to-date.-Counting objects: 2, done.-Delta compression using up to 4 threads.-Compressing objects: 100% (2/2), done.-Writing objects: 100% (2/2), 326 bytes, done.-Total 2 (delta 1), reused 0 (delta 0)-To ssh://mythbuntu@git-annex-mythbuntu-server.local-mythbuntu/~/annex/-   82bf946..dfe0bd1  master -> synced/master-Already up-to-date.-SendMessage (77594660, 0x101f, (nil), (nil))-SendMessage (0, 0x1203, (nil), 0x7fffc68a1850)-SendMessage (0, 0x1204, (nil), 0x7fffc68a1850)-SendMessage (0, 0x1203, 0x1, 0x7fffc68a1850)-SendMessage (0, 0x1204, 0x1, 0x7fffc68a1850)-SendMessage (0, 0x1203, 0x2, 0x7fffc68a1850)-SendMessage (0, 0x1204, 0x2, 0x7fffc68a1850)-SendMessage (0, 0x1203, 0x3, 0x7fffc68a1850)-SendMessage (0, 0x1204, 0x3, 0x7fffc68a1850)-SendMessage (0, 0x1203, 0x4, 0x7fffc68a1850)-SendMessage (0, 0x1204, 0x4, 0x7fffc68a1850)-SendMessage (77594660, 0x101f, (nil), (nil))-SendMessage (0, 0x1203, (nil), 0x7fffc68a1810)-SendMessage (0, 0x1204, (nil), 0x7fffc68a1810)-SendMessage (0, 0x1203, 0x1, 0x7fffc68a1810)-SendMessage (0, 0x1204, 0x1, 0x7fffc68a1810)-SendMessage (0, 0x1203, 0x2, 0x7fffc68a1810)-SendMessage (0, 0x1204, 0x2, 0x7fffc68a1810)-SendMessage (0, 0x1203, 0x3, 0x7fffc68a1810)-SendMessage (0, 0x1204, 0x3, 0x7fffc68a1810)-SendMessage (0, 0x1203, 0x4, 0x7fffc68a1810)-SendMessage (0, 0x1204, 0x4, 0x7fffc68a1810)-SendMessage (77594660, 0x101f, (nil), (nil))-SendMessage (0, 0x1203, (nil), 0x7fffc68a2920)-SendMessage (0, 0x1204, (nil), 0x7fffc68a2920)-SendMessage (0, 0x1203, 0x1, 0x7fffc68a2920)-SendMessage (0, 0x1204, 0x1, 0x7fffc68a2920)-SendMessage (0, 0x1203, 0x2, 0x7fffc68a2920)-SendMessage (0, 0x1204, 0x2, 0x7fffc68a2920)-SendMessage (0, 0x1203, 0x3, 0x7fffc68a2920)-SendMessage (0, 0x1204, 0x3, 0x7fffc68a2920)-SendMessage (0, 0x1203, 0x4, 0x7fffc68a2920)-SendMessage (0, 0x1204, 0x4, 0x7fffc68a2920)-Redirection loop trying to set HTTPS on:-  http://www.aol.com/favicon.ico-(falling back to HTTP)-SendMessage (77594652, 0x444, 0x1, 0x3652e00)-SendMessage (77594652, 0x444, 0x1, 0x3647de0)-SendMessage (77594652, 0x444, 0x1, 0x3667a80)-SendMessage (77594652, 0x444, 0x1, 0x3667a80)--# End of transcript or log.-# End of transcript or log.-"""]]--On the Mythbuntu machine:-[[!format sh """-$ git-annex webapp-Launching web browser on file:///tmp/webapp8399.html-(Recording state in git...)-"""]]--Unless I'm going mad, there doesn't seem to be a daemon.log on my laptop.--Daemon.log on the Mythbuntu machine:-[[!format sh """-[2013-07-14 10:38:56 BST] main: starting assistant version 4.20130627-(scanning...) [2013-07-14 10:38:56 BST] Watcher: Performing startup scan-(started...) [2013-07-14 10:38:57 BST] PairListener: aaron@Inspiron-14z:/home/shared/annex is sending a pair request.-Generating public/private rsa key pair.-Your identification has been saved in /tmp/git-annex-keygen.0/key.-Your public key has been saved in /tmp/git-annex-keygen.0/key.pub.-The key fingerprint is:-bb:8c:66:05:22:8e:fa:e1:10:33:6d:cb:d6:57:e2:47 mythbuntu@mythbuntu-server-The key's randomart image is:-+--[ RSA 2048]----+-|                 |-|                 |-|                 |-| .. . .          |-|+oo. ...E        |-|.*.o . +..       |-|o = . o.o        |-|.+ . .o+ .       |-| .o  o. o        |-+-----------------+-[2013-07-14 10:39:13 BST] main: Pairing with aaron@Inspiron-14z:/home/shared/annex in progress-ssh: connect to host Inspiron-14z.local port 22: Connection refused-ssh: connect to host Inspiron-14z.local port 22: Connection refused-fatal: The remote end hung up unexpectedly-[2013-07-14 10:39:17 BST] PairListener: Syncing with Inspiron14z.local__home_shared_annex -ssh: connect to host Inspiron-14z.local port 22: Connection refused-fatal: The remote end hung up unexpectedly-ssh: connect to host Inspiron-14z.local port 22: Connection refused-fatal: The remote end hung up unexpectedly-ssh: connect to host Inspiron-14z.local port 22: Connection refused-fatal: The remote end hung up unexpectedly-Already up-to-date.-Already up-to-date.-ssh: connect to host Inspiron-14z.local port 22: Connection refused-fatal: The remote end hung up unexpectedly-ssh: connect to host Inspiron-14z.local port 22: Connection refused-fatal: The remote end hung up unexpectedly-Updating 82bf946..dfe0bd1-Fast-forward-[2013-07-14 10:39:56 BST] Pusher: Syncing with Inspiron14z.local__home_shared_annex -ssh: connect to host Inspiron-14z.local port 22: Connection refused-fatal: The remote end hung up unexpectedly-ssh: connect to host Inspiron-14z.local port 22: Connection refused-fatal: The remote end hung up unexpectedly-ssh: connect to host Inspiron-14z.local port 22: Connection refused-fatal: The remote end hung up unexpectedly-ssh: connect to host Inspiron-14z.local port 22: Connection refused-fatal: The remote end hung up unexpectedly-"""]]
− doc/bugs/Local_pairing_fails:_PairListener_crashed.mdwn
@@ -1,18 +0,0 @@-What steps will reproduce the problem?--Attempting to pair between a local repository and a repository on a remote computer on my LAN. Pairing is initiated from my local machine and I'm interacting with the webapp on the remote machine via firefox running over an ssh -X connection. Pairing appears to work up to a point: I enter the secret at one end, the pairing request shows up at the other end. I then enter the secret at that end.--What is the expected output? What do you see instead?--Pairing should complete successfully. Instead I get the error message "PairListener crashed: bad comment in public key", followed by the public key. The pairing process then does not move beyond the 'awaiting pairing' pages.--What version of git-annex are you using? On what operating system?--Local Machine: 3.20121127, Debian Wheezy/Sid (the only package from unstable is git-annex).-Remote Machine: 3.20121113, Arch Linux (I installed the version from: https://aur.archlinux.org/packages/git-annex-bin/, which is supposedly the same as above, but reports the version specified here).--Please provide any additional information below.--None as yet. Let me know if there are any log files, etc. that I can post.--> So it was the period in the hostname! [[fixed|done]] --[[Joey]]
− doc/bugs/Lost_S3_Remote.mdwn
@@ -1,59 +0,0 @@-Somehow I've lost my S3 remote... git-annex knows it's there, but its not associating it with the git remote in .git/config--    $ git-annex whereis pebuilder.iso -    whereis pebuilder.iso (3 copies) -      	3b6fc6f6-3025-11e1-b496-33bffbc0f3ed -- housebackup (external seagate drive on /mnt/back/RemoteStore)-   	6b1326d8-2abb-11e1-8f43-979159a7f900 -- synology-   	9b297772-2ab2-11e1-a86f-2fd669cb2417 -- Amazon S3-    ok--Amazon S3 is the description from the remote.  My .git/config file contains this block:--    [remote "cloud"]-      annex-s3 = true-      annex-uuid = 9b297772-2ab2-11e1-a86f-2fd669cb2417-      annex-cost = 70--The UUID matches... But I cannot access it... see below:--    [39532:39531 - 0:626] 08:20:38 [vivitron@tronlap:o +3] ~/annex/ISO -    $ git-annex get pebuilder.iso --from=cloud-    git-annex: there is no git remote named "cloud"-    -    [39532:39531 - 0:627] 08:20:56 [vivitron@tronlap:o +3] ~/annex/ISO -    $ git-annex get pebuilder.iso --from="Amazon S3"-    git-annex: there is no git remote named "Amazon S3"-    -    [39532:39531 - 0:628] 08:21:01 [vivitron@tronlap:o +3] ~/annex/ISO -    $ git-annex get pebuilder.iso --from=9b297772-2ab2-11e1-a86f-2fd669cb2417-    git-annex: there is no git remote named "9b297772-2ab2-11e1-a86f-2fd669cb2417"--    [39532:39531 - 0:629] 08:21:08 [vivitron@tronlap:o +3] ~/annex/ISO -    $ --git remote lists "cloud" as a remote:--    $ git remote-    all-    cloud-    cs-    es3-    origin--git-annex status lists S3 support:--    $ git-annex status-    supported backends: SHA256 SHA1 SHA512 SHA224 SHA384 SHA256E SHA1E SHA512E SHA224E SHA384E WORM URL-    supported remote types: git S3 bup directory rsync web hook----I appreciate any help....  I've tested versions 3.20111211, 3.20111231, and 3.20120105--    $ git --version-    git version 1.7.8.1----> [[done]]; I've fixed the build system so this confusing thing cannot-> happen anymore. --[[Joey]]
− doc/bugs/Lost_S3_Remote/comment_1_6e80e6db6671581d471fc9a54181c04c._comment
@@ -1,10 +0,0 @@-[[!comment format=mdwn- username="http://joey.kitenet.net/"- nickname="joey"- subject="comment 1"- date="2012-01-06T03:04:35Z"- content="""-Despite `status` listing S3 support, your git-annex is actually built with S3stub, probably because it failed to find the necessary S3 module at build time. Rebuild git-annex and watch closely, you'll see \"** building without S3 support\". Look above that for the error and fix it.--It was certianly a bug that it showed S3 as supported when built without it. I've fixed that.-"""]]
− doc/bugs/Lost_S3_Remote/comment_2_c99c65882a3924f4890e500f9492b442._comment
@@ -1,8 +0,0 @@-[[!comment format=mdwn- username="http://joey.kitenet.net/"- nickname="joey"- subject="comment 2"- date="2012-01-06T03:08:28Z"- content="""-BTW, you'll want to \"make clean\", since the S3stub hack symlinks a file into place and it will continue building with S3stub even if you fix the problem until you clean.-"""]]
− doc/bugs/Lost_S3_Remote/comment_3_1e434d5a20a692cd9dc7f6f8f20f30dd._comment
@@ -1,8 +0,0 @@-[[!comment format=mdwn- username="https://www.google.com/accounts/o8/id?id=AItOawkey8WuXUh_x5JC2c9_it1CYRnVTgdGu1M"- nickname="Dustin"- subject="Thank you!"- date="2012-01-06T03:38:27Z"- content="""-make clean and rebuild worked...  Thank you-"""]]
− doc/bugs/Makefile_is_missing_dependancies.mdwn
@@ -1,47 +0,0 @@-<pre>-From e45c73e66fc18d27bdf5797876fbeb07786a4af1 Mon Sep 17 00:00:00 2001-From: Jimmy Tang <jtang@tchpc.tcd.ie>-Date: Tue, 22 Mar 2011 22:24:07 +0000-Subject: [PATCH] Touch up Makefile to depend on StatFS.hs------ Makefile |    2 +-- 1 files changed, 1 insertions(+), 1 deletions(-)--diff --git a/Makefile b/Makefile-index 08e2f59..4ae8392 100644---- a/Makefile-+++ b/Makefile-@@ -15,7 +15,7 @@ SysConfig.hs: configure.hs TestConfig.hs-        hsc2hs $<-        perl -i -pe 's/^{-# INCLUDE.*//' $@- --$(bins): SysConfig.hs Touch.hs-+$(bins): SysConfig.hs Touch.hs StatFS.hs-        $(GHCMAKE) $@- - git-annex.1: doc/git-annex.mdwn--- -1.7.4.1--</pre>---StatFS.hs never gets depended on and compiled, the makefile was just missing something--> Thanks, [[done]]! Interested to hear if StatFS.hs works on OSX (no warning) or-> is a no-op (with warning). --[[Joey]] -->> ->> for now it gives a warning, it looks like it should be easy enough to add OSX->> support, I guess it's a case of just digging around documentation to find the equivalent->> calls/headers. I'll give it a go at making this feature work on OSX and get back to you.->> --<pre>-jtang@exia:~/develop/git-annex $ make-hsc2hs StatFS.hsc-StatFS.hsc:85:2: warning: #warning free space checking code not available for this OS-StatFS.hsc:85:2: warning: #warning free space checking code not available for this OS-StatFS.hsc:85:2: warning: #warning free space checking code not available for this OS-</pre>
− doc/bugs/Manual_content_mode_isn__39__t_manual.mdwn
@@ -1,89 +0,0 @@-### Please describe the problem.--The `manual` content mode doesn't follow the description provided in the help page, instead it seems to collect content.--### What steps will reproduce the problem?--1. Create a new git annex repository using the webapp, set the content type to `client`.-2. Create another repository, and set the content type to `manual`.-3. Copy something into the `client` repository.-4. It will be pushed/pulled into the `manual` repository.--### What version of git-annex are you using? On what operating system?--    git-annex version: 4.20130521-g25dba9d-    Ubuntu 13.04 x64.--### Please provide any additional information below.--I have also noticed very weird behaviour that I have been unable to replicate in testing, but I will describe the setup that it currently happens in:-I have 3x repositories, one a `client` repository, and the other two are set to `manual`. When put a new file into the `client` repository, it is pushed onto the two `manual` repositories. When these repositories have received it, the client drops the file and re-downloads it from one of the `manual` repositories. Once it's been pushed, deleted, and pulled, everything is happy... but the extra step makes no difference.--[[!format sh """-[2013-05-22 20:41:44 EST] main: starting assistant version 4.20130521-g25dba9d-[2013-05-22 20:41:44 EST] TransferScanner: Syncing with test3, test2 -Already up-to-date.--(scanning...) [2013-05-22 20:41:44 EST] Watcher: Performing startup scan-Already up-to-date.-Already up-to-date.---(started...) From /home/valorin/workspace/tmp/test3-   f285dc2..406c20c  git-annex  -> test3/git-annex-   cdf2ad3..508983c  master     -> test3/master-From /home/valorin/workspace/tmp/test2-   1e04829..1c03533  git-annex  -> test2/git-annex-   8ad4bd3..18a5408  master     -> test2/master-Updating 508983c..18a5408-Fast-forward-Already up-to-date.-To /home/valorin/workspace/tmp/test2-   4e49293..a66ce5d  git-annex -> synced/git-annex-   508983c..18a5408  master -> synced/master-To /home/valorin/workspace/tmp/test3-   4e49293..a66ce5d  git-annex -> synced/git-annex-   508983c..18a5408  master -> synced/master-Already up-to-date.-Already up-to-date.-[2013-05-22 20:42:07 EST] Committer: Adding Firefly S..acked.m4v--(merging test3/git-annex into git-annex...)-(merging test2/git-annex into git-annex...)-(Recording state in git...)-----add Firefly S01E03 Bushwhacked.m4v (checksum...) [2013-05-22 20:42:15 EST] Committer: Committing changes to git-[2013-05-22 20:42:15 EST] Pusher: Syncing with test3, test2 -Already up-to-date.-To /home/valorin/workspace/tmp/test2-   a66ce5d..a6773dd  git-annex -> synced/git-annex-   18a5408..f9e7692  master -> synced/master-To /home/valorin/workspace/tmp/test3-   a66ce5d..a6773dd  git-annex -> synced/git-annex-   18a5408..f9e7692  master -> synced/master-Already up-to-date.-Already up-to-date.-[2013-05-22 20:42:26 EST] Transferrer: Uploaded Firefly S..acked.m4v-[2013-05-22 20:42:26 EST] Pusher: Syncing with test3, test2 -To /home/valorin/workspace/tmp/test3-   a6773dd..c35f992  git-annex -> synced/git-annex-To /home/valorin/workspace/tmp/test2-   a6773dd..c35f992  git-annex -> synced/git-annex-[2013-05-22 20:42:35 EST] Transferrer: Uploaded Firefly S..acked.m4v-[2013-05-22 20:42:35 EST] Pusher: Syncing with test3, test2 -To /home/valorin/workspace/tmp/test3-   c35f992..9e47813  git-annex -> synced/git-annex-To /home/valorin/workspace/tmp/test2-   c35f992..9e47813  git-annex -> synced/git-annex-[2013-05-22 20:42:44 EST] Pusher: Syncing with test3, test2 -Everything up-to-date-Everything up-to-date-"""]]--> It turns out there was a bug in the preferred content expression parser,-> that made it parse the expression for manual mode (but I think no other standard-> expression) quite wrong, as if it had parens in the wrong place. This explains-> the broken behavior. [[fixed|done]] --[[Joey]]
− doc/bugs/Manual_mode_weirdness.mdwn
@@ -1,37 +0,0 @@-### Please describe the problem.--I have an annex which contains all my photos. There are repositories on my laptop and my home server as well as an s3 backup (for which syncing is currently disabled). I switched the copy on my laptop to manual mode via 'git annex vicfg' (this correctly shows up in the webapp). I then proceeded to drop several folders (each containing a year's worth of photos). This works fine, however the assistant immediately starts downloading the dropped files from the server! Numcopies is set to 1 and the problem exists with the server in both the 'transfer' and 'backup' groups (haven't tried others).--### What steps will reproduce the problem?--1. Create a repo with some files.-2. Create a bare-git remote on another machine.-3. Make sure the assistant is running for the repo in question. -4. Switch your local copy to manual mode.-5. Drop some files.-6. Watch as the assistant re-downloads them!--### What version of git-annex are you using? On what operating system?--git-annex version: 4.20130501-local repository version: unknown-default repository version: 3-supported repository versions: 3 4-upgrade supported from repository versions: 0 1 2-build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP--Debian Testing/Sid.--### Please provide any additional information below.--If it's relevant I switched the local repository to indirect mode by manually shutting down the assistant and running 'git annex indirect' before restarting the assistant. This was done before any of the steps above.--[[!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.-"""]]--> [[done]] --[[Joey]] 
− doc/bugs/Missing_repo_uuid_after_local_pairing_with_older_annex.mdwn
@@ -1,31 +0,0 @@-### 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.-"""]]--> Others are reporting what seems to be the same problem here:-> [[Internal_Server_Error:_Unknown_UUID]].-> -> [[dup|done]] --[[Joey]]
− doc/bugs/More_sync__39__ing_weirdness_with_the_assistant_branch_on_OSX.mdwn
@@ -1,15 +0,0 @@-Running the 'assistant' branch, I occassionally get--To myhost1:/Users/jtang/annex- ! [rejected]        master -> synced/master (non-fast-forward)-error: failed to push some refs to 'myhost1:/Users/jtang/annex'-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.-(Recording state in git...)--manually running a 'git annex sync' usually fixes it, I guess once the sync command runs periodically this problem will go away, is this even OSX specific? I don't quite get the behaviour that is described in [[design/assistant/blog/day_15__its_aliiive]].--> With my changes today, I've seen it successfully recover from this-> situation. [[done]] --[[Joey]] 
− doc/bugs/Most_recent_git-annex_will_not_build_on_OpenIndiana.mdwn
@@ -1,36 +0,0 @@-Version 3.20120825 built on my OpenIndiana system just fine, but the latest release gives me this during setup:--    Linking /tmp/git-annex-3.20121017-13013/git-annex-3.20121017/dist/setup/setup ...-      checking version... 3.20121017-      checking git... yes-      checking git version... 1.7.8.2-      checking cp -a... yes-      checking cp -p... yes-      checking cp --reflink=auto... yes-      checking uuid generator... uuid -m-      checking xargs -0... yes-      checking rsync... yes-      checking curl... yes-      checking wget... yes-      checking bup... no-      checking gpg... no-      checking lsof... no-      checking ssh connection caching... yes-      checking sha1... sha1sum-      checking sha256... sha256sum-      checking sha512... sha512sum-      checking sha224... sha224sum-      checking sha384... sha384sum-    Configuring git-annex-3.20121017...-    Building git-annex-3.20121017...-    Preprocessing executable 'git-annex' for git-annex-3.20121017...-    In file included from Mounts.hsc:25:0:-    Utility/libmounts.h:13:3: warning: #warning mounts listing code not available for this OS [-Wcpp]--    Utility/libkqueue.c:13:23:-         fatal error: sys/event.h: No such file or directory-    compilation terminated.--Is it possible to remove the new requirement?  Thanks!--> [[done]] --[[Joey]]
− doc/bugs/Name_scheme_does_not_follow_git__39__s_rules.mdwn
@@ -1,31 +0,0 @@-I can create an annex remote named 'test:/test'. git itself does not allow colons in names, though. The name scheme for an annex should be the same as for git repos themselves.--> What do you mean by "an annex remote"? git-annex uses the same-> remotes configuration as does git. If you put invalid-> stuff in .git/config it might handle it slightly different than -> git, I don't know. Examples needed. --[[Joey]] -->> What I mean is this:--    % cd 1-    % git init-    % git annex init "my:colon"-    % [...]-    % cd ../2-    % git init-    % git annex init "second"-    % git remote add "my:colon" ../1-    fatal: 'my:colon' is not a valid remote name-->> -- RichiH-->>> I see.. Git annex init does not specifiy a remote's name, it specifies->>> an arbitrary human-readable description of the repository, which will->>> be displayed when there is no configured remote corresponding to the->>> repository. So this is not a bug unless some documentation of that is->>> unclear. --[[Joey]] -->>>> Nobody spoke up to say it's unclear, so closing as PEBKAC :)->>>> [[done]] --[[Joey]] -->>>>> I still think git-annex should follow the same rules as git in this regard, but if your design decision is different, I won't try to argue the point :) -- RichiH
− doc/bugs/Need_to_manually_install_c2hs_-_3.20121127_and_previous.mdwn
@@ -1,37 +0,0 @@-What steps will reproduce the problem?--Install git-annex via cabal - either from Hackage or as a manual install. (i.e. <http://git-annex.branchable.com/install/cabal/>)--What is the expected output? What do you see instead?--Expect a clean install.--However, get the following error:--      Configuring gnuidn-0.2...-      cabal: The program c2hs is required but it could not be found.-      Failed to install gnuidn-0.2-      cabal: Error: some packages failed to install:-      git-annex-3.20121127 depends on gnuidn-0.2 which failed to install.-      gnuidn-0.2 failed during the configure step. The exception was:-      ExitFailure 1-      network-protocol-xmpp-0.4.4 depends on gnuidn-0.2 which failed to install.--What version of git-annex are you using? On what operating system?--git-annex: 3.20121127 (and previous versions)--OS: Mac OSX 10.6.8---Please provide any additional information below.--The fix seems as easy as--    cabal install c2hs--Should c2hs be included as a dep got git-annex or is this a bug in gnuidn?--> Apparently cabal does not support automatically installing programs-> needed for the build. I've updated the cabal installation instructions-> to document the need to install c2hs. [[done]] --[[Joey]]
− doc/bugs/No_easy_way_to_re-inject_a_file_into_an_annex.mdwn
@@ -1,12 +0,0 @@-My local git index got corrupted and I needed to clone and annex get all data from my main repo.--Some files were never copied anywhere so I am stuck with symlinks to nowhere.--I tried to copy over the symlink with a copy of the actual file, which did not work. Trying to unlock, copying over the symlink, and relock did not work, either.--Then, I copied the annex object to the correct place in .git/annex/objects/..., set all modes, re-ran fsck and the file re-appeared.---Long story short, I think there should be a `git annex reinject $file` or similar which will take a file, either one replacing the symlink or with an arbitrary path, and put it into the correct place in the object store. Called normally, it should reject all reinjects where the checksum does not match. With --force, this should be overridden. For reasons of safety, WORM should always require --force.--> [[closing|done]], seems addressed --[[Joey]] 
− doc/bugs/No_progress_bars_with_S3.mdwn
@@ -1,26 +0,0 @@-## What steps will reproduce the problem?--Add new data to a repository with an S3 special remote. Monitor the repository with the web app.---## What is the expected output? What do you see instead?--I expect a changing status bar and percentage. Instead I see no changes when an upload becomes active.---## What version of git-annex are you using? On what operating system?--3.20130102 on Arch 64-bit.---## Please provide any additional information below.---When uploading local data to an S3 remote, I see no progress bars. The progress bar area on active uploads stays the same grey as the bar on queued uploads. The status does not change from "0% of...". The uploads are completing, but this makes it very difficult to judge their activity.--The only remotes I currently have setup are S3 special remotes, so I cannot say whether progress bars are working for uploads to other remote types.--> [[done]], this turned out to be a confusion in the progress code;-> parts were expecting a full number of bytes since the start, while-> other parts were sending the number of bytes in a chunk. Result was-> progress bars stuck at 0% often. --[[Joey]]
− doc/bugs/No_version_information_from_cli.mdwn
@@ -1,18 +0,0 @@-git-annex does not listen to -v, --version or version.--At the very least, it should return both the version of the binary and the version of the object store it supports.-If it supports several annex versions, they should be listed in a comma-separated fashion.-If git-annex is called from within an annex, it should print the version of the local object store.--Sample:--    % git annex version-    git-annex version               : 0.24-    default object store version    : 3-    supported object store versions : 2,3-    local object store version      : 2-    % --The above might look like overkill, but it's in a form that will, most likely, never need to be extended.--> Great idea, [[done]] --[[Joey]] 
− doc/bugs/OSX_alias_permissions_and_versions_problem.mdwn
@@ -1,37 +0,0 @@-What steps will reproduce the problem?--Use assistant and create repository the a folder in home dir.-Use textedit and save a new txt to the repository folder. --What is the expected output? What do you see instead?--The alias solution is broken. It should work more like Dropbox.-Textedit saves the file initially, but it is immediately locked.-Since it autosaves, it asks to unlock or duplicate.-Then gives the error:-"The file “Untitled 16.txt” cannot be unlocked."--If the file exists:-The document “Untitled 14” could not be saved as “Untitled 14.txt”. You don’t have permission.--If you open a file from the repository (now replaced by a symlink) with textedit, there are other problems:-- The filename will not be correct (will show the sha hash). -- It will ask to unlock, then give the error "You don’t have permission to write to the folder that the file “SHA256E-s8--8985d9832de2e28b5e1af64258c391a34d7528709ef916bac496e698c139020c.txt” is in."--What version of git-annex are you using? On what operating system?--OSX Lion-git-annex version: 3.20120924--Please provide any additional information below.--Even if you fix these problems, automatic versioning in lion will probably don't work, and the symlinks seem a hackish solution and don't seem intuitive or easy to the end user. -The sync should be transparent but it's not, and it's error prone. It would even be best to keep file copies in the git repo and sync them with the original folder than make symlinks.--Dropbox even allows to put a symlink in the dropbox directory, and it will sync the file. --[[!tag /design/assistant/OSX]]--> Now the assistant creates new repositories using direct mode on OSX.-> In direct mode, there is no locking of files; they can be modified-> directly. [[done]] --[[Joey]]
− doc/bugs/OSX_app_issues.mdwn
@@ -1,6 +0,0 @@-This is a collection of problem reports for the standalone OSX app.-If you have a problem using it, post it here. --[[Joey]] --(Some things that should be fixed now have been moved to [[old]].)--[[!tag /design/assistant/OSX]]
− doc/bugs/OSX_app_issues/comment_10_54d8f3e429df9a9958370635c890abf0._comment
@@ -1,11 +0,0 @@-[[!comment format=mdwn- username="http://joeyh.name/"- ip="4.154.3.194"- subject="comment 10"- date="2013-01-19T16:13:20Z"- content="""-The app uses the version of git included in it, because using the system's installed version if there is one is likely to run into other version incompatabilities. --You can either install git-annex using cabal and homebrew, as documented, or you could go in and delete-all the git programs out of the app, and then it'd use the system's git stuff instead.-"""]]
− doc/bugs/OSX_app_issues/comment_10_6d23232fbb15d0ee3ab532a4884f81ed._comment
@@ -1,10 +0,0 @@-[[!comment format=mdwn- username="http://joeyh.name/"- nickname="joey"- subject="comment 10"- date="2013-04-16T17:14:13Z"- content="""-@Jeremy, it's been a long time since anyone reported having the \"LSOpenURLsWithRole()\". It seemed to go away when the dmg was fixed to include all the necessary libraries. So my guess is you installed it wrong, somehow, and perhaps it's not finding those libraries that are part of the dmg.--You should be able to start the assistant by running it directly from the dmg.-"""]]
− doc/bugs/OSX_app_issues/comment_11_5db2baa771fd01a284eac8a16c1c8c67._comment
@@ -1,8 +0,0 @@-[[!comment format=mdwn- username="https://www.google.com/accounts/o8/id?id=AItOawlkAghrKEvslMcV2INKUhtPPMsfnzQyyd8"- nickname="Jeremy"- subject="comment 11"- date="2013-04-17T02:02:00Z"- content="""-@joey, figured it out. There was a program added to the startup list, presumably from when I ran things from the dmg a while ago. Once I delete that, it started fine. Of course, I forgot to write down the name of the program... I remember it had an LW in the name.-"""]]
− doc/bugs/OSX_app_issues/comment_11_bb2ceb95a844449795addee6986d0763._comment
@@ -1,26 +0,0 @@-[[!comment format=mdwn- username="https://www.google.com/accounts/o8/id?id=AItOawlYy4BrJyV1PdfqzevCVziXRp89iUH6Xzw"- nickname="Christopher"- subject="Code signing errors in log on starting git-annex.app"- date="2013-01-19T22:30:32Z"- content="""-When I run via the App and set up a fresh repo, i get some Console.app spam (looks like one per file added to the repo dir... or maybe one per git command?):--    2013-01-19 2:44:55.000 PM kernel[0]: CODE SIGNING: cs_invalid_page(0x1008b4000): p=73995[git] clearing CS_VALID-    2013-01-19 2:44:55.000 PM kernel[0]: CODE SIGNING: cs_invalid_page(0x10f99e000): p=73996[git] clearing CS_VALID-    2013-01-19 2:44:55.000 PM kernel[0]: CODE SIGNING: cs_invalid_page(0x102b44000): p=73997[git] clearing CS_VALID-    2013-01-19 2:44:55.000 PM kernel[0]: CODE SIGNING: cs_invalid_page(0x1029f4000): p=73998[git] clearing CS_VALID-    ...--and nothing seems to work. The page address and the pid increment steadily with each line.  I'm using 10.8.2 (12C60) on a Mac Pro, and grabbed:--     /git-annex/OSX/current/10.8.2_Mountain_Lion/git-annex.dmg.bz2	--(published 14-Jan-2013 15:19)--It seems to be a code signing issue, perhaps with the vendored git binaries. While things are sort-of working, the web app shows the files flying by really fast. --Using a fresh repo via `git annex webapp` works great (I built that after much teeth-knashing, brew install/link cycles, and then cabal install git-annex). --I am very excited for this to work, this is exactly what I've been waiting for to replace dropbox. Came very close to writing it myself a few times (and in Haskell no less!!). -"""]]
− doc/bugs/OSX_app_issues/comment_12_62170597c7f441d84d48986857998858._comment
@@ -1,10 +0,0 @@-[[!comment format=mdwn- username="https://www.google.com/accounts/o8/id?id=AItOawkCw26IdxXXPBoLcZsQFslM67OJSJynb1w"- nickname="Alexander"- subject="standalone app dmg won't open in OSX 10.8.3"- date="2013-04-29T18:05:54Z"- content="""-I downloaded the app build from [http://downloads.kitenet.net/git-annex/OSX/current/10.8.2_Mountain_Lion/](http://downloads.kitenet.net/git-annex/OSX/current/10.8.2_Mountain_Lion/) and unpacked it, but the .dmg won't open. I can run other dmg's successfully. --Trying to install git-annex via cabal on the same machine led to this issue: [http://git-annex.branchable.com/tips/Building_git-annex_on_Debian_OR___37____164____35____34____164____37____38____34____35___Haskell__33__/#comment-7cc94df1bf9a75a6d03369f3897d6816](http://git-annex.branchable.com/tips/Building_git-annex_on_Debian_OR___37____164____35____34____164____37____38____34____35___Haskell__33__/#comment-7cc94df1bf9a75a6d03369f3897d6816)-"""]]
− doc/bugs/OSX_app_issues/comment_12_f3bc5a4e4895ac9351786f0bdd8005ba._comment
@@ -1,11 +0,0 @@-[[!comment format=mdwn- username="https://www.google.com/accounts/o8/id?id=AItOawmYiJgOvC4IDYkr2KIjMlfVD9r_1Sij_jY"- nickname="Douglas"- subject="Error creating remote repository using ssh on OSX"- date="2013-01-25T13:18:40Z"- content="""-There is an issue with creating remote repositories using ssh (the problem may require using a different account name.) I filed the following bug:---<http://git-annex.branchable.com/bugs/Error_creating_remote_repository_using_ssh_on_OSX/>-"""]]
− doc/bugs/OSX_app_issues/comment_2_fd560811c57df5cbc3976639642b8b19._comment
@@ -1,8 +0,0 @@-[[!comment format=mdwn- username="https://www.google.com/accounts/o8/id?id=AItOawkN91jAhoesnVI9TtWANaBPaYjd1V9Pag8"- nickname="Benjamin"- subject="Package for older OS X"- date="2012-11-17T12:36:45Z"- content="""-Is there an option to provide application bundle for older versions of OS X? The last time I tried the bundle wouldn't work under 10.5. If no specific features from newer OS X versions are required, it could be enough to add a simple switch when building.-"""]]
− doc/bugs/OSX_app_issues/comment_7_93e0bb53ac2d7daef53426fbdc5f92d9._comment
@@ -1,15 +0,0 @@-[[!comment format=mdwn- username="https://www.google.com/accounts/o8/id?id=AItOawkurjhi0CRJvgm7QNaZDWS9hitBtavqIpc"- nickname="Bret"- subject="git-annex.app Not working on 32 bit machines"- date="2012-11-03T19:18:47Z"- content="""-I tried running the git-annex.app on my Core Duo Macbook pro, and it does not run at all.  I get an error on my system.log--`Nov  3 12:13:26 Bret-Mac [0x0-0x15015].com.branchable.git-annex[155]: /Applications/git-annex.app/Contents/MacOS/runshell: line 52: /Applications/git-annex.app/Contents/MacOS/bin/git-annex: Bad CPU type in executable-Nov  3 12:13:26 Bret-Mac com.apple.launchd.peruser.501[92] ([0x0-0x15015].com.branchable.git-annex[155]): Exited with exit code: 1`--It works on my 64 bit machine, and this has become quite the problem for a while now, where people with newer macs dont compile back for a 32bit machine.  --Is there any hope for a pre-compiled binary that works on a 32 bit machine?-"""]]
− doc/bugs/OSX_app_issues/comment_8_141eac2f3fb25fe18b4268786f00ad6a._comment
@@ -1,8 +0,0 @@-[[!comment format=mdwn- username="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus"- nickname="Jimmy"- subject="comment 8"- date="2012-11-07T16:08:00Z"- content="""-I've been updating my haskell platform install recently, i used to try and get the builder to spit out 32/64bit binaries, but recently it's just become too messy, I've just migrated to a full 64bit build system. I'm afraid I won't be able to  provide 32bit builds any more.-"""]]
− doc/bugs/OSX_app_issues/comment_8_f4d5b2645d7f29b80925159efb94a998._comment
@@ -1,8 +0,0 @@-[[!comment format=mdwn- username="https://www.google.com/accounts/o8/id?id=AItOawmOsimKUgz6rxpmsS_nrBQGavEYyUpDlsE"- nickname="Tim"- subject="OS X 10.8.2"- date="2013-01-11T00:07:54Z"- content="""-Double click on the app, give permission for it to run and ... nothing-"""]]
− doc/bugs/OSX_app_issues/comment_9_2e6dfca0fd8df04066769653724eae28._comment
@@ -1,17 +0,0 @@-[[!comment format=mdwn- username="https://www.google.com/accounts/o8/id?id=AItOawmRFKwny4rArBaz-36xTcsJYqKIgdDaw5Q"- nickname="Andrew"- subject="Prefer the system/path git binaries if they're a newer version"- date="2013-01-19T06:20:38Z"- content="""-I have used homebrew to install git v1.8.0.2 but git-annex.app packages git v1.7.10.2. git 1.7 crashes due to some newer directives in my global git config.--    error: Malformed value for push.default: simple-    error: Must be one of nothing, matching, tracking or current.-    fatal: bad config file line 38 in /Users/akraut/.gitconfig-    -    git-annex: fd:13: hGetLine: end of file-    failed-    git-annex: webapp: 1 failed--"""]]
− doc/bugs/OSX_app_issues/comment_9_e1bbe83a1b9a7385ed6d443d0cc22bc7._comment
@@ -1,18 +0,0 @@-[[!comment format=mdwn- username="https://www.google.com/accounts/o8/id?id=AItOawlkAghrKEvslMcV2INKUhtPPMsfnzQyyd8"- nickname="Jeremy"- subject="Unable to start assistant"- date="2013-04-16T01:07:05Z"- content="""-I got the git-annex assistant to work once a long time ago when I ran it the first time directly from the dmg. Ever since then (i.e., after putting it in my applications folder) I have never gotten it to run. Wondering if anyone else has experienced this?--I am running OSX 10.7.5 and just pulled the latest app (05-Apr-2013 10:17).--For reference, when I try to kick off the the assistant from the command line I get the error:--    $ open /Applications/git-annex.app-    LSOpenURLsWithRole() failed with error -10810 for the file /Applications/git-annex.app.--I am wondering if there is some sort of file or modification that was made when I accidently kicked it off initially from the dmg, if so any thoughts on what to clear / change?--"""]]
− doc/bugs/OSX_app_issues/old.mdwn
@@ -1,1 +0,0 @@-These issues should be fixed now.
− doc/bugs/OSX_git-annex.app_error:__LSOpenURLsWithRole__40____41__.mdwn
@@ -1,26 +0,0 @@-**What steps will reproduce the problem?**--Either double click on the app or from the terminal--    $ open /Applications/git-annex.app--**What is the expected output? What do you see instead?**--I'd expect to see git-annex run.  "git-annex" doesn't run and what I see (in the terminal) is:--    LSOpenURLsWithRole() failed with error -10810 for the file /Applications/git-annex.app.--**What version of git-annex are you using? On what operating system?**--*git-annex*: 3.20121017--*git-annex.app*: ???--*OS*: OSX 10.6.8 64 bit---**Please provide any additional information below.**--[[!tag /design/assistant/OSX]]--> This was fixed a while ago. [[done]] --[[Joey]] 
− doc/bugs/OS_X_10.8:_Can__39__t_reopen_webapp.mdwn
@@ -1,31 +0,0 @@-### Please describe the problem.--If the assistant is not running, I can successfully open the git-annex application, which will trigger my browser to open a new tab with the assistant interface.--However, once that has been done one time, there appears to be no way to get back to the assistant if the tab is closed.  Attempting to open the application again while the assistant is running in the background results in nothing happening at all. --### What steps will reproduce the problem?--1. Open git-annex.app-2. See assistant and then close the browser tab-3. Open git-annex.app again-4. Nothing happens--### What version of git-annex are you using? On what operating system?--Version 4.20130723-ge023649 on OS X 10.8.4.--### Please provide any additional information below.--From .git/annex/daemon.log:--[[!format sh """-[2013-07-28 00:01:08 CDT] main: starting assistant version 4.20130723-ge023649--(scanning...) [2013-07-28 00:01:08 CDT] Watcher: Performing startup scan-(started...)-"""]]--> [[done]]; I added the `&` to git-annex-shell.-> Hopefully that does not cause any other unwanted behavior..-> --[[Joey]]
− doc/bugs/Old_repository_stuck.mdwn
@@ -1,9 +0,0 @@-I had created a test repository a time ago with an old version of git-annex. I didn't really used it so I simply deleted the directory by hand. Now I've installed a new version of git-annex  and the old repository stills appears on the webapp, but there is no interface to delete it.--* Old git-annex version: don't remember -* New git-annex version: I downloaded 3.20130107 (twice to be sure), but for some reason 'git-annex version' reports 3.20130102-* OS: Ubuntu 12.04.1 LTS 3.2.0-35-generic-pae #55-Ubuntu SMP Wed Dec 5 18:04:39 UTC 2012 i686 i686 i386 GNU/Linux--> This is [[fixed|done]] in git; assuming the repo was showing up-> in the upper-right menu for switching amoung local repositories.-> --[[Joey]] 
− doc/bugs/On_Windows__44___wget_is_not_used__44___even_if_available.mdwn
@@ -1,67 +0,0 @@-### Please describe the problem.-On Windows, with a remote repository configured for HTTP access, wget is never used, even if it's available in the system. curl is always used.--### What steps will reproduce the problem?-1. Set up an annex on a remote system, configure it for HTTP access, run an HTTP server.-2. over HTTP, clone it to Windows-3. "annex get -vd <file>"-4. note that curl is used.---### What version of git-annex are you using? On what operating system?-Windows 7: 4.20140627-g8a36ec5 (from the git-annex download page)--### Additional Info-After some debugging, it appears the issue is that git-annex looks to see if the file 'wget' is available in any directory on the PATH. on windows, wget is installed as 'wget.exe', and the file 'wget' does not exist anywhere. creating a file named 'wget' works around the issue. (wget.exe appears to still be the file used)--###Full Transcript-1. remote annex is created on host 192.168.0.8, with file "file1.txt"-[[!format sh """-#Windows 7-#download and install git from git-scm.com/download/win-#Git-1.8.3-preview20130601.exe-#on install, selecting "Run Git from the Windows Command Prompt"-#on install, selecting "checkout as-is, commit as-is"-#installs to C:\Program Files (x86)\Git-#download and install git-annex from http://git-annex.branchable.com/install/-#git-annex-installer.exe-#need to right-click 'run as administrator', per reported bug (link here)-#installs to C:\Program Files (x86)\Git\cmd-#also installs some utilities, including wget.exe--C:\Users\test-git-annex>git clone http://192.168.0.8:8000/test_annex/.git-Cloning into 'test_annex'...--C:\Users\test-git-annex>cd test_annex--C:\Users\test-git-annex\test_annex>dir- Volume in drive C has no label.-- Directory of C:\Users\test-git-annex\test_annex--<DIR>          .-<DIR>          ..-              178 file1.txt-               1 File(s)            178 bytes--C:\Users\test-git-annex\test_annex>type file1.txt-.git/annex/objects/J9/m6/SHA256-s21--6ed275e9e01c84a57fdd99d6af793c5d587d02e699cd2c28b32b7dc90f73e729/SHA256-s21--6ed275e9e01c84a57fdd99d6af793c5d587d02e699cd2c28b32b7dc90f73e729--C:\Users\test-git-annex\test_annex>git annex init windows-init windows-  Detected a crippled filesystem.--  Enabling direct mode.--  Detected a filesystem without fifo support.--  Disabling ssh connection caching.-ok-(Recording state in git...)--C:\Users\test-git-annex\test_annex> git annex get file.txt-#fails, with error dialog box, indicating libcurl-4.dll is missing, indicating git-annex is trying to use curl.--"""]]--> I fixed this immediately after it was mentioned on IRC. [[done]] --[[Joey]] 
− doc/bugs/Out_of_memory_error_in_fsck_whereis_find_and_status_cmds.mdwn
@@ -1,80 +0,0 @@-Before I start on what's gone wrong, many thanks for a great program: finally a way of finding out where I've put all those files, and I enjoyed your talk in Australia. Not quite to New Zealand, but a good start :-)--To play with git-annex, I decided to convert my ~/Downloads directory to a git-annex repository, as there were a wide variety of files in it, mostly easily replaceable, and also handy to have on multiple machines. In hindsight, probably wasn't a great idea, as I'd regularly forget it was a git-annex repo and move files and directories out manually, which caused all sorts of fun trying to sort out the dead symlinks. Then I after one update, the repository format changed, from WORM to xxx256 format which meant there were now both sorts in the GA object store.--More recently I'd tried converting the repo to direct mode, you get the idea: lots of playing with git-annex commands, and now that I think about it, possibly some git commands too trying to repair missing files.--Anyway I've ended up with a 27GB git-annex repo that now manages to kill git-annex whenever I try to check it using "git-annex fsck". --Not only does the fsck subcommand cause it to die, but also "find", "whereis" and "status". It dies on the same file (for find/whereis/fsck).--e.g.--    ... lots of stuff deleted ...-    whereis 1wolf14.zip (2 copies) -            051f0b00-e265-11e1-894e-3b0b3f3844f2 -- Laptop-            2c4e11e0-a1b4-11e1-9a02-73e17b04c00f -- here (myPC - Downloads)-    ok-    git-annex: out of memory (requested 2097152 bytes)--Now "git status" for some repo data:--    myPC:~/Downloads$ git annex status-    supported backends: SHA256E SHA1E SHA512E SHA224E SHA384E SHA256 SHA1 SHA512 SHA224 SHA384 WORM URL-    supported remote types: git S3 bup directory rsync web webdav glacier hook-    repository mode: direct-    trusted repositories: 0-    semitrusted repositories: 4-            00000000-0000-0000-0000-000000000001 -- web-            051f0b00-e265-11e1-894e-3b0b3f3844f2 -- Laptop-            2c4e11e0-a1b4-11e1-9a02-73e17b04c00f -- here (myPC - Downloads)-            48fbe52a-a1b3-11e1-bb80-ebc15118871d -- netbk-    untrusted repositories: 0-    dead repositories: 0-    transfers in progress: none-    available local disk space: 100 gigabytes (+1 megabyte reserved)-    local annex keys: 1719-    local annex size: 27 gigabytes-    known annex keys: git-annex: out of memory (requested 2097152 bytes)--It always seems to die at about 3.5GB memory usage. This is running on Ubuntu 12.04, using the latest GA release built using cabal:--    git-annex version: 4.20130227-    local repository version: 3-    default repository version: 3-    supported repository versions: 3 4-    upgrade supported from repository versions: 0 1 2--There are also dead symlinks that point to directories that have meta-data but not the symlink target (manually line-wrapped):--    myPC:~/Downloads$ ls -l precise*-    lrwxrwxrwx 1 nino nino 194 Oct 21 12:48 precise-dvd-i386.iso -> -                 .git/annex/objects/0x/Xz/SHA256-s3590631424---                 b08ecdd4846948ec076b23afae7f87be9cfba5218fb9ba4160f26c0b8d4b5dd0/-                 SHA256-s3590631424--b08ecdd4846948ec076b23afae7f87be9cfba5218fb9ba4160f26c0b8d4b5dd0--But looking in the symlink destination directory, there's no corresponding object, only metadata:--    myPC:~/Downloads/.git/annex/objects/0x/Xz/SHA256-s3590631424--b08ecdd4846948ec076b23afae7f87be9cfba5218fb9ba4160f26c0b8d4b5dd0$ ls -l-    total 8-    -rw-rw-r-- 1 nino nino 30 Jan  8 23:15 SHA256-s3590631424--b08ecdd4846948ec076b23afae7f87be9cfba5218fb9ba4160f26c0b8d4b5dd0.cache-    -rw-rw-r-- 1 nino nino 49 Jan  8 23:15 SHA256-s3590631424--b08ecdd4846948ec076b23afae7f87be9cfba5218fb9ba4160f26c0b8d4b5dd0.map--But there is another version somewhere else.--    -r--r--r-- 1 nino nino 3590631424 Mar 18  2012 ./.git/annex/objects/Kj/wM/WORM-s3590631424-m1331991509-                        --precise-dvd-i386.iso/WORM-s3590631424-m1331991509--precise-dvd-i386.iso--This actual file does exist in the "Used" directory:--    -rw-r--r-- 1 nino nino 3.4G May 27  2012 precise-dvd-i386.iso--I'm not so worried about the mangled repo - it's quite possibly because of clueless git/git-annex command usage - but the inability to use the fsck command is concerning--I could just uninit everything, but as it dies prematurely, I'm not certain that all the contents would be restored.-Any thoughts on how I can get git-annex (esp. fsck) to complete would be appreciated.--Thanks-Giovanni--[[!tag moreinfo]]
− doc/bugs/Partial_direct__47__indirect_repo.mdwn
@@ -1,24 +0,0 @@-Setup:--* Fresh install of Debian Wheezy on machines A & B, git-annex 4.20130227 pulled in from unstable-* On both machines, clone old repository which contains both annexed files and a three small files checked straight into git--Steps:--* On both machines, use webapp to create `~/.config/git-annex/autostart` by just firing it up and typing in location of existing repository-* Move a new file into B's annex, in a subdirectory that is preferred on both A & B--Expected:--* The new file is copied over to A and everything remains in indirect mode-* Three files checked straight into git remain checked straight into git (see below for why this is a variant on [[bugs/Switching_between_direct_and_indirect_stomps_on___39__regular__39___git_files/]])--Actual:--* New file copied over but seems to be in direct mode, while all the other content that is present is still symlinked-* Files checked into git converted to direct mode files too (can tell this has happened by following step:)-* Typing `git annex indirect` on A & B shows conversion of precisely four files (three files originally checked into git and new file added to B ) back to indirect--Thanks.--> [[done]], webapp now avoids changing existing repos here. --[[Joey]]
− doc/bugs/Prevent_accidental_merges.mdwn
@@ -1,14 +0,0 @@-With the storage layout v3, pulling the git-annex branch into the master branch is... less than ideal.--The fact that the two branches contain totally different data make an accidental merge worse, arguably.--Adding a tiny binary file called .gitnomerge to both branches would solve that without any noticeable overhead.--Yes, there is an argument to be made that this is too much hand-holding, but I still think it's worth it.---- Richard--> It should be as easy to undo such an accidential merge-> as it is to undo any other git commit, right? I quite like that git-annex -> no longer adds any clutter to the master branch, and would be reluctant-> to change that. --[[Joey]]
− doc/bugs/Problem_when_dropping_unused_files.mdwn
@@ -1,21 +0,0 @@-### Please describe the problem.--While dropping 19 unused files from an annex, I got this error:--    error: invalid object 100644 c873416e78db4dd94b6ab40470d6fe99b2ecb8bd for '002/0a6/SHA256E-s427690--03aeabcde841b66168b72de80098d74e047f3ffc832d4bbefa1f2f70ee6c92f8.jpg.log'-    fatal: git-write-tree: error building trees-    git-annex: failed to read sha from git write-tree--I've actually seen this before, a few months ago.--### What steps will reproduce the problem?--I have no idea, but once it happens I can't interact with unused files anymore.  Also, `git annex fsck` now reports this same problem as well.--### What version of git-annex are you using? On what operating system?--git-annex version: 4.20130815, OS X 10.8.4--> [[done]]; no indication this is anything other than a corrupt git-> repository, which can be caused by system crash, disk data loss, -> cosmic rays, etc. This is why we keep backups... --[[Joey]] 
− doc/bugs/Problem_with_bup:_cannot_lock_refs.mdwn
@@ -1,52 +0,0 @@-Hi!--Using bup for storing seems a good idea to save space, but I still have a problem when trying to copy files to my local git repo.-I have two partitions:--- /Data (NTFS)--- / (ext4)--I turned the directory /Data/Audio into a git-annex repo, and cloned it into /home/me/AudioClone.-I added the remote bup to AudioClone by doing:--    git annex initremote mybup type=bup encryption=none buprepo=--But when I try to copy some files that I have previously got by "git annex get" by doing:--    [~/AudioClone]$ git annex copy someartist/somealbum --to mybup--it fails and tells me:--    copy Order To Die/01 Morituri Te Salutant.flac (to mybup...) -    fatal: Cannot lock the ref 'refs/heads/WORM-s7351771-m1318841909--01 Morituri Te Salutant.flac'.-    Traceback (most recent call last):-      File "/usr/lib/bup/cmd/bup-split", line 170, in <module>-        git.update_ref(refname, commit, oldref)-      File "/usr/lib/bup/bup/git.py", line 835, in update_ref-        _git_wait('git update-ref', p)-      File "/usr/lib/bup/bup/git.py", line 930, in _git_wait-        raise GitError('%s returned %d' % (cmd, rv))-    bup.git.GitError: git update-ref returned 128--for each file, **except for the album cover file**, which is a simple JPG that bup doesn't try to split. This one gets copied nicely but the big FLAC files don't.--I tried to restart my session, in case bup adds my username to a group or something.--(I'm using Ubuntu 11.10)--> Apparently bup-split does not allow storing data using filenames with-> spaces in them. I can reproduce the same bug using the same filename;-> if I remove the spaces all is well.-> -> Since bup-split -n uses git branches, I guess git-annex needs to avoid-> giving it any names containing spaces, or anything else not allowed-> in a git branch name. The rules for legal git branch names are quite complex-> (see git-check-ref-format(1)) so it will take me some times to code-> this up.-> -> A workaround is to switch to the SHA256 backend-> (`git annex migrate --backend=SHA256`), which avoids spaces in its keys.-> --[[Joey]]-->> Now fixed in git. [[done]] --[[Joey]] 
− doc/bugs/Problems_building_on_Mac_OS_X.mdwn
@@ -1,62 +0,0 @@-### Please describe the problem.--Installing via Cabal fails due to dependency conflicts with yesod. If I build without the webapp flag, the problem disappears.--### What steps will reproduce the problem?-Running `cabal install c2hs git-annex --bindir=$HOME/bin`.--### What version of git-annex are you using? On what operating system?-I was attempting to install 4.20130521 from Hackage. My operating system is Mac OS X 10.6.8. Cabal-install is at 0.14.0.--### 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/debug.log-Resolving dependencies...-cabal: Could not resolve dependencies:-trying: git-annex-4.20130521 (user goal)-trying: git-annex-4.20130521:+webapp-trying: yesod-default-1.2.0 (dependency of git-annex-4.20130521:+webapp)-trying: yesod-core-1.2.1 (dependency of yesod-default-1.2.0)-trying: cookie-0.4.0.1/installed-9d9... (dependency of yesod-core-1.2.1)-next goal: yesod (dependency of git-annex-4.20130521:+webapp)-rejecting: yesod-1.2.0.1, 1.2.0 (conflict: git-annex-4.20130521:webapp =>-yesod(<1.2))-rejecting: yesod-1.1.9.3, 1.1.9.2, 1.1.9.1, 1.1.9, 1.1.8.2, 1.1.8.1, 1.1.8,-1.1.7.2, 1.1.7.1, 1.1.7, 1.1.6, 1.1.5, 1.1.4.1, 1.1.4 (conflict:-yesod-core==1.2.1, yesod => yesod-core>=1.1.5 && <1.2)-rejecting: yesod-1.1.3.1, 1.1.3, 1.1.2, 1.1.1.2, 1.1.1, 1.1.0.3, 1.1.0.2,-1.1.0.1, 1.1.0 (conflict: yesod-core==1.2.1, yesod => yesod-core>=1.1 && <1.2)-rejecting: yesod-1.0.1.6, 1.0.1.5, 1.0.1.4, 1.0.1.3, 1.0.1.2, 1.0.1.1, 1.0.1,-1.0.0.2, 1.0.0.1, 1.0.0 (conflict: yesod-core==1.2.1, yesod => yesod-core>=1.0-&& <1.1)-rejecting: yesod-0.10.2, 0.10.1.4, 0.10.1.3, 0.10.1.2, 0.10.1.1, 0.10.1-(conflict: yesod-core==1.2.1, yesod => yesod-core>=0.10.1 && <0.11)-rejecting: yesod-0.9.4.1, 0.9.4, 0.9.3.4, 0.9.3.3, 0.9.3.2 (conflict:-yesod-core==1.2.1, yesod => yesod-core>=0.9.3.4 && <0.10)-rejecting: yesod-0.9.3.1, 0.9.3, 0.9.2.2, 0.9.2.1, 0.9.2, 0.9.1.1 (conflict:-yesod-core==1.2.1, yesod => yesod-core>=0.9.1.1 && <0.10)-rejecting: yesod-0.9.1 (conflict: yesod-core==1.2.1, yesod => yesod-core>=0.9-&& <0.10)-rejecting: yesod-0.8.2.1, 0.8.2, 0.8.1 (conflict: yesod-core==1.2.1, yesod =>-yesod-core>=0.8.1 && <0.9)-rejecting: yesod-0.8.0 (conflict: yesod-core==1.2.1, yesod => yesod-core>=0.8-&& <0.9)-rejecting: yesod-0.7.3, 0.7.2 (conflict: yesod-core==1.2.1, yesod =>-yesod-core>=0.7.0.2 && <0.8)-rejecting: yesod-0.7.1 (conflict: yesod-core==1.2.1, yesod =>-yesod-core>=0.7.0.1 && <0.8)-rejecting: yesod-0.7.0 (conflict: yesod-core==1.2.1, yesod => yesod-core>=0.7-&& <0.8)-rejecting: yesod-0.6.7, 0.6.6, 0.6.5, 0.6.4, 0.6.3, 0.6.2, 0.6.1.2, 0.6.1.1,-0.6.1, 0.6.0.2, 0.6.0.1, 0.6.0, 0.5.4.2, 0.5.4.1, 0.5.4, 0.5.3, 0.5.2, 0.5.1,-0.5.0.3, 0.5.0.2, 0.5.0.1, 0.5.0, 0.4.1, 0.4.0.3, 0.4.0.2, 0.4.0.1, 0.4.0-(conflict: cookie => time==1.4/installed-d61..., yesod => time>=1.1.4 && <1.3)-rejecting: yesod-0.3.1.1, 0.3.1, 0.3.0, 0.2.0, 0.0.0.2, 0.0.0.1, 0.0.0-(conflict: cookie => time==1.4/installed-d61..., yesod => time>=1.1.3 && <1.2)-# End of transcript or log.-"""]]--> Not OSX specific. I have added a version hint that makes cabal work and uploaded-> a point release with this fix. [[done]] --[[Joey]]
− doc/bugs/Problems_running_make_on_osx.mdwn
@@ -1,49 +0,0 @@-Followed the instructions over here: http://git-annex.branchable.com/forum/git-annex_on_OSX/--and had to install the following extra packages to be able to get make to start:--[realizes pcre-light is needed but pcre not installed on my mac]  -sudo port install pcre  -sudo cabal install pcre-light  --> Ah right, that is a new dependency. I've updated the forum page-> with this info.-> --[[Joey]] --But then I got the following error:  --<pre>-ghc -O2 -Wall --make git-annex  -[ 7 of 52] Compiling BackendTypes     ( BackendTypes.hs, BackendTypes.o   --BackendTypes.hs:71:17:  -    No instance for (Arbitrary Char)  -      arising from a use of `arbitrary' at BackendTypes.hs:71:17-25  -    Possible fix: add an instance declaration for (Arbitrary Char)  -    In a stmt of a 'do' expression: backendname <- arbitrary  -    In the expression:  -        do backendname <- arbitrary  -           keyname <- arbitrary  -             return $ Key (backendname, keyname)  -    In the definition of `arbitrary':  -        arbitrary = do backendname <- arbitrary  -                       keyname <- arbitrary  -                         return $ Key (backendname, keyname)  -make: *** [git-annex] Error 1  -</pre>--My knowledge of Haskell (had to lookup the spelling...) is more than rudimentary so any help would be appreciated.--> Hmm, it seems you may be missing part of the quickcheck haskell-> library, or have a different version than me.-> -> The easy fix is probably to just edit BackendTypes.hs and delete the-> entire end of the file from line 68, "for quickcheck" down. This code-> is only used by the test suite (so "make test" will fail), -> but it should get it to build. --[[Joey]]-------Closing this bug because the above problem now has a solution documented on-the install page, and the below test suite failure problems should all be-resolved on OSX. [[done]] --[[Joey]] 
− doc/bugs/Problems_with_syncing_gnucash.mdwn
@@ -1,568 +0,0 @@-### 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/Provide_64-bit_standalone_build.mdwn
@@ -1,6 +0,0 @@-The 32-bit standalone build appears to require two libraries (lib32-libyaml and lib32-gsasl) that are not available on Arch Linux. [See the comments on the AUR package](https://aur.archlinux.org/packages/git-annex-bin/). I'd appreciate it if you could bring back the 64-bit build.--> [[done]], based on <https://aur.archlinux.org/packages/git-annex-bin/>-> they are managing with what I am providing. Also, Arch Linux has a-> proper build of git-annex from source, so I'm not going to worry about-> git-annex-bin, the rationalle for which I don't even understand. --[[Joey]]
− doc/bugs/Proxy_support.mdwn
@@ -1,18 +0,0 @@-What steps will reproduce the problem?--Adding a e.g box.com repository from behind a http proxy via webapp.--What is the expected output? What do you see instead?--Connection should be made. But there is an error message:--"Internal Server Error-connect: does not exist (Connection refused): user error"--What version of git-annex are you using? On what operating system?--3.20121127 on Archlinux--Please provide any additional information below.--I don't use networkmanager if proxy information is obtained from it. There should be a fallback to environment variables.
− doc/bugs/Remote_repo_and_set_operation_with_find.mdwn
@@ -1,6 +0,0 @@-Currently, git annex find lists files that are present in the current repository, possibly restricted to a subdirectory. But it does not easily seem possible to get this information about a remote repository.--I would find it useful if this command understood flags that makes it tell me what is present somewhere else (maybe "--on remote") and combinations of the flags ("--on remote1 --and --not-on remote2" or "--on disk1 --or --on disk2").--> Almost. You're looking for `--in remote`, which was added 2 months ago.-> [[done]] --[[Joey]] 
− doc/bugs/Remote_repositories_have_to_be_setup_encrypted.mdwn
@@ -1,27 +0,0 @@-What steps will reproduce the problem?--Create a new remote repository in the webapp. Get to the final phase of the setup where it asks you if you want to encrypt it, yet no other option is given to continue.--What is the expected output? What do you see instead?--At least two options:--1. Use an encrypted rsync repository on the server (the existing one)-2. Use an unencrypted rsync repository on the server--What version of git-annex are you using? On what operating system?--    $ ./git-annex version-    git-annex version: 3.20130102--    $ uname -a-    Linux wintermute 3.2.0-35-generic #55-Ubuntu SMP Wed Dec 5 17:45:18 UTC 2012 i686 i686 i386 GNU/Linux--    $ lsb_release -a-    Distributor ID:	Ubuntu-    Description:	Ubuntu 12.04.1 LTS-    Release:	12.04-    Codename:	precise--[[!meta title="webapp does not allow disabling encryption on rsync special remotes"]]-[[!tag /design/assistant]]
− doc/bugs/Renamed_special_remote_cannot_be_reactivated_by_the_webapp.mdwn
@@ -1,30 +0,0 @@-Setup:--* fresh install of Debian Wheezy with git-annex 4.20130227 pulled in from unstable-* clone existing repository and activate assistant-* repository has encrypted rsync remote originally setup with the name `metaarray`-* this remote was renamed to `ma` a long time ago, using the webapp-* had to perform this rename on each client--Steps:--* attempt to reactivate special remote using webapp repositories page, on reinstalled machine--Expected:--* special remote starts working-* renaming special remotes ought to survive clones--Actual:--* firstly, special remote activation page has blank hostname box and the hostname of the machine is in the username box-* form gives error "cannot change encryption type of existing remote"--Workaround:--* execute `git annex initremote metaarray`-* rename `metaarray` to `ma` again using the webapp--Perhaps the renaming of the remote not surviving clones is unavoidable, but the webapp should be able to cope with the situation.  Thanks.--[[!tag /design/assistant]]
− doc/bugs/Repository_deletion_error.mdwn
@@ -1,46 +0,0 @@-**What steps will reproduce the problem?**--On the dashboard, click settings > Delete on the repo you want to remove.-Wait for the dropping to finish.-Start final deletion when the message "The repository "repo" has been emptied, and can now be removed." pops up.--**What is the expected output? What do you see instead?**--The repository should be deleted, but I only see "Internal Server Error: git [Param "remote",Param "remove",Param "repo"] failed".--**What version of git-annex are you using? On what operating system?**--Standalone build, git-annex version 4.20130417-g4bb97d5--**Please provide any additional information below.**--The log shows:--     [2013-04-22 22:17:22 CEST] TransferScanner: The repository "repo" has been emptied, and can now be removed. -     error: Unknown subcommand: remove-     usage: git remote [-v | --verbose]-       or: git remote add [-t <branch>] [-m <master>] [-f] [--mirror=<fetch|push>] <name> <url>-       or: git remote rename <old> <new>-       or: git remote rm <name>-       or: git remote set-head <name> (-a | -d | <branch>)-       or: git remote [-v | --verbose] show [-n] <name>-       or: git remote prune [-n | --dry-run] <name>-       or: git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]-       or: git remote set-branches [--add] <name> <branch>...-       or: git remote set-url <name> <newurl> [<oldurl>]-       or: git remote set-url --add <name> <newurl>-       or: git remote set-url --delete <name> <url>--        -v, --verbose         be verbose; must be placed before a subcommand----> Seems that `git remote remove` is new as of git 1.8.0 or so.-> Older gits only support `git remote rm`. Which newer gits-> support as well. but it seems to be in the process-> of being deprecated so I'd rather not use it.-> -> So, I've made the version of git it's-> built for determine which subcommand it uses. [[done]] --[[Joey]]-> -> (You can run `git remote rm repo` by hand to clean up from this BTW.)
− doc/bugs/Resource_exhausted.mdwn
@@ -1,45 +0,0 @@-What steps will reproduce the problem?-My annex dir has 23459 files and uses 749MB disk space.-Just create a repository put this dir inside, and git-annex will crash.--What is the expected output? What do you see instead?-I expect git-annex handles large number of files, and does not watch every single file of it.--What version of git-annex are you using? On what operating system?-I'm using git-annex linux build, version 2013.04.17.--Please provide any additional information below.--    [2013-04-17 23:52:35 CEST] Transferrer: Downloaded pappas_hu..di_44.jpg-    git-annex: runInteractiveProcess: pipe: Too many open files-    Committer crashed: lsof: createProcess: resource exhausted (Too many open files)-    [2013-04-17 23:53:52 CEST] Committer: warning Committer crashed: lsof: createProcess: resource exhausted (Too many open files)-    git-annex: runInteractiveProcess: pipe: Too many open files-    git: createProcess: resource exhausted (Too many open files)-    DaemonStatus crashed: /home/user/Desktop/down/annex_test/.git/annex/daemon.status.tmp21215: openFile: resource exhausted (Too many open files)-    [2013-04-17 23:57:24 CEST] DaemonStatus: warning DaemonStatus crashed: /home/user/Desktop/down/annex_test/.git/annex/daemon.status.tmp21215: openFile: resource exhausted (Too many open files)-    git-annex: runInteractiveProcess: pipe: Too many open files-    git: createProcess: resource exhausted (Too many open files)-    git-annex: runInteractiveProcess: pipe: Too many open files-    NetWatcherFallback crashed: git: createProcess: resource exhausted (Too many open files)-    [2013-04-18 00:27:17 CEST] NetWatcherFallback: warning NetWatcherFallback crashed: git: createProcess: resource exhausted (Too many open files)-    git-annex: runInteractiveProcess: pipe: Too many open files-    git-annex: git: createProcess: resource exhausted (Too many open files)-    git-annex: accept: resource exhausted (Too many open files)--Instead of raising system's limit (which is a neverending story), can we make git-annex only watch a directory and not every file of it?--Or could the user specify some directory which he knows it is rarely change, to not be watched only check it once a day?--The best would be if git annex could automatically adapt itself.-Ie. it watches eg. 200 files, and if some of it does not change for three days, then it drops from the watching basket, and those who changed (noticed while sanity checked) it adds to the basket.--I don't really want to raise the ulimit, because my ultimate goal is to have git-annex on multiple raspberry pi with external harddrive (one at my home, one at my mom's home, one at my friends home, etc, etc). And raspberry is fairly low on resource.--I'm interested in your thoughts.--Best, - Laszlo--[[!tag /design/assistant]]-[[!meta title="assistant can try to add too many files at once in batch add mode"]]
− doc/bugs/Resource_leak_somewhere_in_the___39__get__39___code.mdwn
@@ -1,24 +0,0 @@-What steps will reproduce the problem?--I have an Annex with about 18k files in it.  If I clone it and then run `git annex get .`, it gets a few thousand files and then starts reporting:--    get 2004-2012/Originals/110414_0362.jpg (from titan...) -    rsync: fork: Resource temporarily unavailable (35)-    rsync error: error in IPC code (code 14) at pipe.c(63) [Receiver=3.0.9]--I have to abort and re-run `git annex get .` several times to finally get all of the files.--What is the expected output? What do you see instead?--I didn't expect what I saw!  I think there's a resource not being released in the `get` code.--What version of git-annex are you using? On what operating system?--master branch, d430fb1.--Please provide any additional information below.--OS X 10.8.2.  The machine has tons of RAM and tons of process handles free.  It's really not doing anything else but this git-annex at the time of my tests.--> [[done]], this is a bug introduced in 3.20121009, and I've reverted the-> buggy change. --[[Joey]]
− doc/bugs/Rsync_encrypted_remote_asks_for_ssh_key_password_for_each_file.mdwn
@@ -1,30 +0,0 @@-What steps will reproduce the problem?--Add an encrypted rsync remote by it's 'Host' value in ~/.ssh/config.--eg.:--cat ~/.ssh/config | grep Host--    Host serverNick--git annex initremote rsyncRemote type=rsync rsyncurl=serverNick:/home/USER/Music encryption=USER@gmail.com--git annex copy some\ artist --to serverNick---What is the expected output? What do you see instead?--I'd expect it to remember the key password like a normal ssh remote.  Instead I get asked for the key password 3 times for each file in the folder.--What version of git-annex are you using? On what operating system?--3.20130216.  Arch x64 (up to date as of 2013-03-07)--Please provide any additional information below.---[[!meta title="rsync special remote does not use ssh connection caching"]]--> [[done]]; ssh connection caching is now done for these remotes.-> --[[Joey]]
− doc/bugs/Rsync_remote_created_via_webapp_remains_empty.mdwn
@@ -1,138 +0,0 @@-### Please describe the problem.-The remote server, connected with rsync and with encryption enabled doesn't fill with files.--### What steps will reproduce the problem?-* Add remote server via webapp-* Supply password when asked-* both buttons turn green ('ready to add remote server')-* Select encrypted rsync repository-* When done, files will be queued for transfer, and the queue empties quickly. Afterwards, no files have actually been transferred, but a green message appears and says something like 'synced with xxx'.-* Also, on the remote an empty directory (~/annex) is created.--### What version of git-annex are you using? On what operating system?-local: kubuntu 12.10,            git-annex 4.20130621-g36258de-remote: debian (linux 3.8.0-25), git-annex 4.20130621-g36258de-Both are installed from tarball and PATH is set at the top of .bashrc.--### Please provide any additional information below.--[[!format sh """--Here is what is put in the logs when the button is toggled from 'syncing disabled' to 'syncing enabled'.-daemon.log:--[2013-07-03 13:43:07 CEST] call: git ["--git-dir=/home/boris/annex/.git","--work-tree=/home/boris/annex","config","remote.mybox.annex-sync","true"]-[2013-07-03 13:43:07 CEST] read: git ["config","--null","--list"]-[2013-07-03 13:43:07 CEST] read: git ["config","--null","--list"]-[2013-07-03 13:43:07 CEST] main: Syncing with mybox -[2013-07-03 13:43:07 CEST] read: git ["--git-dir=/home/boris/annex/.git","--work-tree=/home/boris/annex","symbolic-ref","HEAD"]-[2013-07-03 13:43:07 CEST] read: git ["--git-dir=/home/boris/annex/.git","--work-tree=/home/boris/annex","show-ref","refs/heads/master"]-[2013-07-03 13:43:07 CEST] read: git ["--git-dir=/home/boris/annex/.git","--work-tree=/home/boris/annex","show-ref","git-annex"]-[2013-07-03 13:43:07 CEST] read: git ["--git-dir=/home/boris/annex/.git","--work-tree=/home/boris/annex","show-ref","--hash","refs/heads/git-annex"]-[2013-07-03 13:43:07 CEST] read: git ["--git-dir=/home/boris/annex/.git","--work-tree=/home/boris/annex","log","refs/heads/git-annex..4cc51b410f5257f60e4ea187ab0c29783effcc88","--oneline","-n1"]-[2013-07-03 13:43:07 CEST] read: git ["--git-dir=/home/boris/annex/.git","--work-tree=/home/boris/annex","log","refs/heads/git-annex..6728d4d49ef97365eea0e2d379951acee9a9ded8","--oneline","-n1"]-[2013-07-03 13:43:07 CEST] read: git ["--git-dir=/home/boris/annex/.git","--work-tree=/home/boris/annex","symbolic-ref","HEAD"]-[2013-07-03 13:43:07 CEST] read: git ["--git-dir=/home/boris/annex/.git","--work-tree=/home/boris/annex","show-ref","refs/heads/master"]-[2013-07-03 13:43:07 CEST] TransferScanner: starting scan of [Remote { name ="mybox" }]-[2013-07-03 13:43:07 CEST] read: git ["--git-dir=/home/boris/annex/.git","--work-tree=/home/boris/annex","ls-files","--cached","-z","--"]-[2013-07-03 13:43:07 CEST] TransferScanner: queued Upload UUID "32841e5f-1e4d-4c72-84c4-bbb54a335a23" afstuderen/TSPC_FF_R.png Nothing : expensive scan found missing object-[2013-07-03 13:43:07 CEST] Transferrer: Transferring: Upload UUID "32841e5f-1e4d-4c72-84c4-bbb54a335a23" afstuderen/TSPC_FF_R.png Nothing-[2013-07-03 13:43:07 CEST] TransferScanner: queued Upload UUID "32841e5f-1e4d-4c72-84c4-bbb54a335a23" afstuderen/Thumbs.db Nothing : expensive scan found missing object-[2013-07-03 13:43:07 CEST] TransferWatcher: transfer starting: Upload UUID "32841e5f-1e4d-4c72-84c4-bbb54a335a23" afstuderen/TSPC_FF_R.png Nothing-[2013-07-03 13:43:07 CEST] TransferScanner: queued Upload UUID "32841e5f-1e4d-4c72-84c4-bbb54a335a23" afstuderen/administratie/Aanmeldingsformulier Masterexamen.odt Nothing : expensive scan found missing object-[2013-07-03 13:43:07 CEST] TransferScanner: queued Upload UUID "32841e5f-1e4d-4c72-84c4-bbb54a335a23" afstuderen/administratie/Intake_form_MSc_Electrical_Engineering_def dec 2011-1.pdf Nothing : expensive scan found missing object-[2013-07-03 13:43:07 CEST] TransferScanner: queued Upload UUID "32841e5f-1e4d-4c72-84c4-bbb54a335a23" afstuderen/administratie/Opdrachtomschrijving Master.doc Nothing : expensive scan found missing object-[2013-07-03 13:43:07 CEST] TransferScanner: queued Upload UUID "32841e5f-1e4d-4c72-84c4-bbb54a335a23" afstuderen/administratie/Opdrachtomschrijving Master.pdf Nothing : expensive scan found missing object-[2013-07-03 13:43:07 CEST] TransferScanner: queued Upload UUID "32841e5f-1e4d-4c72-84c4-bbb54a335a23" afstuderen/administratie/uren.xls Nothing : expensive scan found missing object-[2013-07-03 13:43:07 CEST] TransferScanner: queued Upload UUID "32841e5f-1e4d-4c72-84c4-bbb54a335a23" afstuderen/eldo_ur.pdf Nothing : expensive scan found missing object-[2013-07-03 13:43:07 CEST] TransferScanner: queued Upload UUID "32841e5f-1e4d-4c72-84c4-bbb54a335a23" afstuderen/literatuur/ A 65J-Conversion-Step 0-to-50MS 0-to-0.7mW 9b Charge-Sharing SAR ADC in 90nm Digital CMOS.pdf Nothing : expensive scan found missing object-[2013-07-03 13:43:07 CEST] TransferScanner: queued Upload UUID "32841e5f-1e4d-4c72-84c4-bbb54a335a23" afstuderen/literatuur/.directory Nothing : expensive scan found missing object-[2013-07-03 13:43:07 CEST] TransferScanner: queued Upload UUID "32841e5f-1e4d-4c72-84c4-bbb54a335a23" afstuderen/literatuur/2009SOVC_A_0.92mW_10-bit_50-MSs_SAR_ADC_in_0.13um_CMOS_Process.pdf Nothing : expensive scan found missing object-[2013-07-03 13:43:07 CEST] TransferScanner: queued Upload UUID "32841e5f-1e4d-4c72-84c4-bbb54a335a23" afstuderen/literatuur/A 8-bit 500-KSs Low Power SAR ADC for Biomedical Applications.pdf Nothing : expensive scan found missing object-fatal: unrecognized command 'rsync --server -vre.iLsf --partial-dir .rsync-partial . annex/'-git-annex-shell: git-shell failed-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-07-03 13:43:07 CEST] TransferWatcher: transfer finishing: Transfer {transferDirection = Upload, transferUUID = UUID "32841e5f-1e4d-4c72-84c4-bbb54a335a23", transferKey = Key {keyName = "ea86501fb0db033a103ed2c0806a1bddc145224afc4eb5e17fceb70bf1f674da.png", keyBackendName = "SHA256E", keySize = Just 11004, keyMtime = Nothing}}-fatal: unrecognized command 'rsync --server -vre.iLsf --partial-dir .rsync-partial . annex/'-git-annex-shell: git-shell failed-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-07-03 13:43:07 CEST] TransferScanner: queued Upload UUID "32841e5f-1e4d-4c72-84c4-bbb54a335a23" afstuderen/literatuur/A 9.2b 47fJ SAR with input range prediction DAC switching.pdf Nothing : expensive scan found missing object-[2013-07-03 13:43:07 CEST] Transferrer: Transferring: Upload UUID "32841e5f-1e4d-4c72-84c4-bbb54a335a23" afstuderen/Thumbs.db Nothing-[2013-07-03 13:43:07 CEST] TransferWatcher: transfer starting: Upload UUID "32841e5f-1e4d-4c72-84c4-bbb54a335a23" afstuderen/Thumbs.db Nothing-fatal: unrecognized command 'rsync --server -vre.iLsf --partial-dir .rsync-partial . annex/'-git-annex-shell: git-shell failed-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-07-03 13:43:07 CEST] TransferWatcher: transfer finishing: Transfer {transferDirection = Upload, transferUUID = UUID "32841e5f-1e4d-4c72-84c4-bbb54a335a23", transferKey = Key {keyName = "23b9a2be728c8af402ededb3eef7e9238b38d54c0ca50a05cbdf4aeea8f03c76.db", keyBackendName = "SHA256E", keySize = Just 12800, keyMtime = Nothing}}-fatal: unrecognized command 'rsync --server -vre.iLsf --partial-dir .rsync-partial . annex/'-git-annex-shell: git-shell failed-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-07-03 13:43:07 CEST] TransferScanner: queued Upload UUID "32841e5f-1e4d-4c72-84c4-bbb54a335a23" afstuderen/literatuur/A Low-Power Static Dual Edge-Triggered Flip-Flop.pdf Nothing : expensive scan found missing object-[2013-07-03 13:43:07 CEST] Transferrer: Transferring: Upload UUID "32841e5f-1e4d-4c72-84c4-bbb54a335a23" afstuderen/administratie/Aanmeldingsformulier Masterexamen.odt Nothing-[2013-07-03 13:43:07 CEST] TransferWatcher: transfer starting: Upload UUID "32841e5f-1e4d-4c72-84c4-bbb54a335a23" afstuderen/administratie/Aanmeldingsformulier Masterexamen.odt Nothing-fatal: unrecognized command 'rsync --server -vre.iLsf --partial-dir .rsync-partial . annex/'-git-annex-shell: git-shell failed-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-07-03 13:43:07 CEST] TransferWatcher: transfer finishing: Transfer {transferDirection = Upload, transferUUID = UUID "32841e5f-1e4d-4c72-84c4-bbb54a335a23", transferKey = Key {keyName = "f27ac57481c9eb0bf7bf1f6c99666aca5c8282137effa33791241b3d36b12de2.odt", keyBackendName = "SHA256E", keySize = Just 22041, keyMtime = Nothing}}-fatal: unrecognized command 'rsync --server -vre.iLsf --partial-dir .rsync-partial . annex/'-git-annex-shell: git-shell failed-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-07-03 13:43:07 CEST] TransferScanner: queued Upload UUID "32841e5f-1e4d-4c72-84c4-bbb54a335a23" afstuderen/literatuur/An Energy-Efficient Charge Recycling Approach for a SAR Converter With Capacitive DAC.pdf Nothing : expensive scan found missing object-[2013-07-03 13:43:07 CEST] Transferrer: Transferring: Upload UUID "32841e5f-1e4d-4c72-84c4-bbb54a335a23" afstuderen/administratie/Intake_form_MSc_Electrical_Engineering_def dec 2011-1.pdf Nothing-[2013-07-03 13:43:07 CEST] TransferWatcher: transfer starting: Upload UUID "32841e5f-1e4d-4c72-84c4-bbb54a335a23" afstuderen/administratie/Intake_form_MSc_Electrical_Engineering_def dec 2011-1.pdf Nothing-fatal: unrecognized command 'rsync --server -vre.iLsf --partial-dir .rsync-partial . annex/'-git-annex-shell: git-shell failed-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-07-03 13:43:07 CEST] TransferWatcher: transfer finishing: Transfer {transferDirection = Upload, transferUUID = UUID "32841e5f-1e4d-4c72-84c4-bbb54a335a23", transferKey = Key {keyName = "a261cb3835ed869c6ad2347d303ed10e94efa8a50cc9ff053d772c2158097244.pdf", keyBackendName = "SHA256E", keySize = Just 667666, keyMtime = Nothing}}-fatal: unrecognized command 'rsync --server -vre.iLsf --partial-dir .rsync-partial . annex/'-git-annex-shell: git-shell failed-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-07-03 13:43:07 CEST] TransferScanner: queued Upload UUID "32841e5f-1e4d-4c72-84c4-bbb54a335a23" afstuderen/literatuur/Calibration Technique for SAR Analog-to-Digital Converters.pdf Nothing : expensive scan found missing object-[2013-07-03 13:43:07 CEST] Transferrer: Transferring: Upload UUID "32841e5f-1e4d-4c72-84c4-bbb54a335a23" afstuderen/administratie/Opdrachtomschrijving Master.doc Nothing-[2013-07-03 13:43:07 CEST] TransferWatcher: transfer starting: Upload UUID "32841e5f-1e4d-4c72-84c4-bbb54a335a23" afstuderen/administratie/Opdrachtomschrijving Master.doc Nothing-fatal: unrecognized command 'rsync --server -vre.iLsf --partial-dir .rsync-partial . annex/'-git-annex-shell: git-shell failed-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-07-03 13:43:08 CEST] TransferWatcher: transfer finishing: Transfer {transferDirection = Upload, transferUUID = UUID "32841e5f-1e4d-4c72-84c4-bbb54a335a23", transferKey = Key {keyName = "cb69f2f4ae313277acd163b9bba19392ce50d3c5205ba8bbd90bf9c453088176.doc", keyBackendName = "SHA256E", keySize = Just 34304, keyMtime = Nothing}}-[2013-07-03 13:43:08 CEST] call: git ["--git-dir=/home/boris/annex/.git","--work-tree=/home/boris/annex","config","remote.mybox.annex-sync","false"]-[2013-07-03 13:43:08 CEST] read: git ["config","--null","--list"]-[2013-07-03 13:43:08 CEST] read: git ["config","--null","--list"]-fatal: unrecognized command 'rsync --server -vre.iLsf --partial-dir .rsync-partial . annex/'-git-annex-shell: git-shell failed-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-07-03 13:43:08 CEST] TransferScanner: queued Upload UUID "32841e5f-1e4d-4c72-84c4-bbb54a335a23" afstuderen/literatuur/D15_01.pdf Nothing : expensive scan found missing object-[2013-07-03 13:43:08 CEST] Transferrer: Transferring: Upload UUID "32841e5f-1e4d-4c72-84c4-bbb54a335a23" afstuderen/administratie/Opdrachtomschrijving Master.pdf Nothing-[2013-07-03 13:43:08 CEST] TransferWatcher: transfer starting: Upload UUID "32841e5f-1e4d-4c72-84c4-bbb54a335a23" afstuderen/administratie/Opdrachtomschrijving Master.pdf Nothing-fatal: unrecognized command 'rsync --server -vre.iLsf --partial-dir .rsync-partial . annex/'-git-annex-shell: git-shell failed-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-07-03 13:43:08 CEST] TransferWatcher: transfer finishing: Transfer {transferDirection = Upload, transferUUID = UUID "32841e5f-1e4d-4c72-84c4-bbb54a335a23", transferKey = Key {keyName = "cea054d80cb5ca572b7055c0132ec2d13125534566ed4a79ab2514c9a60d8ee4.pdf", keyBackendName = "SHA256E", keySize = Just 19802, keyMtime = Nothing}}-fatal: unrecognized command 'rsync --server -vre.iLsf --partial-dir .rsync-partial . annex/'-git-annex-shell: git-shell failed-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-07-03 13:43:08 CEST] Transferrer: Transferring: Upload UUID "32841e5f-1e4d-4c72-84c4-bbb54a335a23" afstuderen/literatuur/D15_01.pdf Nothing-[2013-07-03 13:43:08 CEST] TransferWatcher: transfer starting: Upload UUID "32841e5f-1e4d-4c72-84c4-bbb54a335a23" afstuderen/literatuur/D15_01.pdf Nothing-fatal: unrecognized command 'rsync --server -vre.iLsf --partial-dir .rsync-partial . annex/'-git-annex-shell: git-shell failed-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]----# End of transcript or log.-"""]]--> [[fixed|done]], corrected logic error that caused `authorized_keys`-> to incorrectly force the git-annex-shell command for rsync remotes. --[[Joey]]
− doc/bugs/S3_bucket_uses_the_same_key_for_encryption_and_hashing.mdwn
@@ -1,10 +0,0 @@-While using HMAC instead of "plain" hash functions is inherently more secure, it's still a bad idea to re-use keys for different purposes.--Also, ttbomk, HMAC needs two keys, not one. Are you re-using the same key twice?--Compability for old buckets and support for different ones can be maintained by introducing a new option and simply copying over the encryption key's identifier into this new option should it be missing.--> Bug was filed prematurely, but was a good bit of paranoia, and gpg and-> hmac are given different secret keys [[done]] --[[Joey]] -->> Thanks :) -- RIchiH
− doc/bugs/S3_memory_leaks.mdwn
@@ -1,14 +0,0 @@-S3 has memory leaks--Sending a file to S3 causes a slow memory increase toward the file size.--Copying the file back from S3 causes a slow memory increase toward the-file size.--The author of hS3 is aware of the problem, and working on it. I think I-have identified the root cause of the buffering; it's done by hS3 so it can-resend the data if S3 sends it a 307 redirect. --[[Joey]]--At least the send leak should be fixed by the patch in the s3-memory-leak-branch in git. That needs a patch to hS3, which I have sent to its author.---[[Joey]] 
− doc/bugs/S3_upload_not_using_multipart.mdwn
@@ -1,53 +0,0 @@-What steps will reproduce the problem?--> Try to copy/move a file greater than 5G to S3.--    git annex copy large_file.tgz --to cloud--What is the expected output? What do you see instead?--> Looks like git-annex may not be using the Multipart Upload API: http://docs.aws.amazon.com/AmazonS3/latest/dev/uploadobjusingmpu.html--> Expected transfer to succeed, instead this error is output:--    copy large-file.tgz (gpg) (checking cloud...) (to cloud...) Reading passphrase from file descriptor 12    ---     Your proposed upload exceeds the maximum allowed size-     failed-     git-annex: copy: 1 failed--What version of git-annex are you using? On what operating system?--> OSX 10.8.2--Please provide any additional information below.--    annex [master●] % git annex status-	supported backends: SHA256E SHA1E SHA512E SHA224E SHA384E SHA256 SHA1 SHA512 SHA224 SHA384 WORM URL-	supported remote types: git S3 bup directory rsync web webdav glacier hook-	repository mode: indirect-	trusted repositories: 0-	semitrusted repositories: 3-		00000000-0000-0000-0000-000000000001 -- web-	 	BE1D8EC7-C64B-47DE-AD4E-2A50437532B4 -- cloud-	 	E84568BA-6A4B-4AA1-B622-605B9248EDB1 -- here (eric laptop)-	untrusted repositories: 0-	dead repositories: 0-	transfers in progress: none-	available local disk space: 169 gigabytes (+1 megabyte reserved)-	temporary directory size: 218 megabytes (clean up with git-annex unused)-	local annex keys: 24-	local annex size: 8 gigabytes-	known annex keys: 25-	known annex size: 8 gigabytes-	bloom filter size: 16 mebibytes (0% full)-	backend usage: -		SHA256E: 49-	annex [master●] % git annex version-	git-annex version: 3.20130114-	local repository version: 3-	default repository version: 3-	supported repository versions: 3-	upgrade supported from repository versions: 0 1 2-
− doc/bugs/Segfaults_on_Fedora_18_with_SELinux_enabled.mdwn
@@ -1,65 +0,0 @@-git-annex version: 4.20130323--Running the webapp with SELinux enabled:--    [0 zerodogg@browncoats annexed]$ git annex webapp --debug-    Launching web browser on file:///home/zerodogg/Documents/annexed/.git/annex/webapp.html-    /home/zerodogg/bin/git-annex: line 25:  5801 Segmentation fault      (core dumped) "$base/runshell" git-annex "$@"--After disabling SELinux it works just fine. This is on a freshly installed (default settings) Fedora 18 on x86-64.--Running the assistant also works, but segfaults when attempting to open the webapp:--    [0 zerodogg@browncoats annexed]$ git annex assistant &-    [1] 6241-    [0 zerodogg@browncoats annexed]$ -    [0 zerodogg@browncoats annexed]$ git annex webapp --debug-    Launching web browser on file:///home/zerodogg/Documents/annexed/.git/annex/webapp.html-    /home/zerodogg/bin/git-annex: line 25:  6322 Segmentation fault      (core dumped) "$base/runshell" git-annex "$@"-    [139 zerodogg@browncoats annexed]$ Created new window in existing browser session.--Here's what `dmesg` says:--    [   71.488843] SELinux: initialized (dev proc, type proc), uses genfs_contexts-    [  115.443932] git-annex[3985]: segfault at e6e62984 ip 0000000009b8085a sp 00000000f4bfd028 error 4 in git-annex[8048000+1c75000]-    [  125.148819] SELinux: initialized (dev proc, type proc), uses genfs_contexts-    [  125.230155] git-annex[4043]: segfault at e6eda984 ip 0000000009b8085a sp 00000000f63fd028 error 4 in git-annex[8048000+1c75000]-    [  406.855659] SELinux: initialized (dev proc, type proc), uses genfs_contexts-    [  407.033966] git-annex[5806]: segfault at e6faa984 ip 0000000009b8085a sp 00000000f6dfd028 error 4 in git-annex[8048000+1c75000]-    [  462.368045] git-annex[6279]: segfault at e6f76984 ip 0000000009b8085a sp 00000000f49fd028 error 4 in git-annex[8048000+1c75000]-    [  465.714636] SELinux: initialized (dev proc, type proc), uses genfs_contexts-    [  465.930434] git-annex[6329]: segfault at e6e7a984 ip 0000000009b8085a sp 00000000f63fd028 error 4 in git-annex[8048000+1c75000]-    [  560.570480] git-annex[7050]: segfault at e7022984 ip 0000000009b8085a sp 00000000f54fd028 error 4 in git-annex[8048000+1c75000]-    [  565.510664] SELinux: initialized (dev proc, type proc), uses genfs_contexts-    [  565.688681] git-annex[7108]: segfault at e7196984 ip 0000000009b8085a sp 00000000f54fd028 error 4 in git-annex[8048000+1c75000]--Running the whole thing with --debug doesn't appear to provide anything useful:--    [0 zerodogg@browncoats annexed]$ git annex assistant --debug &-    [1] 7018-    [0 zerodogg@browncoats annexed]$ [2013-03-24 16:27:02 CET] read: git ["--git-dir=/home/zerodogg/Documents/annexed/.git","--work-tree=/home/zerodogg/Documents/annexed","show-ref","git-annex"]-    [2013-03-24 16:27:02 CET] read: git ["--git-dir=/home/zerodogg/Documents/annexed/.git","--work-tree=/home/zerodogg/Documents/annexed","show-ref","--hash","refs/heads/git-annex"]-    [2013-03-24 16:27:02 CET] read: git ["--git-dir=/home/zerodogg/Documents/annexed/.git","--work-tree=/home/zerodogg/Documents/annexed","log","refs/heads/git-annex..f2260840bd9563f3d9face53dddd6807813860cd","--oneline","-n1"]-    [2013-03-24 16:27:02 CET] read: git ["--git-dir=/home/zerodogg/Documents/annexed/.git","--work-tree=/home/zerodogg/Documents/annexed","log","refs/heads/git-annex..798526ef1315811296b1ac95d4cf97c72141ad29","--oneline","-n1"]-    [2013-03-24 16:27:02 CET] read: git ["--git-dir=/home/zerodogg/Documents/annexed/.git","--work-tree=/home/zerodogg/Documents/annexed","log","refs/heads/git-annex..0d827b1ef545a88e94ee8cc973e54a1b74d216f4","--oneline","-n1"]-    [2013-03-24 16:27:02 CET] read: git ["--git-dir=/home/zerodogg/Documents/annexed/.git","--work-tree=/home/zerodogg/Documents/annexed","log","refs/heads/git-annex..1d8f91411b827c4d59735dbc572e7f278e870e43","--oneline","-n1"]-    [2013-03-24 16:27:02 CET] read: git ["--git-dir=/home/zerodogg/Documents/annexed/.git","--work-tree=/home/zerodogg/Documents/annexed","log","refs/heads/git-annex..cc442416b325866139db6dbe374bddacda6fef91","--oneline","-n1"]-    [2013-03-24 16:27:02 CET] read: git ["--git-dir=/home/zerodogg/Documents/annexed/.git","--work-tree=/home/zerodogg/Documents/annexed","log","refs/heads/git-annex..3c2f44ffd82df1a0ae8858bdf2610e933b105a09","--oneline","-n1"]-    [2013-03-24 16:27:02 CET] read: git ["--git-dir=/home/zerodogg/Documents/annexed/.git","--work-tree=/home/zerodogg/Documents/annexed","log","refs/heads/git-annex..fb8819ca92d9a2ed39e6d329160b5f8da60df83f","--oneline","-n1"]-    [2013-03-24 16:27:02 CET] read: git ["--git-dir=/home/zerodogg/Documents/annexed/.git","--work-tree=/home/zerodogg/Documents/annexed","log","refs/heads/git-annex..68d0f936ee044b0ca34cf4029bcd6274fed88499","--oneline","-n1"]-    [2013-03-24 16:27:02 CET] read: git ["--git-dir=/home/zerodogg/Documents/annexed/.git","--work-tree=/home/zerodogg/Documents/annexed","log","refs/heads/git-annex..3ba3dfef6340196126f4fc630b5048188230d1ff","--oneline","-n1"]-    [2013-03-24 16:27:02 CET] chat: git ["--git-dir=/home/zerodogg/Documents/annexed/.git","--work-tree=/home/zerodogg/Documents/annexed","cat-file","--batch"]-    -    [1]  + done       GITWRAP annex assistant --debug-    [0 zerodogg@browncoats annexed]$ git annex webapp --debug &-    [1] 7082-    [0 zerodogg@browncoats annexed]$ Launching web browser on file:///home/zerodogg/Documents/annexed/.git/annex/webapp.html-    /home/zerodogg/bin/git-annex: line 25:  7088 Segmentation fault      (core dumped) "$base/runshell" git-annex "$@"-    -    [1]  + exit 139   GITWRAP annex webapp --debug-    [0 zerodogg@browncoats annexed]$ Created new window in existing browser session.--> On IRC it developed that it segfaulted at other times, and gdb complained-> of a library mismatch. Seems something changed in Fedora libc, and -> the 32 bit binary is not working on 64 bit. I've brought back the 64 bit-> standalone builds, which work. [[done]] --[[Joey]]
− doc/bugs/Selfsigned_certificates_with_jabber_fail_miserably..mdwn
@@ -1,22 +0,0 @@-### Please describe the problem.-Entering a jabber address which's server got a selfsigned certificate, the process just fails, without asking for acceptance for that certificate. This is quite a showstopper.-(for example: jabber.ccc.de)---### What steps will reproduce the problem?-Try with an account from e.g. jabber.ccc.de---### What version of git-annex are you using? On what operating system?-Arch Linux, aur/git-annex-standalone 4.20130709-1 --### Please provide any additional information below.-There is no logoutput to add... I'm sorry.--[[!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/Should_ignore_.thumbnails__47___on_android.mdwn
@@ -1,28 +0,0 @@-### 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/Should_try_again_when_network_fails___40__esp._DNS__41__.mdwn
@@ -1,50 +0,0 @@-### Please describe the problem.--If you have a flaky connection big uploads and downloads will fail. git-annex should try again few times.--This is an example of failed download.--[[!format sh """-$ git annex get --not --in here-get File1.bin (from s3...) (gpg) -You need a passphrase to unlock the secret key for-user: "Gioele"-4096-bit RSA key, ....--gpg: gpg-agent is not available in this session--  ErrorMisc "<socket: 14>: hGetBuf: resource vanished (Connection reset by peer)"-                        -  Unable to access these remotes: s3--  Try making some of these repositories available:-        331fa184-799d-4511-1725-ef2a17ace8b4 -- s3-        c2a0cfa0-8871-9721-9b81-5649281fabdc -- other-failed-get File2.bin (from s3...) --  Unable to access these remotes: s3--  Try making some of these repositories available:-        331fa184-799d-4511-1725-ef2a17ace8b4 -- s3-        c2a0cfa0-8871-9721-9b81-5649281fabdc -- other-failed-git-annex: get: 2 failed-"""]]--This is especially annoying when the DNS is out of order for a few seconds every now and then. In such cases, git-annex will complain, skip very fast to the next file, and repeat this process until it runs out of files. In the end it will have uploaded or downloaded very few files.--Please not that it may not possible to write a simple shell loop to try again as the are GPG passwords to be entered.--Git-annex should try again to upload or download a file in case something goes wrong.--### What version of git-annex are you using? On what operating system?--    git-annex version: 4.20130709.1-    build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP-    local repository version: unknown-    default repository version: 3-    supported repository versions: 3 4-    upgrade supported from repository versions: 0 1 2--Ubuntu 12.04.2 LTS
− doc/bugs/Small_archive_behaving_like_archive.mdwn
@@ -1,33 +0,0 @@-### Please describe the problem.--repos of group smallarchive have started trying to accumulate all files.--I have an archive repo (rsync) and a smallarchive repo (glacier). The assistant is now trying to transfer everything up to glacier. This is new behavior as of this version of annex.--### What steps will reproduce the problem?---### What version of git-annex are you using? On what operating system?--Mac OSX 10.8.3 (Build 12D78)--    git-annex version: 4.20130501-ged2fc6f-    -    local repository version: 4-    default repository version: 3-    supported repository versions: 3 4-    upgrade supported from repository versions: 0 1 2-    build flags: Assistant Webapp Pairing Testsuite S3 WebDAV FsEvents XMPP DNS---### 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/debug.log---# End of transcript or log.-"""]]--[[!tag moreinfo]]
− doc/bugs/Stale_lock_files_on_Android.mdwn
@@ -1,37 +0,0 @@-### Please describe the problem.--Both my Android devices where not processing git-annex updates due to stale lock files. While the lock files are different, I've reported them both together as they are related. --### What steps will reproduce the problem?--Unknown, perhaps the assistant crashed, or the battery ran flat on them.--To resolve the issue I had to manually remove the lock files.--### What version of git-annex are you using? On what operating system?--On my Android phone, daily build 4.20130614-g221aea4-On my Android tablet, daily build 4.20130621-g36258de--### Please provide any additional information below.--It seems to me that it'd be useful to have the assistant check to see if the lock files are still valid and remove them if they're stale.--[[!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--My phone:--From ssh://git-annex-flick-andrewannex_phonecamera/~/phone-camera-   987dc25..682cdd1  git-annex  -> flick_phonecamera/git-annex-fatal: Unable to create '/storage/emulated/legacy/DCIM/.git/refs/remotes/flick_phonecamera/synced/git-annex.lock': File exists.--My tablet:--Committer: Adding Coleman-C..eedom.pdf-Committer: Committing changes to git-fatal: Unable to create '/mnt/sdcard/reference/.git/index.lock': File exists.--# End of transcript or log.-"""]]
− doc/bugs/Stress_test.mdwn
@@ -1,45 +0,0 @@-What steps will reproduce the problem?--mkdir annex_stress; cd annex_stress, -then execute the following script:--    #! /bin/sh-    -    # creating a directory, in which we dump all the files.-    mkdir probes; cd probes-    -    for i in `seq -w 1 25769`; do-        mkdir probe$i-        echo "This is an important file, which saved also in backup ('back') directory too.\n Content changes: $i" > probe$i/probe$i.txt-        echo "This is just an identical content file. Saved in each subdir." > probe$i/defaults.txt-        echo "This is a variable ($i) content file, which is not backed up in 'back' directory." > probe$i/probe-nb$i.txt-        mkdir probe$i/back-        cp probe$i/probe$i.txt probe$i/back/probe$i.txt-    done---It creates about 25000 directory and 3 files in each, two of them are identical.--What is the expected output? What do you see instead?--I expect git annex could import the directory within 12 hours. -Yet, it just crashes the gui (starting webapp, uses the cpu 100% and it does not finish after 28hours.)---What version of git-annex are you using? On what operating system?--version 2013.04.17--Please provide any additional information below.--I do hope git-annex can be fixed to handle large number of files.-This stress test models well enough my own directory structure, -relatively high number of files relatively low disk space usage -(my own directory structure: 750MB, this test creates 605MB).---Best, - Laszlo--[[!meta title="assistant Stress test"]]-[[!tag /design/assistant]]
− doc/bugs/Stress_test/comment_10_1694e990eab6592159309c231c6dcc16._comment
@@ -1,12 +0,0 @@-[[!comment format=mdwn- username="http://joeyh.name/"- nickname="joey"- subject="comment 10"- date="2013-05-06T16:54:36Z"- content="""-My estimate was indeed slightly optimistic. While I did not run the whole import, it did run slower for the later batches of files. As far as I can see, that slowdown is just because git gets slower as it has more files. So nothing I can do about it. git-annex is now scaling well itself, though.--Re checksumming on startup: There was a bug that caused the assistant to re-checksum all direct mode files on startup. This bug was fixed in version 4.20130417. If you're using that version and still see it re-checksumming files, please file a new bug report about it, as this is not intended behavior.--You seem to be saying that the assistant is failing to add some files, and then when stopped and restarted it finds and adds them. I don't quite know how that would happen. If you can provide a test case that I can use to reproduce that behavior, I will try to debug it.-"""]]
− doc/bugs/Stress_test/comment_11_ab4cb6eefd279e6c1f229e089f703581._comment
@@ -1,25 +0,0 @@-[[!comment format=mdwn- username="https://www.google.com/accounts/o8/id?id=AItOawm5iosFbL2By7UFeViqkc6v-hoAtqILeDA"- nickname="Laszlo"- subject="comment 11"- date="2013-05-11T05:36:48Z"- content="""-rechecksuming: it seem like it is indeed fixed in the newest (2013.05.01) version downloaded from here:-http://downloads.kitenet.net/git-annex/linux/--I tried to add the big stress test dir as a secondary repository into git-annex (along with my real data dir), but -seems like some library is not matching on my system, so some curl is complaining:--    curl: /lib/tls/i686/cmov/libc.so.6: version `GLIBC_2.12' not found (required by /home/user/Desktop/down/git-annex.linux//usr/lib/i386-linux-gnu/libldap_r-2.4.so.2)--I'm on ubuntu 10.04.--And the log file is starting to fill up, so maybe once a problem occur, it should only write into the log file once.--I will redone this stress test next week, without combining with any repository.-Thank you very much for your response, I do appreciate you are bothering/dealing with my complains!:)--Best, - Laszlo--"""]]
− doc/bugs/Stress_test/comment_1_c4c764488ac082f5c48d3a6b4b5fba42._comment
@@ -1,17 +0,0 @@-[[!comment format=mdwn- username="http://joeyh.name/"- nickname="joey"- subject="comment 1"- date="2013-04-23T20:00:31Z"- content="""-Is this related or unrelated to the bug you filed at [[Resource_exhausted]]?--I tried this test, and noticed that it was taking the assistant rather a long time to get to the 10 thousand file threshhold where it makes a batch commit. A small change to a better data structure for its queue reduced that time from probably 10 minutes to 2.5. --I was unable to reproduce any problem with the webapp. Please provide lots of details to back up \"it just crashes the GUI\".--The main problem with this directory tree is that it has more directories than inotify can watch, in the default configuration. -So after it adds the first 8192 directories, it begins failing to watch any more, and printing a message about you needing to increase the inotify limits for each additional directory. I don't think that 51 thousand directories is a particularly realistic amount for any real-world usage of git-annex. (It will also break file manager, dropbox, etc, which all use inotify in the same way.)--The other main time sink is that git-annex needs to run `git hash-object` once per file to stage its symlink. That is a lot of processes to run, and perhaps it could be sped up by using `git fast-import`.-"""]]
− doc/bugs/Stress_test/comment_2_42125bba09a0ea9821cda7183e458100._comment
@@ -1,47 +0,0 @@-[[!comment format=mdwn- username="https://www.google.com/accounts/o8/id?id=AItOawm5iosFbL2By7UFeViqkc6v-hoAtqILeDA"- nickname="Laszlo"- subject="comment 2"- date="2013-04-24T06:30:16Z"- content="""-Hi,--First of all thank you for your time looking into my bug. I try to research more from my side.--The 'Resource exhausted' bugreport -(which lost its title, and could not click on it to add this testcase as a comment)-was tested on real data, my own working directory (a copy of it).-This bugreport is tested on the output of this small shell script.--None of them succeeded to import, and I quickly assumed it is the exact same.--So I will test again, raising the ulimit to 81920, and report.--    The main problem with this directory tree is that it has more directories than inotify can watch, in the default configuration--I would be perfectly fine if I could configure git-annex to sync those directory only once a month or once a week-(ie. check for update once a week). So no need to watch it real time, those are my archived work files.--    I don't think that 51 thousand directories is a particularly realistic amount for any real-world usage of git-annex.--Well, it is not 25000 dir in a single a folder, but rather something like this:--    work_done/2009/workname/back9/back8/back7/back6/back5--Where each 'backX' contains a whole backup the work until it. -So the directory structure is a bit more deep, and no 25000 subdirectory in a single dir. -But the overall numbers are right.--If I could somehow mark this **work_done** dir to not sync real time (or work_done/2008,work_done/2009,work_done/2010,work_done/2011,work_done/2012 subdir in them), -then my whole issue would vanish.--I only want to use git-annex to have a backup of this directory. -In case of laptop theft, or misfunction I could have a backup. -I dont need live sync anywhere, I have directories which I know I will not touch for months.--Best,- Laszlo----"""]]
− doc/bugs/Stress_test/comment_3_8240e61106b494d3600ad91f16eb5b1c._comment
@@ -1,20 +0,0 @@-[[!comment format=mdwn- username="https://www.google.com/accounts/o8/id?id=AItOawm5iosFbL2By7UFeViqkc6v-hoAtqILeDA"- nickname="Laszlo"- subject="comment 3"- date="2013-04-24T09:10:20Z"- content="""-    (It will also break file manager, dropbox, etc, which all use inotify in the same way.)--I beg to differ: with dropbox I handle my scrapbook(1) folder, -which means 130 thousand files for over 2 years now without problem between three computers.--    ~/Dropbox/scrapbook$ ls -R -1 |wc -l-    130263--Don't get me wrong. I'm not complaining, I only give you a completely unrelated usecase, -which requires also high number of files handling. And in that case the 81 thousand ulimit would not help either.--(1): https://addons.mozilla.org/hu/firefox/addon/scrapbook/--"""]]
− doc/bugs/Stress_test/comment_4_c38d84e0dcc834931804c44bce7f7b7a._comment
@@ -1,11 +0,0 @@-[[!comment format=mdwn- username="http://joeyh.name/"- nickname="joey"- subject="comment 4"- date="2013-04-24T15:05:33Z"- content="""-You're confusing number of files (inotify doesn't care) with number of directories (inotify does care).--Dropbox is on record about being limited in the number of directories it can watch without adjusting the inotify limit. -<https://www.dropbox.com/help/145>-"""]]
− doc/bugs/Stress_test/comment_5_60ce20ee255451c4ea809ba475561adb._comment
@@ -1,15 +0,0 @@-[[!comment format=mdwn- username="http://joeyh.name/"- nickname="joey"- subject="comment 5"- date="2013-04-24T15:30:04Z"- content="""-I found a bug in the webapp thanks to this stress test. When inotify goes over limit, it displays a message about how to fix it..-But it displays that message over and over for each file. The result is a constantly updating very large web page. --Unless you tell me differently, I'm going to assume that's what the GUI crash you referred to was, since it can make a web browser very slow.--I've fixed this problem. Now when it goes over limit, the webapp will just display this:--[[/assistant/inotify_max_limit_alert.png]]-"""]]
− doc/bugs/Stress_test/comment_6_1371562e201393986cd41597f6f288cb._comment
@@ -1,14 +0,0 @@-[[!comment format=mdwn- username="http://joeyh.name/"- nickname="joey"- subject="comment 6"- date="2013-04-24T17:26:39Z"- content="""-I put in a further change to reduce the number of alerts shown in the webapp when bulk adding files. This probably quadrupled the speed or more, even when the webapp was not running, as updating an alert every time a file was added was a lot of unnecessary work.--After these changes, it adds the first 10 thousand files in 35 minutes, on my five year old netbook. It should scale linear-(aside from git's own scalability issues with a lot of files, which I don't think are very bad under 1 million files),-so adding all 100 thousand files should take 6 hours or so.--I'm interested to see what results you get, compared with before..-"""]]
− doc/bugs/Stress_test/comment_7_a14be7699da224a8f6c9b34f1b911219._comment
@@ -1,8 +0,0 @@-[[!comment format=mdwn- username="http://joeyh.name/"- nickname="joey"- subject="comment 7"- date="2013-04-24T21:02:55Z"- content="""-A few more changes got the rate down to 21 minutes per 10 thousand files. Estimate 3.5 hours for all.-"""]]
− doc/bugs/Stress_test/comment_8_a01995bdca7ade7dde9842b53fbc4e0c._comment
@@ -1,57 +0,0 @@-[[!comment format=mdwn- username="https://www.google.com/accounts/o8/id?id=AItOawm5iosFbL2By7UFeViqkc6v-hoAtqILeDA"- nickname="Laszlo"- subject="Definite improvement"- date="2013-05-03T06:27:12Z"- content="""-Hi,--I have just tried it out again with the latest (20130501) version.--It is really nice to see you have been working on it, and it have improved tremendously!-The logging issue solved, and logrotates even, and it finished importing without crashing!--Remaining polishing things:--a)-The import time is not as good (as you write), it slowes itself down.-It is true the first 10000 files import in about an hour, but it finishes with everything-in 9 hours 20 minutes.-(on a normal laptop, the last 5000 file portion took more then 2 hours)--b) -Every startup means rechecksuming everything, so it means the second start took also around 8-12 hours.-(I don't know exactly because it finished somewhere during the night, but it was longer then 8 hours)-I don't think rechecksuming is necessary at all, if the filename, size and date have not modified, -then why rechecksuming (sha) it?---c) -It is leaking. -At the second startup, it reported it successfully added:-    Added 2375 files 5 files probe25366.txt--I have not touched the directory. ls confirms leaking:--    After first start (importing):-    annex_many/.git$ ls -lR |wc -l-    770199--    After second startup:-    annex_many/.git$ ls -lR |wc -l-    788351--d) Without ulimit raise, it does not work at all.-I think it could be solved by not watching each and every directory all the time.-Every users will likely have a working directory and some which he don't intend to touch/modify at all.-Some usecases: photo archiving, video archiving, finished work archiving, etc--All the above results with the stress test script. -I would love to have a confirmation by a thirdparty.--Overall I'm impressed with the work you have done.--Best, - Laszlo--"""]]
− doc/bugs/Stress_test/comment_9_9f7efe81b7e40aaa04a865394c53e20f._comment
@@ -1,52 +0,0 @@-[[!comment format=mdwn- username="https://www.google.com/accounts/o8/id?id=AItOawm5iosFbL2By7UFeViqkc6v-hoAtqILeDA"- nickname="Laszlo"- subject="Maybe it is not leaking after all"- date="2013-05-03T18:37:48Z"- content="""-I have been working the whole day zipping up (tar.gz) all the unused directories.-Now my real data dir looks like this:--    ./annex_real/work_done$ du -hs .-    1,1G	.-    Has 9088 files and 1608 directories in total:-    ./annex_real/work_done$ ls -R1l |grep \\-r |wc -l-    9088-    ./annex_real/work_done$ ls -R1l |grep ^d |wc -l-    1608--When I first started git annex, it added 5492 files, then next time it added the missing 3596 files. Then it stopped adding files.-From the gui everything looked fine even at the first start (performed startup scan), even in the log files (daemon.log.x) was nothing suspicious.--    ./annex_real/work_done$ for i in ../.git/annex/daemon.log.*; do echo $i; cat $i |grep files; done-     ../.git/annex/daemon.log.1-     ../.git/annex/daemon.log.2-     ../.git/annex/daemon.log.3-     ../.git/annex/daemon.log.4-     [2013-05-03 20:03:34 CEST] Committer: Adding 3596 files-     ../.git/annex/daemon.log.5-     [2013-05-03 19:15:22 CEST] Committer: Adding 5492 files--As you can see, this case is not a stress test at all, -it is really the minimal test case, 1.1GB diskspace, 9088 files and a thousand dirs. -The real question is, why git-annex miss at the first startup 3492 files (ie. adding all the files).--It would help tremendously, if it would display at startup how many files he found, -and when it adds, then how many left to be added.-Something like this:--    (scanning...) [2013-05-03 20:03:14 CEST] Watcher: Performing startup scan-    (started...)-    [2013-05-03 20:03:34 CEST] Committer: Found 9088 files-    [2013-05-03 20:03:34 CEST] Committer: Adding 3596 files of 9088 remaining files (9088 in total)-    ....-    [2013-05-03 20:05:04 CEST] Committer: Adding 1492 files of 5492 remaining files (9088 in total)-    ....-    [2013-05-03 20:06:02 CEST] Committer: Adding 4000 files of 4000 remaining files (9088 in total)--So it is definietly a bug, and I stuck how to debug it further. Everything looks just fine.--Best, - Laszlo--"""]]
− doc/bugs/Switching_from_indirect_mode_to_direct_mode_breaks_duplicates.mdwn
@@ -1,30 +0,0 @@-#What steps will reproduce the problem?--1. Create a new repository in indirect mode.--2. Add the same file twice under a different name. Now you have two symlinks pointing to the same file under .git/annex/objects/--3. Switch to direct mode. The first symlink gets replaced by the actual file. The second stays unchanged, pointing to nowhere. But git annex whereis still reports it has a copy.--4. Delete the first file. Git annex whereis still thinks it has a copy of file 2, which is not true -> data loss.--#What is the expected output? What do you see instead?--When switching to direct mode, both symlinks should be replaced by a copy (or at least a hardlink) of the actual file.--> The typo that caused this bug is fixed. --[[Joey]] --#What version of git-annex are you using? On what operating system?--3.20130107 on Arch Linux x64--#Please provide any additional information below.--The deduplication performed by git-annex is very dangerous in itself-because files with identical content become replaced by references to the-same file without the user necessarily being aware. Think of the user-making a copy of a file, than modifying it. He would expect to end up with-two files, the unchanged original and the modified copy. But what he really-gets is two symlinks pointing to the same modified file.--> I agree, it now copies rather than hard linking.  [[done]] --[[Joey]] 
@@ -1,51 +0,0 @@-What steps will reproduce the problem?--Create two repositories by running git annex webapp. Sync them by linking them to the same xmpp account. Add files on both sides.--What is the expected output? What do you see instead?--I expect the same file to show up on both sides with the same contents. Instead adding a file on any side creates a broken link with the same name on the other side. For example:--Side A:--    $ ls -la-    total 20-    drwxrwxr-x  3 pedrocr pedrocr 4096 Jan  3 19:24 .-    drwxr-xr-x 55 pedrocr pedrocr 4096 Jan  3 19:19 ..-    lrwxrwxrwx  1 pedrocr pedrocr  178 Jan  3 19:22 bar -> .git/annex/objects/FQ/vV/SHA256E-s8--12a61f4e173fb3a11c05d6471f74728f76231b4a5fcd9667cef3af87a3ae4dc2/SHA256E-s8--12a61f4e173fb3a11c05d6471f74728f76231b4a5fcd9667cef3af87a3ae4dc2-    lrwxrwxrwx  1 pedrocr pedrocr  178 Jan  3 19:20 foo -> .git/annex/objects/g7/9v/SHA256E-s4--7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730/SHA256E-s4--7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730-    drwxrwxr-x  7 pedrocr pedrocr 4096 Jan  3 19:24 .git-    -rw-r--r--  1 pedrocr pedrocr    0 Jan  3 19:24 testing--"foo" and "bar" are broken links that were created on Side B--Side B:--    $ ls -la-    total 24-    drwxrwxr-x  3 pedrocr pedrocr 4096 Jan  3 19:24 .-    drwx------ 42 pedrocr pedrocr 4096 Jan  3 19:18 ..-    -rw-r--r--  1 pedrocr pedrocr    8 Jan  3 19:22 bar-    -rw-r--r--  1 pedrocr pedrocr    4 Jan  3 19:20 foo-    drwxrwxr-x  7 pedrocr pedrocr 4096 Jan  3 19:24 .git-    lrwxrwxrwx  1 pedrocr pedrocr  178 Jan  3 19:24 testing -> .git/annex/objects/pX/ZJ/SHA256E-s0--e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855/SHA256E-s0--e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855--In this case "testing" is a broken link and was created on Side A.--What version of git-annex are you using? On what operating system?--    $ ./git-annex version-    git-annex version: 3.20130102--    $ uname -a-    Linux wintermute 3.2.0-35-generic #55-Ubuntu SMP Wed Dec 5 17:45:18 UTC 2012 i686 i686 i386 GNU/Linux--    $ lsb_release -a-    Distributor ID:	Ubuntu-    Description:	Ubuntu 12.04.1 LTS-    Release:	12.04-    Codename:	precise--> [[done]]; the webapp now detects when XMPP pairing has been used but no-> transfer remote is available, and prompts the user to create one.-> --[[Joey]]
− doc/bugs/Test_failure_on_debian_dropunused.mdwn
@@ -1,31 +0,0 @@-### Please describe the problem.-./git-annex test fails:-                                          -    ### Failure in: git-annex unused/dropunused                                                                                                     -    dropunused failed-    Cases: 1  Tried: 1  Errors: 0  Failures: 1   --### What steps will reproduce the problem?-./git-annex test--### What version of git-annex are you using? On what operating system?-4.20130723-206-g1647361---debian 7.1 i686--### Please provide any additional information below.--I'm not sure if there is a way to get extra information out of the test harness. I had a quick look at the code and couldn't see anything obvious.-I've tried a clean and rebuild and it reappears, so if there is more information you need just let me know what.--[[!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.-"""]]--> Forgot to update the test suite for this behavior change.-> [[done]] --[[Joey]]
− doc/bugs/The_assistant_hangs_forever.mdwn
@@ -1,46 +0,0 @@-What steps will reproduce the problem?--1. Open the assistant with git-annex webapp-2. Click add another repository-3. Choose "add another repository"-4. Use "/home/pierre/testme" (try and get the problem with a new directory or an existing directory)-5. Press "Make Repository"-5. Choose "Keep the repository separate" --What is the expected output? What do you see instead?--Go to the created repository but the interface hangs forever-I have 4 git-annex processes that use no CPUs.-I can still use the UI by clicking around with success or even shutdown the daemon.-If I shutdown the daemon, all git-annex process gets killed.--What version of git-annex are you using? On what operating system?--It is said to be git-annex version: 4.20130324 but it is actually 4.20130405 (known bug)--Please provide any additional information below.---OS: Arch linux, bin package (not installed from source)-All tests are OK-Nothing happens on the log pages--This is so weird that I would like to see the log file but I cannot find it. I have looked at /var/log without success.-I have tried other available version on Arch linux (AUR git-annex-bin, AUR git-annex-standalone, haskell-web git-annex) and they all exhibit the same problem.-At that stage, what I would like to be able is to try to figure out what is going on using the log file.-Thanks--> This could happen when using the amd64 standalone build, because I -> forgot to install curl into its chroot, so it was not included in the-> bundle. If the host system also lacked curl, or something prevented-> curl from working, it would fail like this.-> -> I've included curl into the amd64 standalone build. I've also made the-> assistant fall back to using a built-in http client if it is built-> without curl.-> -> None of which helps at all with the Arch git-annex-bin hack, since-> that binary will be built with a working curl (when my amd64 standalone-> builder builds it), and then installed onto a system, that,-> apparently, has a broken curl. Which is one of many reasons I cannot-> support that hack. [[done]] --[[Joey]]
− doc/bugs/The_webapp_doesn__39__t_allow_deleting_repositories.mdwn
@@ -1,33 +0,0 @@-What steps will reproduce the problem?--After creating new remote repositories in the webapp there's no option to delete them--What is the expected output? What do you see instead?--Some option to delete a repository, just like I can disable sync or change the config of a remote--What version of git-annex are you using? On what operating system?--    $ ./git-annex version-    git-annex version: 3.20130102--    $ uname -a-    Linux wintermute 3.2.0-35-generic #55-Ubuntu SMP Wed Dec 5 17:45:18 UTC 2012 i686 i686 i386 GNU/Linux--    $ lsb_release -a-    Distributor ID:	Ubuntu-    Description:	Ubuntu 12.04.1 LTS-    Release:	12.04-    Codename:	precise--[[!tag /design/assistant]]--> Status: You can delete the current repository. You can also remove-> repositories from the list of remotes (without deleting their content)-> and you can tell it you want to stop using a remote, and it will-> suck all content off that remote until it's empty.-> -> Still todo: Detect when a remote has been sucked dry, and actually delete-> it. --[[Joey]]-->> [[done]] --[[Joey]]
− doc/bugs/TransferScanner_crash_on_Android.mdwn
@@ -1,24 +0,0 @@-### Please describe the problem.--TransferScanner crashes trying to add a file.--### What steps will reproduce the problem?--Start the web app.--### What version of git-annex are you using? On what operating system?--4.20130709-g339d1e0 on Android.--### Please provide any additional information below.--There was a whole stack of nulls in some of those log lines as well. I've --[[!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--TransferScanner crashed: unknown response from git cat-file ("refs/heads/git-annex:289/20f/SHA256E-s85883241--3bf01cfd6a422f9b661ed335e6142bbdaf899cd71587bb3cc812256064c7071e missing",refs/heads/git-annex:289/20f/SHA256E-s85883241--3bf01cfd6a422f9b661ed335e6142bbdaf899cd71587bb3cc812256064c7071e\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00(7981 more elided)\00.log)-[2013-07-16 15:19:26 NZST] TransferScanner: warning TransferScanner crashed: unknown response from git cat-file ("refs/heads/git-annex:289/20f/SHA256E-s85883241--3bf01cfd6a422f9b661ed335e6142bbdaf899cd71587bb3cc812256064c7071e missing",refs/heads/git-annex:289/20f/SHA256E-s85883241--3bf01cfd6a422f9b661ed335e6142bbdaf899cd71587bb3cc812256064c7071e\00\00\00\00\00(7991 more elided)\00.log)-# End of transcript or log.-"""]]
− doc/bugs/Tries_to_upload_to_remote_although_remote_is_dead.mdwn
@@ -1,51 +0,0 @@-What steps will reproduce the problem?--I added a (encrypted) ssh remote and everything worked fine. Now I marked the remote as dead, but git-annex still tries to upload to this remote. I recognize this because it asks for my ssh and gpg keys passwords. --While transfering (or asking for the password), `git annex status` shows the following:-<pre>-supported backends: SHA256E SHA1E SHA512E SHA224E SHA384E SHA256 SHA1 SHA512 SHA224 SHA384 WORM URL-supported remote types: git S3 bup directory rsync web hook-trusted repositories: 0-semitrusted repositories: 2-	00000000-0000-0000-0000-000000000001 -- web- 	cd16b9c6-f464-11e1-9845-8749687232d2 -- here (Dell)-untrusted repositories: 0-dead repositories: 7-	11379fa0-ecd6-49e2-9bec-24fc19cc7b9f -- vserver.dbruhn.de_annex- 	2195e036-d2ef-4357-8c89-a9aaec23ebdc -- vserver-plain- 	4d066ea1-fb9f-45fd-990a-5c5c836f530e -- inTmp- 	bb276045-6ba6-488f-88d0-39a3c5f5134d -- vserver-enc- 	c49f3372-3fcf-49fc-b626-73ba4454c172 -- annexBare (bareAnnex)- 	e52645b3-bfb6-457d-b281-967353919e29 -- AnnexUSBFAT- 	ea3d6acc-716c-48e8-9b6b-993b90dcc1db -- vserver2-transfers in progress: -	uploading Schmidt/somefile.m4a--- to vserver2-available local disk space: 43 gigabytes (+1 megabyte reserved)-temporary directory size: 389 megabytes (clean up with git-annex unused)-local annex keys: 23-local annex size: 396 megabytes-known annex keys: 19-known annex size: 396 megabytes-bloom filter size: 16 mebibytes (0% full)-backend usage: -	SHA256E: 42-</pre>--As you can see, the `vserver2` remote is marked as dead but git-annex still tries to upload. This problem keeps occuring even after restarts. --What is the expected output? What do you see instead?--If I do not get the `dead` status wrong, git-annex should not use these remotes.---What version of git-annex are you using? On what operating system?--git-annex HEAD from yesterdays git. Ubuntu 12.10--Please provide any additional information below.--[[!tag /design/assistant moreinfo]]
− doc/bugs/Trouble_initializing_git_annex_on_NFS.mdwn
@@ -1,16 +0,0 @@-The following occurs in a directory that is shared on an NFS server:--    /media/mybook/movies $ git init-    Initialized empty Git repository in /media/mybook/movies/.git/-    /media/mybook/movies $ git annex init mybook-movies-    init mybook-movies -    git-annex: waitToSetLock: resource exhausted (No locks available)-    failed-    git-annex: init: 1 failed-    /media/mybook/movies $--This happens reliably.  Is there any way around it?  I have shell-access on the NFS server, but it is a NAS, so I don't think it is-capable of running git-annex.--[[done]]
− doc/bugs/True_backup_support.mdwn

file too large to diff

− doc/bugs/Truncated_file_transferred_via_S3.mdwn

file too large to diff

− doc/bugs/Unable_to_add_files_on_Android_due_to_weird_rename_error.mdwn

file too large to diff

− doc/bugs/Unable_to_import_feed.mdwn

file too large to diff

− doc/bugs/Unable_to_switch_back_to_direct_mode.mdwn

file too large to diff

− doc/bugs/Unable_to_sync_a_second_machine_through_Box.mdwn

file too large to diff

− doc/bugs/Unable_to_use_remotes_with_space_in_the_path.mdwn

file too large to diff

− doc/bugs/Unfortunate_interaction_with_Calibre.mdwn

file too large to diff

− doc/bugs/Unknown_remote_type_webdav.mdwn

file too large to diff

− doc/bugs/Update_dependency_on_certificate___62____61___1.3.3.mdwn

file too large to diff

− doc/bugs/Use_a_git_repository_on_the_server_don__39__t_work.mdwn

file too large to diff

− doc/bugs/Using_Github_as_remote_throws_proxy_errors.mdwn

file too large to diff

− doc/bugs/Using_a_revoked_GPG_key.mdwn

file too large to diff

− doc/bugs/WEBDAV_443.mdwn

file too large to diff

− doc/bugs/WEBDAV_443/comment_10_9ee2c5ed44295455af890caee7b06f1a._comment

file too large to diff

− doc/bugs/WEBDAV_443/comment_11_863a7d315212c9a8ab8f6fafa5d1b7f5._comment

file too large to diff

− doc/bugs/WEBDAV_443/comment_12_c17a4e23011e0a917dbe0ecf7e9f0cb5._comment

file too large to diff

− doc/bugs/WEBDAV_443/comment_13_3414416ff455d2fd1a7c7e7c4554b54d._comment

file too large to diff

− doc/bugs/WEBDAV_443/comment_14_e1da141eefb0445c217e5f5c119356da._comment

file too large to diff

− doc/bugs/WEBDAV_443/comment_15_41c3134bcc222b97bf183559723713d9._comment

file too large to diff

− doc/bugs/WEBDAV_443/comment_16_89621b526065b5bef753ce75db1af7b5._comment

file too large to diff

− doc/bugs/WEBDAV_443/comment_17_131a1b65c8008cf9f02c93d4fb75720b._comment

file too large to diff

− doc/bugs/WEBDAV_443/comment_18_b4f894a0b9ebb84ab73f6ffcf0778090._comment

file too large to diff

− doc/bugs/WEBDAV_443/comment_1_c6572ca1eaaf89b01c0ed99a4058412f._comment

file too large to diff

− doc/bugs/WEBDAV_443/comment_2_a357969cde382a91e13920ee1e9f711c._comment

file too large to diff

− doc/bugs/WEBDAV_443/comment_3_213815d6b827d467c60f3e8af925813b._comment

file too large to diff

− doc/bugs/WEBDAV_443/comment_4_b775be4b722fc7124d9fbe2d5d01cc9f._comment

file too large to diff

− doc/bugs/WEBDAV_443/comment_5_c4ea745da437e56b2426d1c2c00dfcec._comment

file too large to diff

− doc/bugs/WEBDAV_443/comment_6_ef05c0ae88fee9c626922c6064ffdf1e._comment

file too large to diff

− doc/bugs/WEBDAV_443/comment_7_eecabe8d5ed564cb540450770ca7d0b6._comment

file too large to diff

− doc/bugs/WEBDAV_443/comment_8_7f77ba8ebd90186d3b3949ae529ba393._comment

file too large to diff

− doc/bugs/WEBDAV_443/comment_9_87ebdc92b48d672964fb3f248c53600f._comment

file too large to diff

− doc/bugs/WORM:_Handle_long_filenames_correctly.mdwn

file too large to diff

− doc/bugs/Watcher_crashed:_addWatch:_does_not_exist.mdwn

file too large to diff

− doc/bugs/WebDAV_HandshakeFailed_.mdwn

file too large to diff

− doc/bugs/Webapp_fails_to_resolve_ipv6_hostname.mdwn

file too large to diff

− doc/bugs/Weird_behaviour_of_direct_and_indirect_annexes.mdwn

file too large to diff

− doc/bugs/Windows_and_Linux_in_direct_mode_confuses_git.mdwn

file too large to diff

− doc/bugs/Windows_build_test_failures.mdwn

file too large to diff

− doc/bugs/With_S3__44___GPG_ask_for_a_new_passphrase.mdwn

file too large to diff

− doc/bugs/Wrong_port_while_configuring_ssh_remote.mdwn

file too large to diff

− doc/bugs/__34__Adding_4923_files__34___is_really_slow.mdwn

file too large to diff

− doc/bugs/__34__drop__34___deletes_all_files_with_identical_content.mdwn

file too large to diff

− doc/bugs/__34__fatal:_bad_config_file__34__.mdwn

file too large to diff

− doc/bugs/__34__git_annex_watch__34___adds_map.dot.mdwn

file too large to diff

− doc/bugs/__34__make_test__34___fails_silently.mdwn

file too large to diff

− doc/bugs/__91__webapp__93___pause_syncing_with_specific_repository.mdwn

file too large to diff

− doc/bugs/__96__git_annex_fix__96___run_on_non-annexed_files_is_no-op.mdwn

file too large to diff

− doc/bugs/__96__git_annex_import__96___clobbers_mtime.mdwn

file too large to diff

− doc/bugs/__96__git_annex_sync__96___ignores_remotes.mdwn

file too large to diff

− doc/bugs/_impossible_to_switch_repositories_on_android__in_webapp.mdwn

file too large to diff

− doc/bugs/acl_not_honoured_in_rsync_remote.mdwn

file too large to diff

− doc/bugs/add_range_argument_to___34__git_annex_dropunused__34___.mdwn

file too large to diff

− doc/bugs/add_script-friendly_output_options.mdwn

file too large to diff

− doc/bugs/added_branches_makes___39__git_annex_unused__39___slow.mdwn

file too large to diff

− doc/bugs/adding_an_rsync.net_repo_give_an_gpg_error.mdwn

file too large to diff

− doc/bugs/addurl_--relaxed_with_--file_doesn__39__t_actually_relax.mdwn

file too large to diff

− doc/bugs/allows_repository_with_the_same_name_twice.mdwn

file too large to diff

− doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit.mdwn

file too large to diff

− doc/bugs/android_4.2.1__44___galaxy_nexus_java.lang.SecurityException.mdwn

file too large to diff

− doc/bugs/annex-rsync-options_shell-split_carelessly.mdwn

file too large to diff

− doc/bugs/annex.numcopies_not_overriden_by_--numcopies_option.mdwn

file too large to diff

− doc/bugs/annex_add_in_annex.mdwn

file too large to diff

− doc/bugs/annex_get_fails:___34__No_such_file_or_directory__34__.mdwn

file too large to diff

− doc/bugs/annex_get_over_SSH_is_very_slow.mdwn

file too large to diff

− doc/bugs/annex_unannex__47__uninit_should_handle_copies.mdwn

file too large to diff

− doc/bugs/another_build_error_in_assistant.mdwn

file too large to diff

− doc/bugs/archiving_git_repositories.mdwn

file too large to diff

− doc/bugs/assistant_-_GTalk_collision.mdwn

file too large to diff

− doc/bugs/assistant_does_not_list_remote___39__origin__39__.mdwn

file too large to diff

− doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add.mdwn

file too large to diff

− doc/bugs/assistant_doesn__39__t_sync_empty_directories.mdwn

file too large to diff

− doc/bugs/assistant_doesn__39__t_sync_file_permissions.mdwn

file too large to diff

− doc/bugs/assistant_hangs_during_commit.mdwn

file too large to diff

− doc/bugs/assistant_ignore_.gitignore.mdwn

file too large to diff

− doc/bugs/assistant_not_noticing_file_renames__44___not_fixing_files.mdwn

file too large to diff

− doc/bugs/assistant_syncs_with_remotes_even_when_all_remotes_disabled.mdwn

file too large to diff

− doc/bugs/authentication_to_rsync.net_fails.mdwn

file too large to diff

− doc/bugs/backend_version_upgrade_leaves_repo_unusable.mdwn

file too large to diff

− doc/bugs/bad_behaviour_with_file_names_with_newline_in_them.mdwn

file too large to diff

− doc/bugs/bad_comment_in_ssh_public_key_ssh-rsa.mdwn

file too large to diff

− doc/bugs/bare_git_repos.mdwn

file too large to diff

− doc/bugs/build_is_broken_at_commit_cc0e5b7.mdwn

file too large to diff

− doc/bugs/build_issue_with_8baff14054e65ecbe801eb66786a55fa5245cb30.mdwn

file too large to diff

− doc/bugs/build_issue_with_latest_release_0.20110522-1-gde817ba.mdwn

file too large to diff

− doc/bugs/build_problem_on_OSX.mdwn

file too large to diff

− doc/bugs/building_on_lenny.mdwn

file too large to diff

− doc/bugs/bup_initremote_failed_with_localhost_+_username.mdwn

file too large to diff

− doc/bugs/cabal_configure_is_broken_on_OSX_builds.mdwn

file too large to diff

− doc/bugs/can__39__t_annex_get_from_annex_in_direct_mode.mdwn

file too large to diff

− doc/bugs/cannot_add_file__44___get___34__user_error__34__.mdwn

file too large to diff

− doc/bugs/cannot_connect_to_xmpp_server.mdwn

file too large to diff

− doc/bugs/cannot_determine_uuid_for_origin.mdwn

file too large to diff

file too large to diff

− doc/bugs/case-insensitive.mdwn

file too large to diff

− doc/bugs/case_sensitivity_on_FAT.mdwn

file too large to diff

− doc/bugs/check_for_curl_in_configure.hs.mdwn

file too large to diff

− doc/bugs/clicking_back_in_the_web_browser_crashes.mdwn

file too large to diff

− doc/bugs/com.branchable.git-annex.assistant.plist_is_invalid.mdwn

file too large to diff

− doc/bugs/commitBuffer:_invalid_argument___40__invalid_character__41__.mdwn

file too large to diff

− doc/bugs/commit_f20a40f_breaks_on_OSX_as_mntent.h_doesn__39__t_exist.mdwn

file too large to diff

− doc/bugs/concurrent_git-annex_processes_can_lead_to_locking_issues.mdwn

file too large to diff

− doc/bugs/configurable_path_to_git-annex-shell.mdwn

file too large to diff

− doc/bugs/configure_script_should_detect_uuidgen_instead_of_just_uuid.mdwn

file too large to diff

− doc/bugs/conflicting_haskell_packages.mdwn

file too large to diff

− doc/bugs/conq:_invalid_command_syntax.mdwn

file too large to diff

− doc/bugs/copy_doesn__39__t_scale.mdwn

file too large to diff

− doc/bugs/copy_fast_confusing_with_broken_locationlog.mdwn

file too large to diff

− doc/bugs/creating_a_plain_directory_where_a_mountpoint_should_have_been.mdwn

file too large to diff

− doc/bugs/creating_a_remote_server_repository.mdwn

file too large to diff

− doc/bugs/creds_directory_not_automatically_created.mdwn

file too large to diff

− doc/bugs/cyclic_drop.mdwn

file too large to diff

− doc/bugs/direct_mode_assistant_in_subdir_confusion.mdwn

file too large to diff

− doc/bugs/direct_mode_renames.mdwn

file too large to diff

− doc/bugs/done.mdwn

file too large to diff

− doc/bugs/dotdot_problem.mdwn

file too large to diff

− doc/bugs/drop_fails_to_see_copies_that_whereis_sees.mdwn

file too large to diff

− doc/bugs/dropping_and_re-adding_from_web_remotes_doesn__39__t_work.mdwn

file too large to diff

− doc/bugs/dropping_files_with_a_URL_backend_fails.mdwn

file too large to diff

− doc/bugs/dropunused_doesn__39__t_handle_double_spaces_in_filename.mdwn

file too large to diff

− doc/bugs/dropunused_doesn__39__t_work_in_my_case__63__.mdwn

file too large to diff

− doc/bugs/encfs_accused_of_being_crippled.mdwn

file too large to diff

− doc/bugs/encrypted_S3_stalls.mdwn

file too large to diff

− doc/bugs/encryption_given_a_gpg_keyid_still_uses_symmetric_encryption.mdwn

file too large to diff

− doc/bugs/encryption_key_is_surprising.mdwn

file too large to diff

− doc/bugs/error_building_git-annex_3.20120624_using_cabal.mdwn

file too large to diff

− doc/bugs/error_on_only_repository_copy_deletion.mdwn

file too large to diff

− doc/bugs/error_propigation.mdwn

file too large to diff

− doc/bugs/error_when_using_repositories_with_non-ASCII_characters.mdwn

file too large to diff

− doc/bugs/error_with_file_names_starting_with_dash.mdwn

file too large to diff

− doc/bugs/extraneous_shell_escaping_for_rsync_remotes.mdwn

file too large to diff

− doc/bugs/fails_to_handle_lot_of_files.mdwn

file too large to diff

− doc/bugs/failure_to_return_to_indirect_mode_on_usb.mdwn

file too large to diff

− doc/bugs/fat_support.mdwn

file too large to diff

− doc/bugs/fat_support/comment_1_04bcc4795d431e8cb32293aab29bbfe2._comment

file too large to diff

− doc/bugs/fat_support/comment_2_bb4a97ebadb5c53809fc78431eabd7c8._comment

file too large to diff

− doc/bugs/fat_support/comment_3_df3b943bc1081a8f3f7434ae0c8e061e._comment

file too large to diff

− doc/bugs/fat_support/comment_4_90a8a15bedd94480945a374f9d706b86._comment

file too large to diff

− doc/bugs/fat_support/comment_5_64bbf89de0836673224b83fdefa0407b._comment

file too large to diff

− doc/bugs/fat_support/comment_6_a3b6000330c9c376611c228d746a1d55._comment

file too large to diff

− doc/bugs/fat_support/comment_7_a0ac7f2c44efc8116940c7b94b35e9d0._comment

file too large to diff

− doc/bugs/fat_support/comment_8_acc947643a635eb10a1bff92083a3506._comment

file too large to diff

− doc/bugs/fatal:_empty_ident_name.mdwn

file too large to diff

− doc/bugs/file_access__47__locking_issues_with_the_assitant.mdwn

file too large to diff

− doc/bugs/free_space_checking.mdwn

file too large to diff

− doc/bugs/fsck_output.mdwn

file too large to diff

− doc/bugs/fsck_should_double-check_when_a_content-check_fails.mdwn

file too large to diff

− doc/bugs/fsck_thinks_file_content_is_bad_when_it_isn__39__t.mdwn

file too large to diff

− doc/bugs/get_failed__44___but_remote_has_the_file.mdwn

file too large to diff

− doc/bugs/git-annex:_Cannot_decode_byte___39____92__xfc__39__.mdwn

file too large to diff

− doc/bugs/git-annex:_Not_in_a_git_repository._.mdwn

file too large to diff

− doc/bugs/git-annex:_fd:14:_hGetLine:_end_of_file.mdwn

file too large to diff

− doc/bugs/git-annex:_getUserEntryForID:_failed___40__Success__41__.mdwn

file too large to diff

− doc/bugs/git-annex_3.20130216.1_tests_are_broken.mdwn

file too large to diff

− doc/bugs/git-annex_add_should_repack_as_it_goes.mdwn

file too large to diff

− doc/bugs/git-annex_branch_corruption.mdwn

file too large to diff

− doc/bugs/git-annex_branch_push_race.mdwn

file too large to diff

− doc/bugs/git-annex_broken_on_Android_4.3.mdwn

file too large to diff

− doc/bugs/git-annex_directory_hashing_problems_on_osx.mdwn

file too large to diff

− doc/bugs/git-annex_dropunused_has_no_effect.mdwn

file too large to diff

− doc/bugs/git-annex_fix_not_noticing_file_renames.mdwn

file too large to diff

− doc/bugs/git-annex_get:_requested_key_is_not_present.mdwn

file too large to diff

− doc/bugs/git-annex_has_issues_with_git_when_staging__47__commiting_logs.mdwn

file too large to diff

− doc/bugs/git-annex_immediately_re-gets_dropped_files.mdwn

file too large to diff

− doc/bugs/git-annex_incorrectly_parses_bare_IPv6_addresses.mdwn

file too large to diff

− doc/bugs/git-annex_losing_rsync_remotes_with_encryption_enabled.mdwn

file too large to diff

− doc/bugs/git-annex_on_crippled_filesystem_can_still_failed_due_to_case_.mdwn

file too large to diff

− doc/bugs/git-annex_opens_too_many_files.mdwn

file too large to diff

− doc/bugs/git-annex_quit_unexpectedly___40__macosx__41__.mdwn

file too large to diff

− doc/bugs/git-annex_sync_broken_on_squeeze_backports.mdwn

file too large to diff

− doc/bugs/git-annex_thinks_files_are_in_repositories_they_are_not.mdwn

file too large to diff

− doc/bugs/git-annex_webapp_command_not_found.mdwn

file too large to diff

− doc/bugs/git_annex_add_..._adds_too_much.mdwn

file too large to diff

− doc/bugs/git_annex_add_eats_files_when_filename_is_too_long.mdwn

file too large to diff

− doc/bugs/git_annex_add_error_with_Andrew_File_System.mdwn

file too large to diff

− doc/bugs/git_annex_add_memory_leak.mdwn

file too large to diff

− doc/bugs/git_annex_add_removes_file_with_no_data_left.mdwn

file too large to diff

− doc/bugs/git_annex_assistant_--autostart_failed.mdwn

file too large to diff

− doc/bugs/git_annex_content_fails_with_a_parse_error.txt

file too large to diff

− doc/bugs/git_annex_copy_--fast_does_not_copy_files.mdwn

file too large to diff

− doc/bugs/git_annex_copy_-f_REMOTE_._doesn__39__t_work_as_expected.mdwn

file too large to diff

− doc/bugs/git_annex_copy_trying_to_connect_to_remotes_uninvolved.mdwn

file too large to diff

− doc/bugs/git_annex_does_nothing_useful.mdwn

file too large to diff

− doc/bugs/git_annex_doesn__39__t_work_in_Max_OS_X_10.9.mdwn

file too large to diff

− doc/bugs/git_annex_fork_bombs_on_gpg_file.mdwn

file too large to diff

− doc/bugs/git_annex_fsck_in_direct_mode_does_not_checksum_files.mdwn

file too large to diff

− doc/bugs/git_annex_fsck_is_a_no-op_in_bare_repos.mdwn

file too large to diff

− doc/bugs/git_annex_get_choke_when_remote_is_an_ssh_url_with_a_port.mdwn

file too large to diff

− doc/bugs/git_annex_gets_confused_about_remotes_with_dots_in_their_names.mdwn

file too large to diff

− doc/bugs/git_annex_initremote_needs_some___34__error_checking__34__.mdwn

file too large to diff

− doc/bugs/git_annex_initremote_walks_.git-annex.mdwn

file too large to diff

− doc/bugs/git_annex_map_has_problems_with_urls_containing___126__.mdwn

file too large to diff

− doc/bugs/git_annex_migrate_leaves_old_backend_versions_around.mdwn

file too large to diff

− doc/bugs/git_annex_should_use___39__git_add_-f__39___internally.mdwn

file too large to diff

− doc/bugs/git_annex_sync_in_direct_mode_does_not_honor_skip-worktree.mdwn

file too large to diff

− doc/bugs/git_annex_uninit_loses_content_when_interrupted.mdwn

file too large to diff

− doc/bugs/git_annex_uninit_removes_files_not_previously_added_to_annex.mdwn

file too large to diff

− doc/bugs/git_annex_unlock_is_not_atomic.mdwn

file too large to diff

− doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems.mdwn

file too large to diff

− doc/bugs/git_annex_unused_failes_on_empty_repository.mdwn

file too large to diff

− doc/bugs/git_annex_unused_seems_to_check_for_current_path.mdwn

file too large to diff

− doc/bugs/git_annex_upgrade_output_is_inconsistent_and_spammy.mdwn

file too large to diff

− doc/bugs/git_annex_version_should_without_being_in_a_repo_.mdwn

file too large to diff

− doc/bugs/git_annex_webapp_--listen_on_a_remote_linux_server.mdwn

file too large to diff

− doc/bugs/git_annex_webapp_runs_on_wine.mdwn

file too large to diff

− doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive.mdwn

file too large to diff

− doc/bugs/git_annix_breaks_git_commit_after_uninstall.mdwn

file too large to diff

− doc/bugs/git_defunct_processes___40__child_of_git-annex_assistant__41__.mdwn

file too large to diff

− doc/bugs/git_rename_detection_on_file_move.mdwn

file too large to diff

− doc/bugs/gix-annex_help_is_homicidal.mdwn

file too large to diff

− doc/bugs/glacier_from_multiple_repos.mdwn

file too large to diff

− doc/bugs/googlemail.mdwn

file too large to diff

− doc/bugs/gpg_bundled_with_OSX_build_fails.mdwn

file too large to diff

− doc/bugs/gpg_error_on_android.mdwn

file too large to diff

− doc/bugs/gpg_goes_to_100__37___cpu_on_bad_input_data.mdwn

file too large to diff

− doc/bugs/gpg_hangs_on_glacier_remote_creation.mdwn

file too large to diff

− doc/bugs/gpg_needs_--use-agent.mdwn

file too large to diff

− doc/bugs/hGetContents:_user_error.mdwn

file too large to diff

− doc/bugs/host_with_rysnc_installed__44___not_recognized.mdwn

file too large to diff

− doc/bugs/http_git_annex_404_retry.mdwn

file too large to diff

− doc/bugs/immediately_drops_files.mdwn

file too large to diff

− doc/bugs/importfeed_uses___34____95__foo__34___as_extension.mdwn

file too large to diff

− doc/bugs/inconsistent_use_of_SI_prefixes.mdwn

file too large to diff

− doc/bugs/internal_server_error_creating_repo_on_ssh_server.mdwn

file too large to diff

− doc/bugs/interrupting_migration_causes_problems.mdwn

file too large to diff

− doc/bugs/javascript_functions_qouting_issue.mdwn

file too large to diff

− doc/bugs/journal_commit_error_when_using_annex.mdwn

file too large to diff

− doc/bugs/long_running_assistant_causes_resource_starvation_on_OSX.mdwn

file too large to diff

− doc/bugs/lsof__47__committer_thread_loops_occassionally.mdwn

file too large to diff

− doc/bugs/make_SHA512E_the_default.mdwn

file too large to diff

− doc/bugs/make_install_can__39__t_be_used_with_sudo.mdwn

file too large to diff

− doc/bugs/make_install_doesn__39__t_create_git-annex-shell.mdwn

file too large to diff

− doc/bugs/making_annex-merge_try_a_fast-forward.mdwn

file too large to diff

− doc/bugs/map_not_respecting_annex_ssh_options__63__.mdwn

file too large to diff

− doc/bugs/merge_causes_out_of_memory_on_large_repos.mdwn

file too large to diff

− doc/bugs/migrated_files_not_showing_up_in_unused_list.mdwn

file too large to diff

− doc/bugs/minor_bug:_errors_are_not_verbose_enough.mdwn

file too large to diff

− doc/bugs/missing_dependency_in_git-annex-3.20130216.mdwn

file too large to diff

− doc/bugs/missing_kde__47__gnome_menu_item..mdwn

file too large to diff

− doc/bugs/moreinfo.mdwn

file too large to diff

− doc/bugs/nfs_mounted_repo_results_in_errors_on_drop_move.mdwn

file too large to diff

− doc/bugs/non-annexed_file_changed_to_annexed_on_typechange.mdwn

file too large to diff

− doc/bugs/not_possible_to_have_annex_on_a_separate_filesystem.mdwn

file too large to diff

− doc/bugs/old_data_isn__39__t_unused_after_migration.mdwn

file too large to diff

− doc/bugs/on--git-dir_and_--work-tree_options.mdwn

file too large to diff

− doc/bugs/ordering.mdwn

file too large to diff

− doc/bugs/pasting_into_annex_on_OSX.mdwn

file too large to diff

− doc/bugs/problem_commit_normal_links.mdwn

file too large to diff

− doc/bugs/problem_with_upgrade_v2_-__62___v3.mdwn

file too large to diff

− doc/bugs/problems_with_utf8_names.mdwn

file too large to diff

− doc/bugs/random_files_vanishing_when_assistant_gets_restarted.mdwn

file too large to diff

− doc/bugs/reinject_should_leave_file_in_place_on_checksum_mismatch.mdwn

file too large to diff

− doc/bugs/removable_device_configurator_chokes_on_spaces.mdwn

file too large to diff

− doc/bugs/rename:_permission_denied__44___after_direct_mode_switch.mdwn

file too large to diff

− doc/bugs/restart_daemon_required.mdwn

file too large to diff

− doc/bugs/rsync_remote_shows_no_progress.mdwn

file too large to diff

− doc/bugs/scp_interrupt_to_background.mdwn

file too large to diff

− doc/bugs/show_version_without_having_to_be_in_a_git_repo.mdwn

file too large to diff

− doc/bugs/signal_weirdness.mdwn

file too large to diff

− doc/bugs/smarter_flood_filling.mdwn

file too large to diff

file too large to diff

− doc/bugs/ssh_connection_caching_broken_on_NTFS.mdwn

file too large to diff

− doc/bugs/submodule_path_problem.mdwn

file too large to diff

− doc/bugs/test_suite_failure_on_samba_mount.mdwn

file too large to diff

− doc/bugs/test_suite_shouldn__39__t_fail_silently.mdwn

file too large to diff

− doc/bugs/tests_fail_when_there_is_no_global_.gitconfig_for_the_user.mdwn

file too large to diff

− doc/bugs/tests_failed_to_build_-_after_an_update_of_haskell_platform.mdwn

file too large to diff

− doc/bugs/three_character_directories_created.mdwn

file too large to diff

− doc/bugs/three_way_sync_via_S3_and_Jabber.mdwn

file too large to diff

− doc/bugs/tmp_file_handling.mdwn

file too large to diff

− doc/bugs/touch.hsc_has_problems_on_non-linux_based_systems.mdwn

file too large to diff

− doc/bugs/transferkey_fails_due_to_gpg.mdwn

file too large to diff

− doc/bugs/typo_in___34__ready_to_add_remote_server__34___message.mdwn

file too large to diff

− doc/bugs/unable_to_change_repository_group_of___34__here__34__.mdwn

file too large to diff

− doc/bugs/unannex_and_uninit_do_not_work_when_git_index_is_broken.mdwn

file too large to diff

− doc/bugs/unannex_command_doesn__39__t_all_files.mdwn

file too large to diff

− doc/bugs/unannex_removes_object_even_if_referred_to_by_others.mdwn

file too large to diff

− doc/bugs/unannex_vs_unlock_hook_confusion.mdwn

file too large to diff

− doc/bugs/undefined.mdwn

file too large to diff

− doc/bugs/unfinished_repos_in_webapp.mdwn

file too large to diff

− doc/bugs/unhappy_without_UTF8_locale.mdwn

file too large to diff

− doc/bugs/uninit_and_indirect_don__39__t_work_on_android.mdwn

file too large to diff

file too large to diff

− doc/bugs/uninit_does_not_work_in_old_repos.mdwn

file too large to diff

− doc/bugs/uninit_loses_data_if_git-annex_add_didn__39__t_complete.mdwn

file too large to diff

− doc/bugs/uninit_should_not_run_when_branch_git-annex_is_checked_out.mdwn

file too large to diff

− doc/bugs/unlock_fails_silently_with_directory_symlinks.mdwn

file too large to diff

− doc/bugs/unlock_not_working_on_os_x_10.6_-_cp:_illegal_option_--_-_.mdwn

file too large to diff

− doc/bugs/unlock_then_lock_of_uncommitted_file_loses_it.mdwn

file too large to diff

− doc/bugs/upgrade_left_untracked_.git-annex__47____42___directories.mdwn

file too large to diff

− doc/bugs/uploads_queued_to_annex-ignore_remotes.mdwn

file too large to diff

− doc/bugs/using_old_remote_format_generates_irritating_output.mdwn

file too large to diff

− doc/bugs/utf8.mdwn

file too large to diff

− doc/bugs/utf8/comment_10_f298b8b480d3ab2dd9c279589afcd0ea._comment

file too large to diff

− doc/bugs/utf8/comment_11_a8864a46f8154680beeea27449ac6f09._comment

file too large to diff

− doc/bugs/utf8/comment_12_2202c3479d19d306f31aac5a47b55e7d._comment

file too large to diff

− doc/bugs/utf8/comment_13_7044d2c5bb1c91ee37eb9868963a1ff2._comment

file too large to diff

− doc/bugs/utf8/comment_14_656b3caa16ae93b092fb5804fa575a3b._comment

file too large to diff

− doc/bugs/utf8/comment_15_25b3d4c47c45b72129b17b171a45c5f9._comment

file too large to diff

− doc/bugs/utf8/comment_16_2aaab9253bbc75012292c7b5a7d55696._comment

file too large to diff

− doc/bugs/utf8/comment_1_416ad6fb5f7379732129dc5283a7e550._comment

file too large to diff

− doc/bugs/utf8/comment_2_cd55f6bbeb145fd554f331dcff64f5e1._comment

file too large to diff

− doc/bugs/utf8/comment_3_bb583a419d6fa4e33e5364c4468b35c6._comment

file too large to diff

− doc/bugs/utf8/comment_4_cd8a22cfb70d9d21f0a5339ccc52ee93._comment

file too large to diff

− doc/bugs/utf8/comment_5_14eefd4bee283802e9c462fa20b7835c._comment

file too large to diff

− doc/bugs/utf8/comment_6_58d8b5bdb9f11e8c344e86a675a075dd._comment

file too large to diff

− doc/bugs/utf8/comment_7_00fa9672ce55b6bfa885b8a13287ac25._comment

file too large to diff

− doc/bugs/utf8/comment_8_a01e26fa0fafbc291020f53dbfdf6443._comment

file too large to diff

− doc/bugs/utf8/comment_9_b7c084be01ce985be51e48503fcba468._comment

file too large to diff

− doc/bugs/uuid.log_trust.log_and_remote.log_merge_wackiness.mdwn

file too large to diff

− doc/bugs/view_logs_fails:_Internal_Server_Error__internal_liftAnnex.mdwn

file too large to diff

− doc/bugs/watch_command_on_OSX_--_hangs_with_a_small_repo.mdwn

file too large to diff

− doc/bugs/watch_command_on_OSX_10.7.mdwn

file too large to diff

− doc/bugs/watcher_commits_unlocked_files.mdwn

file too large to diff

− doc/bugs/webapp_hang.mdwn

file too large to diff

− doc/bugs/webapp_hang/comment_1_08aa908a64d0fe2d50438d01545c3f01._comment

file too large to diff

− doc/bugs/webapp_hang/comment_2_2a21ac5657128a454f9deb77c4d18057._comment

file too large to diff

− doc/bugs/webapp_requires_reload_for_notification_bubbles.mdwn

file too large to diff

− doc/bugs/webapp_shows___34__Added_x_files__34___a_bit_ugly.mdwn

file too large to diff

− doc/bugs/webapp_usability:_put_the_notices_on_the_right.mdwn

file too large to diff

− doc/bugs/weird_local_clone_confuses.mdwn

file too large to diff

− doc/bugs/whereis_outputs_no_informaiton_for_unlocked_files.mdwn

file too large to diff

− doc/bugs/windows_install_failure.mdwn

file too large to diff

− doc/bugs/windows_port_-_can__39__t_directly_access_files.mdwn

file too large to diff

− doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_.mdwn

file too large to diff

− doc/bugs/wishlist:_generic_annex.cost-command.mdwn

file too large to diff

− doc/bugs/wishlist:_make_git_annex_reinject_work_in_direct_mode.mdwn

file too large to diff

− doc/bugs/wishlist:_more_descriptive_commit_messages_in_git-annex_branch.mdwn

file too large to diff

− doc/bugs/wishlist:_option_to_print_more_info_with___39__unused__39__.mdwn

file too large to diff

− doc/bugs/wishlist:_query_things_like_description__44___trust_level.mdwn

file too large to diff

− doc/bugs/wishlist:_simple_url_for_webapp.mdwn

file too large to diff

− doc/bugs/wishlist:_support_drop__44___find_on_special_remotes.mdwn

file too large to diff

− doc/bugs/xdg-user-dir_error.mdwn

file too large to diff

− doc/bugs/xmpp_needs_one_account_per_distinct_repository.mdwn

file too large to diff

− doc/bugs/yesod-default_is_needed_as_a_dependancy.mdwn

file too large to diff

− doc/bugs/yesod-form_missing.mdwn

file too large to diff

− doc/coding_style.mdwn

file too large to diff

− doc/comments.mdwn

file too large to diff

− doc/contact.mdwn

file too large to diff

− doc/copies.mdwn

file too large to diff

− doc/copies/comment_1_af9bee33777fb8a187b714fc8c5fb11d._comment

file too large to diff

− doc/design.mdwn

file too large to diff

− doc/design/assistant.mdwn

file too large to diff

− doc/design/assistant/OSX.mdwn

file too large to diff

− doc/design/assistant/OSX/comment_1_9290f6e6f265e906b08631224392b7bf._comment

file too large to diff

− doc/design/assistant/android.mdwn

file too large to diff

− doc/design/assistant/blog.mdwn

file too large to diff

− doc/design/assistant/blog/day_100__cursed_clouds.mdwn

file too large to diff

− doc/design/assistant/blog/day_102__very_high_level_programming.mdwn

file too large to diff

− doc/design/assistant/blog/day_103__bugfix_day.mdwn

file too large to diff

− doc/design/assistant/blog/day_104__misc.mdwn

file too large to diff

− doc/design/assistant/blog/day_105__lazy_Sunday.mdwn

file too large to diff

− doc/design/assistant/blog/day_106__lazy_Monday.mdwn

file too large to diff

− doc/design/assistant/blog/day_107__memory_leak.mdwn

file too large to diff

− doc/design/assistant/blog/day_108__another_zombie_outbreak.mdwn

file too large to diff

− doc/design/assistant/blog/day_109__dropping.mdwn

file too large to diff

− doc/design/assistant/blog/day_10__lsof.mdwn

file too large to diff

− doc/design/assistant/blog/day_110__more_dropping.mdwn

file too large to diff

− doc/design/assistant/blog/day_111__config_monitor.mdwn

file too large to diff

− doc/design/assistant/blog/day_113__notifier_work.mdwn

file too large to diff

− doc/design/assistant/blog/day_114__xmpp.mdwn

file too large to diff

− doc/design/assistant/blog/day_115__my_new_form.mdwn

file too large to diff

− doc/design/assistant/blog/day_116__the_segfault.mdwn

file too large to diff

− doc/design/assistant/blog/day_117__new_topologies.mdwn

file too large to diff

− doc/design/assistant/blog/day_118__monadic_discontinuity.mdwn

file too large to diff

− doc/design/assistant/blog/day_119__time_for_testing.mdwn

file too large to diff

− doc/design/assistant/blog/day_11__freebsd.mdwn

file too large to diff

− doc/design/assistant/blog/day_120__test_day.mdwn

file too large to diff

− doc/design/assistant/blog/day_121__buddy_list.mdwn

file too large to diff

− doc/design/assistant/blog/day_122__xmpp_pairing.mdwn

file too large to diff

− doc/design/assistant/blog/day_123__xmpp_insanity.mdwn

file too large to diff

− doc/design/assistant/blog/day_124__git_push_over_xmpp_groundwork.mdwn

file too large to diff

− doc/design/assistant/blog/day_125__xmpp_push_continues.mdwn

file too large to diff

− doc/design/assistant/blog/day_126__mr_watson_come_here.mdwn

file too large to diff

− doc/design/assistant/blog/day_127__xmpp_syncs.mdwn

file too large to diff

− doc/design/assistant/blog/day_128__last_xmpp_day.mdwn

file too large to diff

− doc/design/assistant/blog/day_129__release.mdwn

file too large to diff

− doc/design/assistant/blog/day_12__freebsd_redux.mdwn

file too large to diff

− doc/design/assistant/blog/day_130__what_now.mdwn

file too large to diff

− doc/design/assistant/blog/day_131__webdav_groundwork.mdwn

file too large to diff

− doc/design/assistant/blog/day_132__webdav_continued.mdwn

file too large to diff

− doc/design/assistant/blog/day_133__webdav_working.mdwn

file too large to diff

− doc/design/assistant/blog/day_134__box.com_configurator.mdwn

file too large to diff

− doc/design/assistant/blog/day_135__progress_revisited.mdwn

file too large to diff

− doc/design/assistant/blog/day_136__misc.mdwn

file too large to diff

− doc/design/assistant/blog/day_137__Glacier.mdwn

file too large to diff

− doc/design/assistant/blog/day_138__back.mdwn

file too large to diff

− doc/design/assistant/blog/day_139__catch_up.mdwn

file too large to diff

− doc/design/assistant/blog/day_13__kqueue_continued.mdwn

file too large to diff

− doc/design/assistant/blog/day_140__release_monday.mdwn

file too large to diff

− doc/design/assistant/blog/day_141__release_tuesday.mdwn

file too large to diff

− doc/design/assistant/blog/day_142__filling_in.mdwn

file too large to diff

− doc/design/assistant/blog/day_143__what_next.mdwn

file too large to diff

− doc/design/assistant/blog/day_144__webapp_work.mdwn

file too large to diff

− doc/design/assistant/blog/day_145__more_webapp_work.mdwn

file too large to diff

− doc/design/assistant/blog/day_146__meanwhile.mdwn

file too large to diff

− doc/design/assistant/blog/day_147__direct_mode.mdwn

file too large to diff

− doc/design/assistant/blog/day_148__direct_mode.mdwn

file too large to diff

− doc/design/assistant/blog/day_149__rainy_day.mdwn

file too large to diff

− doc/design/assistant/blog/day_14__kqueue_kqueue_kqueue.mdwn

file too large to diff

− doc/design/assistant/blog/day_14__thinking_about_syncing.mdwn

file too large to diff

− doc/design/assistant/blog/day_150__12:12.mdwn

file too large to diff

− doc/design/assistant/blog/day_151__direct_mode_toggle.mdwn

file too large to diff

− doc/design/assistant/blog/day_152__bugfixes.mdwn

file too large to diff

− doc/design/assistant/blog/day_153__hibernation.mdwn

file too large to diff

− doc/design/assistant/blog/day_154__direct_mode_merging.mdwn

file too large to diff

− doc/design/assistant/blog/day_155__bugfixes.mdwn

file too large to diff

− doc/design/assistant/blog/day_156_and_157__direct_mode_assistant.mdwn

file too large to diff

− doc/design/assistant/blog/day_158__fsevents.mdwn

file too large to diff

− doc/design/assistant/blog/day_159__fsevents_and_assistant.mdwn

file too large to diff

− doc/design/assistant/blog/day_15__its_aliiive.mdwn

file too large to diff

− doc/design/assistant/blog/day_160__finishing_up_direct_mode.mdwn

file too large to diff

− doc/design/assistant/blog/day_161__release_day.mdwn

file too large to diff

− doc/design/assistant/blog/day_162__UI.mdwn

file too large to diff

− doc/design/assistant/blog/day_163__free_features.mdwn

file too large to diff

− doc/design/assistant/blog/day_164__bugfixes.mdwn

file too large to diff

− doc/design/assistant/blog/day_165__release_day.mdwn

file too large to diff

− doc/design/assistant/blog/day_166__a_short_long_day.mdwn

file too large to diff

− doc/design/assistant/blog/day_167__safe_direct_mode_transfers.mdwn

file too large to diff

− doc/design/assistant/blog/day_168__back_to_theme.mdwn

file too large to diff

− doc/design/assistant/blog/day_169__direct_mode_is_safe.mdwn

file too large to diff

− doc/design/assistant/blog/day_16__more_robust_syncing.mdwn

file too large to diff

− doc/design/assistant/blog/day_170__bugfixes_and_release.mdwn

file too large to diff

− doc/design/assistant/blog/day_171__logs.mdwn

file too large to diff

− doc/design/assistant/blog/day_172__short_day.mdwn

file too large to diff

− doc/design/assistant/blog/day_173__snow_day.mdwn

file too large to diff

− doc/design/assistant/blog/day_174__last_weekend_before_AU.mdwn

file too large to diff

− doc/design/assistant/blog/day_175__pacific_features.mdwn

file too large to diff

− doc/design/assistant/blog/day_176__thread_management.mdwn

file too large to diff

− doc/design/assistant/blog/day_178__bus_hacking.mdwn

file too large to diff

− doc/design/assistant/blog/day_179__brief_updates.mdwn

file too large to diff

− doc/design/assistant/blog/day_17__push_queue_prune.mdwn

file too large to diff

− doc/design/assistant/blog/day_180__back.mdwn

file too large to diff

− doc/design/assistant/blog/day_181__triage.mdwn

file too large to diff

− doc/design/assistant/blog/day_182__it_begins.mdwn

file too large to diff

− doc/design/assistant/blog/day_183__plan_b.mdwn

file too large to diff

− doc/design/assistant/blog/day_184__just_wanna_run_something.mdwn

file too large to diff

− doc/design/assistant/blog/day_185__android_liftoff.mdwn

file too large to diff

− doc/design/assistant/blog/day_186__Android_success.mdwn

file too large to diff

− doc/design/assistant/blog/day_187__porting_utilities.mdwn

file too large to diff

− doc/design/assistant/blog/day_188__crippled_filesystem_support.mdwn

file too large to diff

− doc/design/assistant/blog/day_189__more_crippling.mdwn

file too large to diff

− doc/design/assistant/blog/day_18__merging.mdwn

file too large to diff

− doc/design/assistant/blog/day_190-191__weekend.mdwn

file too large to diff

− doc/design/assistant/blog/day_192_193__more_porting.mdwn

file too large to diff

− doc/design/assistant/blog/day_194__nice_moment.mdwn

file too large to diff

− doc/design/assistant/blog/day_195__real_android_app.mdwn

file too large to diff

− doc/design/assistant/blog/day_196__android_bugfixes.mdwn

file too large to diff

− doc/design/assistant/blog/day_197__template_haskell.mdwn

file too large to diff

− doc/design/assistant/blog/day_198__bugfixes.mdwn

file too large to diff

− doc/design/assistant/blog/day_199__wrapping_up_Android_for_now.mdwn

file too large to diff

− doc/design/assistant/blog/day_19__random_improvements.mdwn

file too large to diff

− doc/design/assistant/blog/day_1__inotify.mdwn

file too large to diff

− doc/design/assistant/blog/day_200__release_day.mdwn

file too large to diff

− doc/design/assistant/blog/day_201__real_Android_wrapup.mdwn

file too large to diff

− doc/design/assistant/blog/day_201__real_Android_wrapup/fib.png

file too large to diff

− doc/design/assistant/blog/day_201__working_web_server.mdwn

file too large to diff

− doc/design/assistant/blog/day_203__procrastination.mdwn

file too large to diff

− doc/design/assistant/blog/day_204__deprocrastination.mdwn

file too large to diff

− doc/design/assistant/blog/day_205_206__rainy_day__snow_day.mdwn

file too large to diff

− doc/design/assistant/blog/day_207__XMPP.mdwn

file too large to diff

− doc/design/assistant/blog/day_208__bugfixes.mdwn

file too large to diff

− doc/design/assistant/blog/day_209__The_Bug.mdwn

file too large to diff

− doc/design/assistant/blog/day_20__data_transfer_design.mdwn

file too large to diff

− doc/design/assistant/blog/day_210__spring.mdwn

file too large to diff

− doc/design/assistant/blog/day_211__zooming_along.mdwn

file too large to diff

− doc/design/assistant/blog/day_212__accidental_all_nighter.mdwn

file too large to diff

− doc/design/assistant/blog/day_213__costs.mdwn

file too large to diff

− doc/design/assistant/blog/day_214__release_day.mdwn

file too large to diff

− doc/design/assistant/blog/day_215__dashboard_UI_refresh.mdwn

file too large to diff

− doc/design/assistant/blog/day_216__more_bugfixes.mdwn

file too large to diff

− doc/design/assistant/blog/day_217__nothing.mdwn

file too large to diff

− doc/design/assistant/blog/day_219__bug_triage.mdwn

file too large to diff

− doc/design/assistant/blog/day_21__transfer_tracking.mdwn

file too large to diff

− doc/design/assistant/blog/day_220__performance.mdwn

file too large to diff

− doc/design/assistant/blog/day_221__this_and_that.mdwn

file too large to diff

− doc/design/assistant/blog/day_222__back.mdwn

file too large to diff

− doc/design/assistant/blog/day_223__progress_revisited.mdwn

file too large to diff

− doc/design/assistant/blog/day_224__annex.largefiles.mdwn

file too large to diff

− doc/design/assistant/blog/day_225__back_from_the_dead.mdwn

file too large to diff

− doc/design/assistant/blog/day_226__poll_results.mdwn

file too large to diff

− doc/design/assistant/blog/day_227__bigfixing_all_day_today.mdwn

file too large to diff

− doc/design/assistant/blog/day_228__more_work_on_repository_removals.mdwn

file too large to diff

− doc/design/assistant/blog/day_229__rainy_day_bugfixes.mdwn

file too large to diff

− doc/design/assistant/blog/day_22__horrible_option_parsing_hack.mdwn

file too large to diff

− doc/design/assistant/blog/day_230__Mom.mdwn

file too large to diff

− doc/design/assistant/blog/day_231__insert_title.mdwn

file too large to diff

− doc/design/assistant/blog/day_232__headless_webapp.mdwn

file too large to diff

− doc/design/assistant/blog/day_233__taxes.mdwn

file too large to diff

− doc/design/assistant/blog/day_234__clean_shutdown.mdwn

file too large to diff

− doc/design/assistant/blog/day_235__birthday.mdwn

file too large to diff

− doc/design/assistant/blog/day_236__evil_splicer.mdwn

file too large to diff

− doc/design/assistant/blog/day_237__gnome-keyring_craziness.mdwn

file too large to diff

− doc/design/assistant/blog/day_238__back_to_Android.mdwn

file too large to diff

− doc/design/assistant/blog/day_239__bugfixes_and_frustration.mdwn

file too large to diff

− doc/design/assistant/blog/day_23__transfer_watching.mdwn

file too large to diff

− doc/design/assistant/blog/day_240__it_builds.mdwn

file too large to diff

− doc/design/assistant/blog/day_241__cleanup.mdwn

file too large to diff

− doc/design/assistant/blog/day_242__more_porting.mdwn

file too large to diff

− doc/design/assistant/blog/day_243__in_the_field.mdwn

file too large to diff

− doc/design/assistant/blog/day_244__android_porting.mdwn

file too large to diff

− doc/design/assistant/blog/day_245__misc.mdwn

file too large to diff

− doc/design/assistant/blog/day_246__bug_treadmill.mdwn

file too large to diff

− doc/design/assistant/blog/day_247__performance_tuning.mdwn

file too large to diff

− doc/design/assistant/blog/day_248__Internet_Archive.mdwn

file too large to diff

− doc/design/assistant/blog/day_249__quiet_day.mdwn

file too large to diff

− doc/design/assistant/blog/day_24__airport_digressions.mdwn

file too large to diff

− doc/design/assistant/blog/day_250__stymied.mdwn

file too large to diff

− doc/design/assistant/blog/day_251__xmpp_improvements.mdwn

file too large to diff

− doc/design/assistant/blog/day_252__release_day.mdwn

file too large to diff

− doc/design/assistant/blog/day_253__OMG.mdwn

file too large to diff

− doc/design/assistant/blog/day_254__Android_app_polishing.mdwn

file too large to diff

− doc/design/assistant/blog/day_255__Debian_release_day.mdwn

file too large to diff

− doc/design/assistant/blog/day_256__8bit.mdwn

file too large to diff

− doc/design/assistant/blog/day_257__rainy_day.mdwn

file too large to diff

− doc/design/assistant/blog/day_258__beginning_of_the_end.mdwn

file too large to diff

− doc/design/assistant/blog/day_259__Android_dominos_toppling.mdwn

file too large to diff

− doc/design/assistant/blog/day_25__transfer_queueing.mdwn

file too large to diff

− doc/design/assistant/blog/day_260__Windows_dev_environment.mdwn

file too large to diff

− doc/design/assistant/blog/day_261__Windows_first_stage_complete.mdwn

file too large to diff

− doc/design/assistant/blog/day_262__DOS_path_separators.mdwn

file too large to diff

− doc/design/assistant/blog/day_263_catching_up.mdwn

file too large to diff

− doc/design/assistant/blog/day_264__Windows_second_stage_complete.mdwn

file too large to diff

− doc/design/assistant/blog/day_265__correctness.mdwn

file too large to diff

− doc/design/assistant/blog/day_266__release_day.mdwn

file too large to diff

− doc/design/assistant/blog/day_267__windows_autobuilder.mdwn

file too large to diff

− doc/design/assistant/blog/day_268__core_monad_change.mdwn

file too large to diff

− doc/design/assistant/blog/day_269__bugfixes.mdwn

file too large to diff

− doc/design/assistant/blog/day_26__dying_drives.mdwn

file too large to diff

− doc/design/assistant/blog/day_270__release_and_xmpp.mdwn

file too large to diff

− doc/design/assistant/blog/day_271__more_xmpp.mdwn

file too large to diff

− doc/design/assistant/blog/day_272__fuzz_tester.mdwn

file too large to diff

− doc/design/assistant/blog/day_273-274__fun.mdwn

file too large to diff

− doc/design/assistant/blog/day_275__working_hard_or.mdwn

file too large to diff

− doc/design/assistant/blog/day_276__fuzzing_continues.mdwn

file too large to diff

− doc/design/assistant/blog/day_277__private_static_protected_void.mdwn

file too large to diff

− doc/design/assistant/blog/day_278__winding_down.mdwn

file too large to diff

− doc/design/assistant/blog/day_279__final_release_prep.mdwn

file too large to diff

− doc/design/assistant/blog/day_27__robust_transfers.mdwn

file too large to diff

− doc/design/assistant/blog/day_28-35__threaded_runtime_tarpit.mdwn

file too large to diff

− doc/design/assistant/blog/day_280__yesod.mdwn

file too large to diff

− doc/design/assistant/blog/day_281__back.mdwn

file too large to diff

− doc/design/assistant/blog/day_282-283__caught_up.mdwn

file too large to diff

− doc/design/assistant/blog/day_284__porting.mdwn

file too large to diff

− doc/design/assistant/blog/day_285__fixed_the_archive_directory_loop.mdwn

file too large to diff

− doc/design/assistant/blog/day_286__Windows_test_suite.mdwn

file too large to diff

− doc/design/assistant/blog/day_287__niceness.mdwn

file too large to diff

− doc/design/assistant/blog/day_288__success_stories.mdwn

file too large to diff

− doc/design/assistant/blog/day_289__back_in_the_swing.mdwn

file too large to diff

− doc/design/assistant/blog/day_290__https_release.mdwn

file too large to diff

− doc/design/assistant/blog/day_291__--all.mdwn

file too large to diff

− doc/design/assistant/blog/day_292__bugfixes.mdwn

file too large to diff

− doc/design/assistant/blog/day_293__gpg_builds.mdwn

file too large to diff

− doc/design/assistant/blog/day_294__release_day.mdwn

file too large to diff

− doc/design/assistant/blog/day_295__balls_in_the_air.mdwn

file too large to diff

− doc/design/assistant/blog/day_296__new_crowdfunding_campaign.mdwn

file too large to diff

− doc/design/assistant/blog/day_297__back_to_work.mdwn

file too large to diff

− doc/design/assistant/blog/day_298__exceptional.mdwn

file too large to diff

− doc/design/assistant/blog/day_299__bugfixing.mdwn

file too large to diff

− doc/design/assistant/blog/day_2__races.mdwn

file too large to diff

− doc/design/assistant/blog/day_300__new_logo.mdwn

file too large to diff

− doc/design/assistant/blog/day_301__direct_unannex.mdwn

file too large to diff

− doc/design/assistant/blog/day_302_release_day.mdwn

file too large to diff

− doc/design/assistant/blog/day_303__oops.mdwn

file too large to diff

− doc/design/assistant/blog/day_304__dropunused_safety.mdwn

file too large to diff

− doc/design/assistant/blog/day_305__interesting_bugs.mdwn

file too large to diff

− doc/design/assistant/blog/day_306__offtopic.mdwn

file too large to diff

− doc/design/assistant/blog/day_307__buuuugs.mdwn

file too large to diff

− doc/design/assistant/blog/day_308__ssh-agent.mdwn

file too large to diff

− doc/design/assistant/blog/day_309__filenames.mdwn

file too large to diff

− doc/design/assistant/blog/day_310__release_day.mdwn

file too large to diff

− doc/design/assistant/blog/day_311__Windows_porting.mdwn

file too large to diff

− doc/design/assistant/blog/day_312__DebConf_midpoint.mdwn

file too large to diff

− doc/design/assistant/blog/day_313__back.mdwn

file too large to diff

− doc/design/assistant/blog/day_314__quvi.mdwn

file too large to diff

− doc/design/assistant/blog/day_315__backlog.mdwn

file too large to diff

− doc/design/assistant/blog/day_316__day_off.mdwn

file too large to diff

− doc/design/assistant/blog/day_317__misc.mdwn

file too large to diff

− doc/design/assistant/blog/day_36__minimal_test_case.mdwn

file too large to diff

− doc/design/assistant/blog/day_37__back.mdwn

file too large to diff

− doc/design/assistant/blog/day_39__twice_is_enemy_action.mdwn

file too large to diff

− doc/design/assistant/blog/day_3__more_races.mdwn

file too large to diff

− doc/design/assistant/blog/day_40__dbus.mdwn

file too large to diff

− doc/design/assistant/blog/day_41__foo.mdwn

file too large to diff

− doc/design/assistant/blog/day_42__the_answer.mdwn

file too large to diff

− doc/design/assistant/blog/day_43__simple_scanner.mdwn

file too large to diff

− doc/design/assistant/blog/day_44__webapp_basics.mdwn

file too large to diff

− doc/design/assistant/blog/day_45__long_polling.mdwn

file too large to diff

− doc/design/assistant/blog/day_45__long_polling/full.png

file too large to diff

− doc/design/assistant/blog/day_45__long_polling/phone.png

file too large to diff

− doc/design/assistant/blog/day_46__notification_pools.mdwn

file too large to diff

− doc/design/assistant/blog/day_47__alert_messages.mdwn

file too large to diff

− doc/design/assistant/blog/day_48__intro.mdwn

file too large to diff

− doc/design/assistant/blog/day_49__first_run_experience.mdwn

file too large to diff

− doc/design/assistant/blog/day_4__speed.mdwn

file too large to diff

− doc/design/assistant/blog/day_50__directory_name.mdwn

file too large to diff

− doc/design/assistant/blog/day_51__desktop.mdwn

file too large to diff

− doc/design/assistant/blog/day_52__file_browser.mdwn

file too large to diff

− doc/design/assistant/blog/day_54__adding_removable_drives.mdwn

file too large to diff

− doc/design/assistant/blog/day_55__alerts.mdwn

file too large to diff

− doc/design/assistant/blog/day_56__transfer_control.mdwn

file too large to diff

− doc/design/assistant/blog/day_57__afk.mdwn

file too large to diff

− doc/design/assistant/blog/day_58__more_transfer_control.mdwn

file too large to diff

− doc/design/assistant/blog/day_59__dinner.mdwn

file too large to diff

− doc/design/assistant/blog/day_5__committing.mdwn

file too large to diff

− doc/design/assistant/blog/day_60__taking_stock.mdwn

file too large to diff

− doc/design/assistant/blog/day_61__network_connection_detection.mdwn

file too large to diff

− doc/design/assistant/blog/day_62__smarter_syncing.mdwn

file too large to diff

− doc/design/assistant/blog/day_63__transfer_retries.mdwn

file too large to diff

− doc/design/assistant/blog/day_64__syncing_robustly.mdwn

file too large to diff

− doc/design/assistant/blog/day_65__transfer_polish.mdwn

file too large to diff

− doc/design/assistant/blog/day_66__the_merge.mdwn

file too large to diff

− doc/design/assistant/blog/day_67__progress_bars.mdwn

file too large to diff

− doc/design/assistant/blog/day_68__transfers.mdwn

file too large to diff

− doc/design/assistant/blog/day_69__build_fixes.mdwn

file too large to diff

− doc/design/assistant/blog/day_6__polish.mdwn

file too large to diff

− doc/design/assistant/blog/day_70__adding_ssh_remotes.mdwn

file too large to diff

− doc/design/assistant/blog/day_71__ssh_probing.mdwn

file too large to diff

− doc/design/assistant/blog/day_73__rsync.net_configurator.mdwn

file too large to diff

− doc/design/assistant/blog/day_74__bits_and_peices.mdwn

file too large to diff

− doc/design/assistant/blog/day_75__zeromq_and_pairing.mdwn

file too large to diff

− doc/design/assistant/blog/day_76__pairing.mdwn

file too large to diff

− doc/design/assistant/blog/day_77_alert_buttons.mdwn

file too large to diff

− doc/design/assistant/blog/day_78__pairing_continued.mdwn

file too large to diff

− doc/design/assistant/blog/day_79__pairing_finished.mdwn

file too large to diff

− doc/design/assistant/blog/day_7__bugfixes.mdwn

file too large to diff

− doc/design/assistant/blog/day_7__bugfixes/profile.png

file too large to diff

− doc/design/assistant/blog/day_7__bugfixes/profile2.png

file too large to diff

− doc/design/assistant/blog/day_80__default_backend.mdwn

file too large to diff

− doc/design/assistant/blog/day_81__enabling_pre-existing_special_remotes.mdwn

file too large to diff

− doc/design/assistant/blog/day_82__git-annex_branch_work.mdwn

file too large to diff

− doc/design/assistant/blog/day_83__3-way.mdwn

file too large to diff

− doc/design/assistant/blog/day_84__deferred_downloads.mdwn

file too large to diff

− doc/design/assistant/blog/day_85__more_foundation_work.mdwn

file too large to diff

− doc/design/assistant/blog/day_86__towards_the_beta.mdwn

file too large to diff

− doc/design/assistant/blog/day_87__more_progress_progress.mdwn

file too large to diff

− doc/design/assistant/blog/day_88__progressbars_still_progressing.mdwn

file too large to diff

− doc/design/assistant/blog/day_89__final_polish.mdwn

file too large to diff

− doc/design/assistant/blog/day_8__speed.mdwn

file too large to diff

− doc/design/assistant/blog/day_90__beta.mdwn

file too large to diff

− doc/design/assistant/blog/day_91__break.mdwn

file too large to diff

− doc/design/assistant/blog/day_92__S3.mdwn

file too large to diff

− doc/design/assistant/blog/day_93__OSX_standalone_app.mdwn

file too large to diff

− doc/design/assistant/blog/day_93__easy_install.mdwn

file too large to diff

− doc/design/assistant/blog/day_95__repository_groups.mdwn

file too large to diff

− doc/design/assistant/blog/day_96__revisiting_file_adds.mdwn

file too large to diff

− doc/design/assistant/blog/day_97__stuffing.mdwn

file too large to diff

− doc/design/assistant/blog/day_98__preferred_content.mdwn

file too large to diff

− doc/design/assistant/blog/day_99_shotgun.mdwn

file too large to diff

− doc/design/assistant/blog/day_9__correctness.mdwn

file too large to diff

− doc/design/assistant/chunks.mdwn

file too large to diff

− doc/design/assistant/cloud.mdwn

file too large to diff

− doc/design/assistant/comment_10_f2233fad55c20686cf299bf6788f1f23._comment

file too large to diff

− doc/design/assistant/comment_11_a38f0f21c2346e65b786d791b6829f9b._comment

file too large to diff

− doc/design/assistant/comment_12_5e991177d6577384f39a36ae02f5f574._comment

file too large to diff

− doc/design/assistant/comment_13_f8625c6f43b58847840df338a73b7972._comment

file too large to diff

− doc/design/assistant/comment_14_c37ef5931b0f5c1f808083e0d636a208._comment

file too large to diff

− doc/design/assistant/comment_15_68c98a27083567f20c2e6bc2a760991b._comment

file too large to diff

− doc/design/assistant/comment_16_8e6788c817c60371d2a2f158e1a65f87._comment

file too large to diff

− doc/design/assistant/comment_17_97bdfacac5ac492281c9454ee4c0228e._comment

file too large to diff

− doc/design/assistant/comment_18_53137b2df4913496c0afb2d895aa4ee2._comment

file too large to diff

− doc/design/assistant/comment_19_ff1b0ba57e22ed757ec3fc5400b5e43e._comment

file too large to diff

− doc/design/assistant/comment_1_a48fcfbf97f0a373ea375cd8f07f0fc8._comment

file too large to diff

− doc/design/assistant/comment_20_099da245e3276fa84f5e14312d186621._comment

file too large to diff

− doc/design/assistant/comment_2_6d3552414fdcc2ed3244567e6c67989d._comment

file too large to diff

− doc/design/assistant/comment_3_05223be50c889b2ed6bc4abf74116450._comment

file too large to diff

− doc/design/assistant/comment_4_fbbd93b55803ae21e6ba4b6568c2fafd._comment

file too large to diff

− doc/design/assistant/comment_5_f4e9af3fed6c27e8ff39badb9794064d._comment

file too large to diff

− doc/design/assistant/comment_6_c7ad07cade1f44f9a8b61f92225bb9c5._comment

file too large to diff

− doc/design/assistant/comment_7_609d38e993267195a80fecd84c93d1e2._comment

file too large to diff

− doc/design/assistant/comment_8_22b818e1a2a825efb78139271a14f944._comment

file too large to diff

− doc/design/assistant/comment_9_d052e2142da8b4838fb1edf791ea23ae._comment

file too large to diff

− doc/design/assistant/configurators.mdwn

file too large to diff

− doc/design/assistant/deltas.mdwn

file too large to diff

− doc/design/assistant/desymlink.mdwn

file too large to diff

− doc/design/assistant/disaster_recovery.mdwn

file too large to diff

− doc/design/assistant/encrypted_git_remotes.mdwn

file too large to diff

− doc/design/assistant/gpgkeys.mdwn

file too large to diff

− doc/design/assistant/inotify.mdwn

file too large to diff

− doc/design/assistant/leftovers.mdwn

file too large to diff

− doc/design/assistant/more_cloud_providers.mdwn

file too large to diff

− doc/design/assistant/pairing.mdwn

file too large to diff

− doc/design/assistant/partial_content.mdwn

file too large to diff

− doc/design/assistant/polls.mdwn

file too large to diff

− doc/design/assistant/polls/Android.mdwn

file too large to diff

− doc/design/assistant/polls/Android_default_directory.mdwn

file too large to diff

− doc/design/assistant/polls/goals_for_April.mdwn

file too large to diff

− doc/design/assistant/polls/prioritizing_special_remotes.mdwn

file too large to diff

− doc/design/assistant/progressbars.mdwn

file too large to diff

− doc/design/assistant/rate_limiting.mdwn

file too large to diff

− doc/design/assistant/screenshot/firstrun.png

file too large to diff

− doc/design/assistant/screenshot/intro.png

file too large to diff

− doc/design/assistant/sshpassword.mdwn

file too large to diff

− doc/design/assistant/syncing.mdwn

file too large to diff

− doc/design/assistant/todo.mdwn

file too large to diff

− doc/design/assistant/transfer_control.mdwn

file too large to diff

− doc/design/assistant/webapp.mdwn

file too large to diff

− doc/design/assistant/windows.mdwn

file too large to diff

− doc/design/assistant/xmpp.mdwn

file too large to diff

− doc/design/assistant/xmpp_security.mdwn

file too large to diff

− doc/design/encryption.mdwn

file too large to diff

− doc/design/encryption/comment_1_4715ffafb3c4a9915bc33f2b26aaa9c1._comment

file too large to diff

− doc/design/encryption/comment_2_a610b3d056a059899178859a3a821ea5._comment

file too large to diff

− doc/design/encryption/comment_3_cca186a9536cd3f6e86994631b14231c._comment

file too large to diff

− doc/design/encryption/comment_4_8f3ba3e504b058791fc6e6f9c38154cf._comment

file too large to diff

− doc/design/encryption/comment_5_520e60aa53217b5ba428d4c05d897dee._comment

file too large to diff

− doc/design/encryption/comment_6_d677fead0fe0c543f48f07d85f83f592._comment

file too large to diff

− doc/design/encryption/comment_7_c1c38a09b1276e29adc3ba564dc0fe4e._comment

file too large to diff

− doc/design/gcrypt.mdwn

file too large to diff

− doc/design/roadmap.mdwn

file too large to diff

− doc/devblog.mdwn

file too large to diff

− doc/devblog/day_-1__drop_dead.mdwn

file too large to diff

− doc/devblog/day_-3__.mdwn

file too large to diff

− doc/devblog/day_-4__forgetting.mdwn

file too large to diff

− doc/devblog/day_1__inauspicious_beginning.mdwn

file too large to diff

− doc/devblog/day_2__new_laptop.mdwn

file too large to diff

− doc/devblog/day_3__gcrypt_uuids.mdwn

file too large to diff

− doc/devblog/day_4__unexpected_windows_day.mdwn

file too large to diff

− doc/devblog/day_5__gcrypt_special_remote_part_1.mdwn

file too large to diff

− doc/devblog/day_6__gcrypt_fully_working.mdwn

file too large to diff

− doc/devblog/moving_blogs.mdwn

file too large to diff

− doc/devblog/moving_blogs/comment_1_6caa7e67461a6ea5de8155ae9cf75fab._comment

file too large to diff

− doc/devblog/moving_blogs/comment_2_e3e2048fc2397b87a2f29c9fe49394cb._comment

file too large to diff

− doc/direct_mode.mdwn

file too large to diff

− doc/direct_mode/comment_10_94284a476604e9c812b7ee475ca22959._comment

file too large to diff

− doc/direct_mode/comment_11_1c79c93f4b17cfc354ab920e3775cc60._comment

file too large to diff

− doc/direct_mode/comment_12_1b5218fdb6ee362d6df68ff1229590d4._comment

file too large to diff

− doc/direct_mode/comment_13_55108ac736ea450df89332ba5de4a208._comment

file too large to diff

− doc/direct_mode/comment_14_ff4ffc2aabc5fd174d7386ef13860f78._comment

file too large to diff

− doc/direct_mode/comment_15_1cd32456630b25d5aaa6d2763e6eb384._comment

file too large to diff

− doc/direct_mode/comment_1_93fc31e8dc0ad16248a2593a1482d375._comment

file too large to diff

− doc/direct_mode/comment_2_7f7086b34ed136851963f145868a1d23._comment

file too large to diff

− doc/direct_mode/comment_3_8020d74bddf0e38b0a297e5dae7c217b._comment

file too large to diff

− doc/direct_mode/comment_4_97c26bd82f623a3b2d56bab4afff0126._comment

file too large to diff

− doc/direct_mode/comment_5_42363bf0367f935b3eee8ad3d2eaf5cf._comment

file too large to diff

− doc/direct_mode/comment_6_5f03b1686c1fb3f7606a5bc724ac3812._comment

file too large to diff

− doc/direct_mode/comment_7_5355ac418bfb26e990762b80f4c36b77._comment

file too large to diff

− doc/direct_mode/comment_8_6cd15e2c5fd0bef48f60c6993322c2fc._comment

file too large to diff

− doc/direct_mode/comment_9_cff56dbcdfec60375c30d5b1b1c60614._comment

file too large to diff

− doc/distributed_version_control.mdwn

file too large to diff

− doc/download.mdwn

file too large to diff

− doc/download/comment_1_ec2578241a966cfcdd43f2a26a5c8709._comment

file too large to diff

− doc/download/comment_2_ee0d158ac59903737dbc4ef632f11fe3._comment

file too large to diff

− doc/encryption.mdwn

file too large to diff

− doc/encryption/comment_1_1afca8d7182075d46db41f6ad3dd5911._comment

file too large to diff

− doc/favicon.ico

file too large to diff

− doc/favicon.png

file too large to diff

− doc/feeds.mdwn

file too large to diff

− doc/footer/column_a.mdwn

file too large to diff

− doc/footer/column_b.mdwn

file too large to diff

− doc/forum.mdwn

file too large to diff

− doc/forum/--print0_option_as_in___34__find__34__.mdwn

file too large to diff

− doc/forum/A_really_stupid_question.mdwn

file too large to diff

− doc/forum/Accessing_files_directly_on__a_USB_device.mdwn

file too large to diff

− doc/forum/Accessing_files_in_bare_repository.mdwn

file too large to diff

− doc/forum/Add_a___34__local__34___remote.txt

file too large to diff

− doc/forum/Adding_existing_S3_bucket_to_sync_with.mdwn

file too large to diff

− doc/forum/Android:_is_constant_high_cpu_usage_to_be_expected__63__.mdwn

file too large to diff

− doc/forum/Annex_contents_just_disappeared__63__.mdwn

file too large to diff

− doc/forum/Assistant:_configure_auto-sync.mdwn

file too large to diff

− doc/forum/Assistant_not_syncing_to_Rsync.mdwn

file too large to diff

− doc/forum/Auto_archiving.mdwn

file too large to diff

− doc/forum/Automatic_commit_messages_for_git_annex_sync.mdwn

file too large to diff

− doc/forum/Automatically_syncronise_centralised_repository.mdwn

file too large to diff

− doc/forum/Behaviour_of_fsck.mdwn

file too large to diff

− doc/forum/Best_way_to_manage_files_on_removable_media__63__.mdwn

file too large to diff

− doc/forum/Box.com_hasn__39__t_been_working_for_a_few_days.mdwn

file too large to diff

− doc/forum/Building_a_Debian_package_of_git-annex.mdwn

file too large to diff

− doc/forum/Building_git-annex-3.20121112-19309.mdwn

file too large to diff

− doc/forum/Cabal:_Could_not_resolve_dependencies___40__yesod__41__.mdwn

file too large to diff

− doc/forum/Calculating_Annex_Cost_by_Ping_Times.mdwn

file too large to diff

− doc/forum/Can__39__t_get_git-annex_merge_to_work_from_git_hook.mdwn

file too large to diff

− doc/forum/Can__39__t_get_pairing_to_work.mdwn

file too large to diff

− doc/forum/Can__39__t_init_git_annex.mdwn

file too large to diff

− doc/forum/Can__39__t_install:_Mac_OS_10.8.2.mdwn

file too large to diff

− doc/forum/Can_we_have_remotes_that_aren__39__t_tracked__63___.mdwn

file too large to diff

− doc/forum/Cannot_find_git-annex_in_server.mdwn

file too large to diff

− doc/forum/Cannot_launch_webapp_on_ubuntu_12.04_using_ppa.mdwn

file too large to diff

− doc/forum/Centralized_repository_with_webapp.mdwn

file too large to diff

− doc/forum/Check_if_remote_is_using_GPG__63__.mdwn

file too large to diff

− doc/forum/Check_when_your_last_fsck_was__63__.mdwn

file too large to diff

− doc/forum/Cleaning_up_after_aborted_sync_in_direct_mode.mdwn

file too large to diff

− doc/forum/Coming_from_git_world.mdwn

file too large to diff

− doc/forum/DBus_on_Ubuntu_12.04__63__.mdwn

file too large to diff

− doc/forum/DS__95__Store_files_are_not_added.mdwn

file too large to diff

− doc/forum/Debugging_Git_Annex.mdwn

file too large to diff

− doc/forum/Default_text__47__html_handler.mdwn

file too large to diff

− doc/forum/Delete_unused_files__47__metadata.mdwn

file too large to diff

− doc/forum/Detached_git_work_tree__63__.mdwn

file too large to diff

− doc/forum/Difference_between_copy__44___move_and_get__63__.mdwn

file too large to diff

− doc/forum/Different_annexes_pointing_to_same_special_remote__63__.mdwn

file too large to diff

− doc/forum/Direct_special_remotes.mdwn

file too large to diff

− doc/forum/Does_Jabber_syncing_work_when_the_buddy_is_offline__63__.mdwn

file too large to diff

− doc/forum/Does_git-annex_version_big_files__63__.mdwn

file too large to diff

− doc/forum/Does_migrate_ensure_data_integrity__63__.mdwn

file too large to diff

− doc/forum/Don__39__t_understand_how_to_delete__47__recover_files.mdwn

file too large to diff

− doc/forum/Don__39__t_understand_local_vs._known_keys.mdwn

file too large to diff

− doc/forum/Drop_with_assistant.mdwn

file too large to diff

− doc/forum/Encrypted_ssh_remote__44___synced_folders.mdwn

file too large to diff

− doc/forum/Error_adding_ssh_remote_in_assistant.mdwn

file too large to diff

− doc/forum/External_drive_syncs_git-annex_branch_but_not_master_branch.mdwn

file too large to diff

− doc/forum/Feature_request:_Multiple_concurrent_transfers.mdwn

file too large to diff

− doc/forum/Feature_request:_git_annex_copy_--auto_does_the_right_thing.mdwn

file too large to diff

− doc/forum/Feature_request:_webapp_support_for_centralized_bare_repos.mdwn

file too large to diff

− doc/forum/First_attempt_at_an_OSX_launcher___40__.app__41__.mdwn

file too large to diff

− doc/forum/Fixing_up_corrupt_annexes.mdwn

file too large to diff

− doc/forum/Getting_started_with_Amazon_S3.mdwn

file too large to diff

− doc/forum/Git_Annex_Transfer_Protocols.mdwn

file too large to diff

− doc/forum/Git_annex_assistant_in_command_line.mdwn

file too large to diff

− doc/forum/Git_annex_assistant_on_EC2.mdwn

file too large to diff

− doc/forum/Git_annex_on_Windows.mdwn

file too large to diff

− doc/forum/Git_annex_syncing_speed__44___possible__63__.mdwn

file too large to diff

− doc/forum/Git_repos_in_git_annex__63__.mdwn

file too large to diff

− doc/forum/Git_repositories_in_the_annex__63__.mdwn

file too large to diff

− doc/forum/Handling_web_special_remote_when_content_changes__63__.mdwn

file too large to diff

− doc/forum/Help_Windows_walkthrough.mdwn

file too large to diff

− doc/forum/Help_with_syncing_file_contents.mdwn

file too large to diff

− doc/forum/How_do_I_dropunused_with_an_rsync_remote__63__.mdwn

file too large to diff

− doc/forum/How_do_you_know_when_something_fails_a_fsck__63__.mdwn

file too large to diff

− doc/forum/How_to_deal_with_renamed_files_in_direct_mode__63__.mdwn

file too large to diff

− doc/forum/How_to_delete_a_remote__63__.mdwn

file too large to diff

− doc/forum/How_to_handle_the_git-annex_branch__63__.mdwn

file too large to diff

− doc/forum/How_to_make_Maven_releases_work_with_git_annex___63__.mdwn

file too large to diff

− doc/forum/How_to_prevent_the_assistant_from_downloading_all_data__63__.mdwn

file too large to diff

− doc/forum/How_to_rename_a_remote__63__.mdwn

file too large to diff

− doc/forum/How_to_restore_symlinks.mdwn

file too large to diff

− doc/forum/How_to_retroactively_annex_a_file_already_in_a_git_repo.mdwn

file too large to diff

− doc/forum/Howto_remove_a_repository__63__.mdwn

file too large to diff

− doc/forum/Howto_remove_unused_files.mdwn

file too large to diff

− doc/forum/Is_an_automagic_upgrade_of_the_object_directory_safe__63__.mdwn

file too large to diff

file too large to diff

− doc/forum/Lacking_webapp_on_Trisquel__47__Ubuntu_Precise.mdwn

file too large to diff

− doc/forum/Let_watch_selectively_annex_files.mdwn

file too large to diff

− doc/forum/Local_and_remote_in_direct_mode.mdwn

file too large to diff

− doc/forum/Looking_at_the_webapp_on_OSX.mdwn

file too large to diff

− doc/forum/Make_whereis_output_more_compact.mdwn

file too large to diff

− doc/forum/Making_git-annex_a_self-funded_project__63__.mdwn

file too large to diff

− doc/forum/Making_git-annex_less_necessary.mdwn

file too large to diff

− doc/forum/Managing_multiple_annexes_with_assistant__63__.mdwn

file too large to diff

− doc/forum/Managing_multiple_repositories_concurrently__63__.mdwn

file too large to diff

− doc/forum/Manual_Setup_of_a_Central_Repo.mdwn

file too large to diff

− doc/forum/Manual_mode_option_in_assistant_auto-syncs.mdwn

file too large to diff

− doc/forum/Manual_webapp_behaviour_on_ARM.mdwn

file too large to diff

− doc/forum/Moving_large_files_within_the_repo_without_copying___63__.mdwn

file too large to diff

− doc/forum/Need_new_build_instructions_for_Debian_stable.mdwn

file too large to diff

− doc/forum/Need_some_help_to_fix_my_repository.mdwn

file too large to diff

− doc/forum/New_git-annex_integration_mode_for_Emacs_users.mdwn

file too large to diff

− doc/forum/New_user_misunderstandings.mdwn

file too large to diff

− doc/forum/No_SSL_traffic_for_S3__63__.mdwn

file too large to diff

− doc/forum/Not_sure_how_to_get_my_s3_remote_back.mdwn

file too large to diff

− doc/forum/OSX__39__s_default_sshd_behaviour_has_limited_paths_set.mdwn

file too large to diff

file too large to diff

− doc/forum/OpenOffice___47___Libre_Office.mdwn

file too large to diff

− doc/forum/Overwriting_data_without_getting_it.mdwn

file too large to diff

− doc/forum/Please_fix_compatibility_with_ghc_7.0.mdwn

file too large to diff

− doc/forum/Podcast_syncing_use-case.mdwn

file too large to diff

− doc/forum/Poor_man__39__s_IMAP.mdwn

file too large to diff

− doc/forum/Post-Kickstarter.mdwn

file too large to diff

− doc/forum/Problem_compiling_current_master.mdwn

file too large to diff

− doc/forum/Problem_with_bup:_cannot_lock_refs.mdwn

file too large to diff

− doc/forum/Problems_syncing_with_box.com.mdwn

file too large to diff

− doc/forum/Problems_using_submodules_with_git-annex__63__.mdwn

file too large to diff

− doc/forum/Problems_with_large_numbers_of_files.mdwn

file too large to diff

− doc/forum/Pruning_out_unwanted_Git_objects.mdwn

file too large to diff

− doc/forum/Push__47__Pull_with_the_Assistant.mdwn

file too large to diff

− doc/forum/Pushing_git_repo_to_AWS_S3_from_behind_proxy.mdwn

file too large to diff

− doc/forum/Reappearing_repos_in_webapp_and_vicfg.mdwn

file too large to diff

− doc/forum/Recommended_number_of_repositories.mdwn

file too large to diff

− doc/forum/Relocating_annex_directory.mdwn

file too large to diff

− doc/forum/Removing_files_not_found_by_git_annex_unused.mdwn

file too large to diff

− doc/forum/Restricting_git-annex-shell_to_a_specific_repository.mdwn

file too large to diff

− doc/forum/Revert_file_linkage_to_original_files.mdwn

file too large to diff

− doc/forum/Running_assistant_on_a_server___40__no_X_available__41__.mdwn

file too large to diff

− doc/forum/Running_assistant_steps_manually.mdwn

file too large to diff

− doc/forum/Same_Jabber_account_for_different_annexes.mdwn

file too large to diff

− doc/forum/Securing_a_shared_ssh_server.mdwn

file too large to diff

− doc/forum/Setup_of_rsync_special_remote_with_non-standard_ssh_port.mdwn

file too large to diff

− doc/forum/Share_only_certain_files_of_a_repo___40__Assistant__41__.mdwn

file too large to diff

− doc/forum/Sharing_annex_with_local_clones.mdwn

file too large to diff

− doc/forum/Simple_check_out_with_assistant__63__.mdwn

file too large to diff

− doc/forum/Special_remote_without_chmod.mdwn

file too large to diff

− doc/forum/Storing_uncontrolled_files_in_an_annex.mdwn

file too large to diff

− doc/forum/Stupid_mistake:_recoverable__63__.mdwn

file too large to diff

− doc/forum/Sync_without_jabber_account.mdwn

file too large to diff

− doc/forum/Synchronize_large_files___40__VM_images__41__.mdwn

file too large to diff

− doc/forum/Syncing_machines_on_different_networks.mdwn

file too large to diff

− doc/forum/Syncronisation_of_syncronisation_between_3_repositories__63__.mdwn

file too large to diff

− doc/forum/Transfer_remotes.mdwn

file too large to diff

− doc/forum/Trouble_installing_from_cabal_on_debian-testing.mdwn

file too large to diff

− doc/forum/Truly_purging_dead_repositories.mdwn

file too large to diff

− doc/forum/USB_backup_with_files_visible.mdwn

file too large to diff

− doc/forum/USB_drive_in_transfer_group_keeps_growing_-_assistant.txt

file too large to diff

− doc/forum/Ubuntu_PPA.mdwn

file too large to diff

− doc/forum/Ubuntu_PPA/comment_1_b55535258b1b4bcfc802235f0cba075d._comment

file too large to diff

− doc/forum/Ubuntu_PPA/comment_2_adc4d644fed058d1811acf0b35db9c18._comment

file too large to diff

− doc/forum/Ubuntu_PPA/comment_3_fc9cd51558c47718f243437202a11803._comment

file too large to diff

− doc/forum/Ubuntu_PPA/comment_4_3a8bbd0a7450a7f5323cd13144824aea._comment

file too large to diff

− doc/forum/Ubuntu_PPA/comment_5_2e1beaeebda0201c635db8b276cedf20._comment

file too large to diff

− doc/forum/Ubuntu_PPA/comment_6_bd99fb70399fc58d98781a89c6d38428._comment

file too large to diff

− doc/forum/Ubuntu_PPA/comment_7_c3f7ec8573934c59d70a48e36e321c13._comment

file too large to diff

− doc/forum/Undo_Git_Annex_Changes_To_Linked_Files.mdwn

file too large to diff

− doc/forum/Unknown_remote_type_S3.mdwn

file too large to diff

− doc/forum/Unlock_files_when_assistant_is_running__63__.mdwn

file too large to diff

− doc/forum/Use_local_files_instead_of_re-downloading_from_S3_remote.mdwn

file too large to diff

file too large to diff

− doc/forum/Using_Linux_static_builds.mdwn

file too large to diff

− doc/forum/Using___34__sync__34___to_sink_all_branches__63__.mdwn

file too large to diff

− doc/forum/Using_for_Music_repo.mdwn

file too large to diff

− doc/forum/Using_git-annex_as_a_library.mdwn

file too large to diff

− doc/forum/Using_git-annex_via_command_line_in_OS_X.mdwn

file too large to diff

− doc/forum/Watch__47__assistant__47__webapp_documentation.mdwn

file too large to diff

− doc/forum/Webapp_on_ARM.mdwn

file too large to diff

− doc/forum/Webapp_on_ARM/comment_1_82ac40cef5b59070136527b8d81a5ce2._comment

file too large to diff

− doc/forum/Weird_behavior_with_OS_X_Finder_and_Preview.app.mdwn

file too large to diff

− doc/forum/What_can_be_done_in_case_of_conflict.mdwn

file too large to diff

− doc/forum/What_happened_to_the_walkthrough__63__.mdwn

file too large to diff

− doc/forum/What_is_the_best_way_to___34__git_annex_mv__34___file__63__.mdwn

file too large to diff

− doc/forum/Which_cloud_providers_are_supported__63___.mdwn

file too large to diff

− doc/forum/Why_does_the_bup_remote_use___126____47__.bup__63__.mdwn

file too large to diff

− doc/forum/Will_git-annex_solve_my_problem__63__.mdwn

file too large to diff

− doc/forum/Will_git_annex_work_on_a_FAT32_formatted_key__63__.mdwn

file too large to diff

− doc/forum/Windows_support.mdwn

file too large to diff

− doc/forum/Windows_usage_instructions.mdwn

file too large to diff

− doc/forum/Wishlist:_Bittorrent-like_transfers.mdwn

file too large to diff

− doc/forum/Wishlist:_Don__39__t_make_files_readonly.mdwn

file too large to diff

− doc/forum/Wishlist:_Ways_of_selecting_files_based_on_meta-information.mdwn

file too large to diff

− doc/forum/Wishlist:_automatic_reinject.mdwn

file too large to diff

− doc/forum/Wishlist:_getting_the_disk_used_by_a_subtree_of_files.mdwn

file too large to diff

− doc/forum/Wishlist:_mark_remotes_offline.mdwn

file too large to diff

− doc/forum/Wishlist:_options_for_syncing_meta-data_and_data.mdwn

file too large to diff

− doc/forum/XBMC__44___NFS___38___git-annex_.txt

file too large to diff

− doc/forum/XMPP_authentication_failure.mdwn

file too large to diff

− doc/forum/__34__du__34___equivalent_on_an_annex__63__.mdwn

file too large to diff

− doc/forum/__34__git_annex_lock__34___very_slow_for_big_repo.mdwn

file too large to diff

− doc/forum/__34__permission_denied__34___in_fsck_on_shared_repo.mdwn

file too large to diff

− doc/forum/advantages_of_SHA__42___over_WORM.mdwn

file too large to diff

− doc/forum/android_binary-only_download.mdwn

file too large to diff

− doc/forum/annexed_file_key_for_web_remote_with_SHA256E_backend.mdwn

file too large to diff

− doc/forum/archaeology_of_deleted_files.mdwn

file too large to diff

− doc/forum/archival_and_multiple_users.mdwn

file too large to diff

− doc/forum/assistant_overzealously_moving_stuff_to_other_repos.mdwn

file too large to diff

− doc/forum/assistant_without_watch__63__.mdwn

file too large to diff

− doc/forum/autobuilders_for_git-annex_to_aid_development.mdwn

file too large to diff

− doc/forum/bainstorming:_git_annex_push___38___pull.mdwn

file too large to diff

− doc/forum/batch_check_on_remote_when_using_copy.mdwn

file too large to diff

− doc/forum/benefit_of_splitting_a_repository.mdwn

file too large to diff

− doc/forum/can_git-annex_replace_ddm__63__.mdwn

file too large to diff

− doc/forum/central_non-bare_and_git_push.txt

file too large to diff

− doc/forum/clear_box.com_repository.mdwn

file too large to diff

− doc/forum/cloud_services_to_support.mdwn

file too large to diff

− doc/forum/cloudcmd.mdwn

file too large to diff

− doc/forum/commit_current_workdir_state_in_direct_mode.mdwn

file too large to diff

− doc/forum/confusion_with_remotes__44___map.mdwn

file too large to diff

− doc/forum/correct_way_to_add_two_preexisting_datasets.mdwn

file too large to diff

− doc/forum/dot_git_slash_annex_slash_tmp.mdwn

file too large to diff

− doc/forum/endless_password_prompt_loop.mdwn

file too large to diff

− doc/forum/error_in_installation_of_base-4.5.0.0.mdwn

file too large to diff

− doc/forum/example_of_massively_disconnected_operation.mdwn

file too large to diff

− doc/forum/exclude_files_from_annex.mdwn

file too large to diff

− doc/forum/expire_files__44___move_to_other_hosts.mdwn

file too large to diff

− doc/forum/exporting_annexed_files.mdwn

file too large to diff

− doc/forum/first-time_setup_git-annex.mdwn

file too large to diff

− doc/forum/flickrannex_--_not_sure_I_get_it.mdwn

file too large to diff

− doc/forum/fsck_gives_false_positives.mdwn

file too large to diff

− doc/forum/gadu_-_git-annex_disk_usage.mdwn

file too large to diff

− doc/forum/get_and_copy_with_bare_repositories.mdwn

file too large to diff

− doc/forum/getting_git_annex_to_do_a_force_copy_to_a_remote.mdwn

file too large to diff

− doc/forum/git-annex_across_two_filesystems.mdwn

file too large to diff

− doc/forum/git-annex_and_tagfs.mdwn

file too large to diff

− doc/forum/git-annex_communication_channels.mdwn

file too large to diff

− doc/forum/git-annex_on_OSX.mdwn

file too large to diff

− doc/forum/git-annex_on_Samba_share.mdwn

file too large to diff

− doc/forum/git-annex_teams___47___groups.mdwn

file too large to diff

− doc/forum/git-assistant_clarification.mdwn

file too large to diff

− doc/forum/git-remote-gcrypt.mdwn

file too large to diff

− doc/forum/git-subtree_support__63__.mdwn

file too large to diff

− doc/forum/git_annex_add_crash_and_subsequent_recovery.mdwn

file too large to diff

− doc/forum/git_annex_alternative.mdwn

file too large to diff

− doc/forum/git_annex_assistant__44___share_with_other_devices.mdwn

file too large to diff

− doc/forum/git_annex_copy_--fast_--to_blah_much_slower_than_--from_blah.mdwn

file too large to diff

− doc/forum/git_annex_get_creates_a_new_uuid.mdwn

file too large to diff

− doc/forum/git_annex_ls___47___metadata_in_git_annex_whereis.mdwn

file too large to diff

− doc/forum/git_pull_remote_git-annex.mdwn

file too large to diff

− doc/forum/git_tag_missing_for_3.20111011.mdwn

file too large to diff

− doc/forum/git_unannex_speed.mdwn

file too large to diff

− doc/forum/glacier_-_range_retrievals_and_daily_free_retrieval_allowance.mdwn

file too large to diff

− doc/forum/hashing_objects_directories.mdwn

file too large to diff

− doc/forum/help_running_git-annex_on_top_of_existing_repo.mdwn

file too large to diff

− doc/forum/how_to_decrypt_file_from_encrypted_special_remote__63__.mdwn

file too large to diff

− doc/forum/howto_update_feed.mdwn

file too large to diff

− doc/forum/incompatible_versions__63__.mdwn

file too large to diff

− doc/forum/linux_standalone_tarballs.mdwn

file too large to diff

− doc/forum/location_tracking_cleanup.mdwn

file too large to diff

− doc/forum/making_good_use_of_my_shiny_new_rsync.net_account.mdwn

file too large to diff

− doc/forum/man_pages_in_the_prebuilt_linux_tarball.mdwn

file too large to diff

− doc/forum/managing_multiple_repositories.mdwn

file too large to diff

− doc/forum/many_remotes.mdwn

file too large to diff

− doc/forum/migrate_existing_git_repository_to_git-annex.mdwn

file too large to diff

− doc/forum/migration_to_git-annex_and_rsync.mdwn

file too large to diff

− doc/forum/mistakenly_checked___42__files__42___into_an_annex.__bummer..mdwn

file too large to diff

− doc/forum/multiple_routes_to_same_repository.mdwn

file too large to diff

file too large to diff

− doc/forum/multiple_urls_for_the_same_UUID.mdwn

file too large to diff

− doc/forum/new_microfeatures.mdwn

file too large to diff

− doc/forum/nfs_mounted_repo_results_in_errors_on_drop__47__move.mdwn

file too large to diff

− doc/forum/nntp__47__usenet_special_remote.mdwn

file too large to diff

− doc/forum/non-bare_repo_on_cloud_remote.mdwn

file too large to diff

− doc/forum/not_getting_file_contents.mdwn

file too large to diff

− doc/forum/one_annex_versus_many_annexes__63__.mdwn

file too large to diff

− doc/forum/one_or_many_annexes__63__.mdwn

file too large to diff

− doc/forum/performance_and_multiple_replication_problems.mdwn

file too large to diff

− doc/forum/post-copy__47__sync_hook.mdwn

file too large to diff

− doc/forum/preferred_content_settings_for_multiple_symlinks.mdwn

file too large to diff

− doc/forum/public-web-frontend.mdwn

file too large to diff

− doc/forum/pulling_from_encrypted_remote.mdwn

file too large to diff

− doc/forum/pure_git-annex_only_workflow.mdwn

file too large to diff

− doc/forum/question_about_assistant_and___47__archive__47__.mdwn

file too large to diff

− doc/forum/recover_deleted_files___63__.mdwn

file too large to diff

− doc/forum/recovering_from_repo_corruption.mdwn

file too large to diff

− doc/forum/reliability__47__completeness_of_XMPP_updates.mdwn

file too large to diff

− doc/forum/relying_on_git_for_numcopies.mdwn

file too large to diff

− doc/forum/remote_server_client_repositories_are_bare__33____63__.mdwn

file too large to diff

− doc/forum/reserving_space_with_directory_special_remotes.mdwn

file too large to diff

− doc/forum/retrieving_previous_versions.mdwn

file too large to diff

− doc/forum/rsync_over_ssh__63__.mdwn

file too large to diff

− doc/forum/safely_dropping_git-annex_history.mdwn

file too large to diff

− doc/forum/seems_to_build_fine_on_haskell_platform_2011.mdwn

file too large to diff

− doc/forum/shared_cipher_tries_to_use_gpg.mdwn

file too large to diff

− doc/forum/something_really_good_happened_with_3.20130124.mdwn

file too large to diff

− doc/forum/sparse_git_checkouts_with_annex.mdwn

file too large to diff

− doc/forum/special_remote_for_IMAP.mdwn

file too large to diff

− doc/forum/special_remote_for_iPods.mdwn

file too large to diff

− doc/forum/ssh_password.mdwn

file too large to diff

− doc/forum/ssh_password/comment_1_a3e5a41e1d4da683d577976b134b11ee._comment

file too large to diff

− doc/forum/ssh_password/comment_2_fa261676a99d49d4b237b0d43048d76d._comment

file too large to diff

− doc/forum/switching_backends.mdwn

file too large to diff

− doc/forum/switching_to__47__from_direct_mode_while_assistant_is_running.mdwn

file too large to diff

− doc/forum/syncing_home_directories.mdwn

file too large to diff

− doc/forum/syncing_non-git_trees_with_git-annex.mdwn

file too large to diff

− doc/forum/taskwarrior.mdwn

file too large to diff

− doc/forum/taskwarrior/comment_1_1c3a29e7d292cb602d9d349f8009b51e._comment

file too large to diff

− doc/forum/tell_us_how_you__39__re_using_git-annex.mdwn

file too large to diff

− doc/forum/tips:_special__95__remotes__47__hook_with_tahoe-lafs.mdwn

file too large to diff

− doc/forum/ui.mdwn

file too large to diff

− doc/forum/ui/comment_1_f3e3446b05d6b573e29e6cad300fb635._comment

file too large to diff

− doc/forum/unannex_alternatives.mdwn

file too large to diff

− doc/forum/unknown_response_from_git_cat-file.mdwn

file too large to diff

− doc/forum/unlock__47__lock_always_gets_me.mdwn

file too large to diff

− doc/forum/updating_the___34__number_of_copies__34__.mdwn

file too large to diff

− doc/forum/use_existing_ssh_keys__63__.mdwn

file too large to diff

− doc/forum/version_3_upgrade.mdwn

file too large to diff

− doc/forum/vlc_and_git-annex.mdwn

file too large to diff

− doc/forum/webapp___47___assistant_without_watch.mdwn

file too large to diff

− doc/forum/webapp_and_manual_mode.mdwn

file too large to diff

− doc/forum/webapp_listen_port_with_autostart.mdwn

file too large to diff

− doc/forum/windows_port__63__.mdwn

file too large to diff

− doc/forum/wishlist:_get__47__drop_via_webapp_file_explorer.mdwn

file too large to diff

− doc/forum/wishlist:_make_copy_stop_on_exhausted_disk_space.mdwn

file too large to diff

− doc/forum/working_without_git-annex_commits.mdwn

file too large to diff

− doc/future_proofing.mdwn

file too large to diff

− doc/git-annex-shell.mdwn

file too large to diff

− doc/git-annex.mdwn

file too large to diff

− doc/git-union-merge.mdwn

file too large to diff

− doc/how_it_works.mdwn

file too large to diff

− doc/how_it_works/comment_1_b3bdd6a06d5764db521ae54878131f5f._comment

file too large to diff

− doc/index.mdwn

file too large to diff

− doc/install.mdwn

file too large to diff

− doc/install/Android.mdwn

file too large to diff

− doc/install/Android/comment_1_f9ced494a530e6ae3e76cfbaddb89f5d._comment

file too large to diff

− doc/install/Android/comment_2_74cccae04ea23a8600069c7e658143aa._comment

file too large to diff

− doc/install/Android/comment_3_82c7cb31d19d4e18ca5548da5ca19a79._comment

file too large to diff

− doc/install/Android/comment_4_cebaa8ee5bbed27d9b2d032ca7bdec6e._comment

file too large to diff

− doc/install/Android/comment_5_40cb6cb72c4ad4aa19a4a40f41a6a757._comment

file too large to diff

− doc/install/Android/comment_6_b0f723538e7328d5070c563f070858bd._comment

file too large to diff

− doc/install/Android/comment_7_c6dc23d0e6f4138c4bf8e3452755676f._comment

file too large to diff

− doc/install/Android/comment_8_34f7c42050fa48769a6bfae60d72e477._comment

file too large to diff

− doc/install/Android/comment_9_f3d289b78d6bdb3cc65689495a8439a5._comment

file too large to diff

− doc/install/ArchLinux.mdwn

file too large to diff

− doc/install/ArchLinux/comment_1_da5919c986d2ae187bc2f73de9633978._comment

file too large to diff

− doc/install/Debian.mdwn

file too large to diff

− doc/install/Debian/comment_10_d5da996e106d2e4d8a822aa9bcc78596._comment

file too large to diff

− doc/install/Debian/comment_11_84283676da247c401bc9b4bb12c2b453._comment

file too large to diff

− doc/install/Debian/comment_12_0aca83b055d0a9dd8589c50250a8bbea._comment

file too large to diff

− doc/install/Debian/comment_13_167a091764e5e99ec0f35a65e95a22de._comment

file too large to diff

− doc/install/Debian/comment_14_a34e23d9aa3027012ab1236aa4f7d5cb._comment

file too large to diff

− doc/install/Debian/comment_15_20d8271ba3f6cfe3c8849c3d41607630._comment

file too large to diff

− doc/install/Debian/comment_1_029486088d098c2d4f1099f2f0e701a9._comment

file too large to diff

− doc/install/Debian/comment_2_648e3467e260cdf233acdb0b53313ce0._comment

file too large to diff

− doc/install/Debian/comment_3_4d922e11249627634ecc35bba4044d9e._comment

file too large to diff

− doc/install/Debian/comment_4_2a93ab18b05ccb90e7acc5885866fca2._comment

file too large to diff

− doc/install/Debian/comment_5_38e6399083e10a6a274f35bddc15d4ac._comment

file too large to diff

− doc/install/Debian/comment_6_2e7bbdbaabbfb9d89de22e913066e822._comment

file too large to diff

− doc/install/Debian/comment_7_1bccc7bf7a4ef61a9b30024b9b22ba7d._comment

file too large to diff

− doc/install/Debian/comment_8_5b5a3b0e8abe8831a6a15a4e258d14fd._comment

file too large to diff

− doc/install/Debian/comment_9_97eaed998ffd1ed79585075ed5cff06e._comment

file too large to diff

− doc/install/Fedora.mdwn

file too large to diff

− doc/install/Fedora/comment_1_c4db84e672ad4b45b522db735706b00f._comment

file too large to diff

− doc/install/Fedora/comment_2_f98c488c09bef86e2b0414589ce9e141._comment

file too large to diff

− doc/install/Fedora/comment_3_d872acf8865fe7c99a9b712db5b38ea4._comment

file too large to diff

− doc/install/FreeBSD.mdwn

file too large to diff

− doc/install/Gentoo.mdwn

file too large to diff

− doc/install/Linux_standalone.mdwn

file too large to diff

− doc/install/NixOS.mdwn

file too large to diff

− doc/install/OSX.mdwn

file too large to diff

− doc/install/OSX/comment_10_cd2120552ef894a37933b328136fa4cc._comment

file too large to diff

− doc/install/OSX/comment_11_740fa80e2e54e6fb570f820ff1f56440._comment

file too large to diff

− doc/install/OSX/comment_12_a84028080578a8b60115b6c4ef823627._comment

file too large to diff

− doc/install/OSX/comment_13_d6f1db401858ffea23c123db49f5b296._comment

file too large to diff

− doc/install/OSX/comment_14_035f856923276b0edad879e196e94097._comment

file too large to diff

− doc/install/OSX/comment_15_336e0acb00e84943715e69917643a69e._comment

file too large to diff

− doc/install/OSX/comment_16_1befafa862b7d07b1f6e57c0182497cf._comment

file too large to diff

− doc/install/OSX/comment_17_19c08b2c6c2c5cd88bf96d2bcbbd9055._comment

file too large to diff

− doc/install/OSX/comment_18_537fad5d8854e765499d47602d1ab398._comment

file too large to diff

− doc/install/OSX/comment_19_18d4377f4ded5604d395d73783ba82c9._comment

file too large to diff

− doc/install/OSX/comment_20_3e6a3c00444badf2cf7a9ee3d54af11e._comment

file too large to diff

− doc/install/OSX/comment_21_987f1302f56107c926b6daf83e124654._comment

file too large to diff

− doc/install/OSX/comment_22_6b5f44a98f9d37a1c6ecfe19a60fe6c5._comment

file too large to diff

− doc/install/OSX/comment_2_25552ff2942048fafe97d653757f1ad6._comment

file too large to diff

− doc/install/OSX/comment_3_47a77a03040fe628109bd54f82f9ad7a._comment

file too large to diff

− doc/install/OSX/comment_4_25cac8bcd84a5210fc0a5243260b8cc7._comment

file too large to diff

− doc/install/OSX/comment_4_bbe99673033e4c48c8bb3db24ee419f9._comment

file too large to diff

− doc/install/OSX/comment_5_39b4b748b4586bf32b37edfefef84bba._comment

file too large to diff

− doc/install/OSX/comment_6_1a9c91ef43edc4148947f202ff604114._comment

file too large to diff

− doc/install/OSX/comment_7_892f7e65f95f43697164267c4b71c0d5._comment

file too large to diff

− doc/install/OSX/comment_8_38d9c2eea1090674de2361274eab5b0e._comment

file too large to diff

− doc/install/OSX/comment_9_35bf3812db6f3ef25da9b3bc84f147c5._comment

file too large to diff

− doc/install/OSX/old_comments.mdwn

file too large to diff

− doc/install/ScientificLinux5.mdwn

file too large to diff

− doc/install/Ubuntu.mdwn

file too large to diff

− doc/install/Ubuntu/comment_1_d1c511153fe94bf33e19a1281f1c92f2._comment

file too large to diff

− doc/install/Ubuntu/comment_2_ad13886c1c1f76d1cd995ea7b7d8471c._comment

file too large to diff

− doc/install/Ubuntu/comment_3_a08817322739b03cf0fec97283b16f1a._comment

file too large to diff

− doc/install/Ubuntu/comment_4_fe0997e56136bd30749f0995cbf19b56._comment

file too large to diff

− doc/install/Ubuntu/comment_5_fbb5306a162db1a1ee9efa3523aac952._comment

file too large to diff

− doc/install/Ubuntu/comment_6_a97e7f0e62ac685c3ded423bddeaa67f._comment

file too large to diff

− doc/install/Ubuntu/comment_7_921a223fd7e679b9ced3d8ba5ce688e0._comment

file too large to diff

− doc/install/Ubuntu/comment_8_1f943cb084fa8e21bc6ee5fc3118f02f._comment

file too large to diff

− doc/install/Windows.mdwn

file too large to diff

− doc/install/cabal.mdwn

file too large to diff

− doc/install/cabal/comment_10_7ebe353b05d4df29897dc9a4f45c8a91._comment

file too large to diff

− doc/install/cabal/comment_11_0d06702e6e0ae3cd331cf748a9f6f273._comment

file too large to diff

− doc/install/cabal/comment_12_b93ca271dffca3f948645d3e1326c1d9._comment

file too large to diff

− doc/install/cabal/comment_13_3dac019cda71bf99878c0a1d9382323b._comment

file too large to diff

− doc/install/cabal/comment_14_14b46470593f84f8c3768a91cb77bdab._comment

file too large to diff

− doc/install/cabal/comment_15_c3a5b0aad28a90e0bb8da31a430578eb._comment

file too large to diff

− doc/install/cabal/comment_16_4faf214f97f9516898d7c17d743ef825._comment

file too large to diff

− doc/install/cabal/comment_17_2a9d6807a3a13815c824985521757167._comment

file too large to diff

− doc/install/cabal/comment_18_1efa0c7a963ec452fc6336fbe4964f6e._comment

file too large to diff

− doc/install/cabal/comment_1_f04df6bcd50d1d01eb34868bb00ac35c._comment

file too large to diff

− doc/install/cabal/comment_2_a69d17c55e56a707ec6606d5cdddee25._comment

file too large to diff

− doc/install/cabal/comment_3_55bed050bdb768543dbe1b86edec057d._comment

file too large to diff

− doc/install/cabal/comment_4_2ff7f8a3b03bea7e860248829d595bd1._comment

file too large to diff

− doc/install/cabal/comment_5_8789fc27466714faa5a3a7a6b8ec6e5d._comment

file too large to diff

− doc/install/cabal/comment_6_5afb2d081e8b603bc338cd460ad9317d._comment

file too large to diff

− doc/install/cabal/comment_7_129c4f2e404c874e5adfa52902a81104._comment

file too large to diff

− doc/install/cabal/comment_8_738c108f131e3aab0d720bc4fd6a81fd._comment

file too large to diff

− doc/install/cabal/comment_9_5ddbba419d96a7411f7edddaa4d7b739._comment

file too large to diff

− doc/install/fromscratch.mdwn

file too large to diff

− doc/install/openSUSE.mdwn

file too large to diff

− doc/internals.mdwn

file too large to diff

− doc/internals/hashing.mdwn

file too large to diff

− doc/internals/key_format.mdwn

file too large to diff

− doc/license.mdwn

file too large to diff

− doc/license/AGPL

file too large to diff

− doc/license/GPL

file too large to diff

− doc/license/LGPL

file too large to diff

− doc/links/key_concepts.mdwn

file too large to diff

− doc/links/other_stuff.mdwn

file too large to diff

− doc/links/the_details.mdwn

file too large to diff

− doc/location_tracking.mdwn

file too large to diff

− doc/logo-old-bw.svg

file too large to diff

− doc/logo-old.png

file too large to diff

− doc/logo-old.svg

file too large to diff

− doc/logo-old_small.png

file too large to diff

− doc/logo.mdwn

file too large to diff

− doc/logo.svg

file too large to diff

− doc/logo_small.png

file too large to diff

− doc/meta.mdwn

file too large to diff

− doc/news.mdwn

file too large to diff

− doc/news/LWN_article.mdwn

file too large to diff

− doc/news/Presentation_at_FOSDEM.mdwn

file too large to diff

− doc/news/sharebox_a_FUSE_filesystem_for_git-annex.mdwn

file too large to diff

− doc/news/version_4.20130802.mdwn

file too large to diff

− doc/news/version_4.20130815.mdwn

file too large to diff

− doc/news/version_4.20130827.mdwn

file too large to diff

− doc/news/version_4.20130909.mdwn

file too large to diff

− doc/not.mdwn

file too large to diff

− doc/not/comment_1_ab41bec1ccc884e71780cb9458439170._comment

file too large to diff

− doc/not/comment_2_0e19ff7deb5ed65f2bc685d4c516d816._comment

file too large to diff

− doc/not/comment_3_bab9584c41a25dda934ad230e3eb732d._comment

file too large to diff

− doc/not/comment_4_b2a0d5a45ab8ddd66c29dde9412d7a12._comment

file too large to diff

− doc/not/comment_5_f2829ecbe80a61aa9a8411d2403de69e._comment

file too large to diff

− doc/not/comment_6_547fc59b19ad66d7280c53a7f923ea08._comment

file too large to diff

− doc/not/comment_7_581e23cca0219711f8a4500a8d5d20fc._comment

file too large to diff

− doc/not/comment_8_5c61457f117de38ef487e5cc2780d554._comment

file too large to diff

− doc/preferred_content.mdwn

file too large to diff

− doc/preferred_content/comment_1_7d45e21dfb016e9ffa4715346dd0c1a6._comment

file too large to diff

− doc/preferred_content/comment_2_1ccd90b009245667ad59f4d29d2a3a37._comment

file too large to diff

− doc/preferred_content/comment_4_384025b5fa23a3f175985a081438149f._comment

file too large to diff

− doc/preferred_content/comment_4_6a9bc657bc7415f0e118357d8c6664c6._comment

file too large to diff

− doc/preferred_content/comment_5_f0a957e67297c4bb5a8778c11b3c9fd4._comment

file too large to diff

− doc/preferred_content/comment_6_b434c0e2aaa132020fd4a01551285376._comment

file too large to diff

− doc/preferred_content/comment_7_c4acaa237bf1a8512c5e8ea4cdbd11b9._comment

file too large to diff

− doc/preferred_content/comment_8_ff2a2dc9c566ebd9f570bdfcd7bfc030._comment

file too large to diff

− doc/privacy.mdwn

file too large to diff

− doc/related_software.mdwn

file too large to diff

− doc/repomap.png

file too large to diff

− doc/scalability.mdwn

file too large to diff

− doc/sidebar.mdwn

file too large to diff

− doc/sitemap.mdwn

file too large to diff

− doc/special_remotes.mdwn

file too large to diff

− doc/special_remotes/S3.mdwn

file too large to diff

− doc/special_remotes/S3/comment_10_c366f020c9b97a365e21878a33360079._comment

file too large to diff

− doc/special_remotes/S3/comment_11_c1da387e082d91feec13dde91ccb111a._comment

file too large to diff

− doc/special_remotes/S3/comment_12_59c3ecab7dbc8be53258460473cac21c._comment

file too large to diff

− doc/special_remotes/S3/comment_13_0789a21d980825188bb09f7fc8bba8be._comment

file too large to diff

− doc/special_remotes/S3/comment_14_29574a51d5831c51e2e765eb2c06e567._comment

file too large to diff

− doc/special_remotes/S3/comment_15_ceb9048c743135f6beca57a23505f0a3._comment

file too large to diff

− doc/special_remotes/S3/comment_16_7b79f8b5ef88a2775d61b5ac5774d3e0._comment

file too large to diff

− doc/special_remotes/S3/comment_1_4a1f7a230dad6caa84831685b236fd73._comment

file too large to diff

− doc/special_remotes/S3/comment_2_5b22d67de946f4d34a4a3c7449d32988._comment

file too large to diff

− doc/special_remotes/S3/comment_3_bcab2bd0f168954243aa9bcc9671bd94._comment

file too large to diff

− doc/special_remotes/S3/comment_4_38c0b062997fde1ad28facc05d973e83._comment

file too large to diff

− doc/special_remotes/S3/comment_5_409bc2b56382417cf26bb222fb783ba7._comment

file too large to diff

− doc/special_remotes/S3/comment_6_78da9e233882ec0908962882ea8c4056._comment

file too large to diff

− doc/special_remotes/S3/comment_7_6af9781004d982d8e6b20a83ad29eead._comment

file too large to diff

− doc/special_remotes/S3/comment_8_0fa68d584ee7f6b5c9058fba7e911a11._comment

file too large to diff

− doc/special_remotes/S3/comment_9_7ad757b3865b04967c79af0a263bb3b0._comment

file too large to diff

− doc/special_remotes/bup.mdwn

file too large to diff

− doc/special_remotes/bup/comment_10_f78c1ed97d2e4c6ebffaa7482cfe0c9b._comment

file too large to diff

− doc/special_remotes/bup/comment_11_b53bceb0058acf4d1ab12ea4853ee443._comment

file too large to diff

− doc/special_remotes/bup/comment_12_65d923226cf6120349d807c5c60f640c._comment

file too large to diff

− doc/special_remotes/bup/comment_1_96179a003da4444f6fc08867872cda0a._comment

file too large to diff

− doc/special_remotes/bup/comment_2_612b038c15206f9f3c2e23c7104ca627._comment

file too large to diff

− doc/special_remotes/bup/comment_3_1186def82741ddab1ade256fb2e59e6f._comment

file too large to diff

− doc/special_remotes/bup/comment_4_7d22a805dd2914971e7ca628ceea69be._comment

file too large to diff

− doc/special_remotes/bup/comment_6_5942333cde09fd98e26c4f1d389cb76f._comment

file too large to diff

− doc/special_remotes/bup/comment_7_cb1a0d3076e9d06e7a24204478f6fa98._comment

file too large to diff

− doc/special_remotes/bup/comment_8_4cbc67e5911748d13cee3c483d7ece8a._comment

file too large to diff

− doc/special_remotes/bup/comment_9_ca7096a759961af375e6bd49663b45b3._comment

file too large to diff

− doc/special_remotes/comment_10_e9881290486a1770bd260f8650ada9c6._comment

file too large to diff

− doc/special_remotes/comment_11_e01b5cc5a0d81b071e93e27e7b91fe2a._comment

file too large to diff

− doc/special_remotes/comment_12_13237170ef5b6646e0e25d3421af3fe5._comment

file too large to diff

− doc/special_remotes/comment_13_1a36a0483a9db04d36e0234a192ebad8._comment

file too large to diff

− doc/special_remotes/comment_14_a8419963dc024b1d9eb73807596012dc._comment

file too large to diff

− doc/special_remotes/comment_15_95ccfdd22a2391daa99e0beb04adedd6._comment

file too large to diff

− doc/special_remotes/comment_16_b9d238fb15ad7628e33c90b071e07bb0._comment

file too large to diff

− doc/special_remotes/comment_17_cc21b81a8f809f6efa5f5b6332513fc3._comment

file too large to diff

− doc/special_remotes/comment_18_3fe750118ff1edbe91a110b86fb5b662._comment

file too large to diff

− doc/special_remotes/comment_19_6794eb52bd87c28ef1df3172aa7d5780._comment

file too large to diff

− doc/special_remotes/comment_1_961276c18e9353ca8e25cad53e7ec51f._comment

file too large to diff

− doc/special_remotes/comment_2_97543acfa7434e332ebea5672e446317._comment

file too large to diff

− doc/special_remotes/comment_3_9229776623c234204c8b164edff95da0._comment

file too large to diff

− doc/special_remotes/comment_4_3bbda479d13f6bf393dcd59ed94ddeaa._comment

file too large to diff

− doc/special_remotes/comment_5_f7000975d38077828ab11a99095b39eb._comment

file too large to diff

− doc/special_remotes/comment_6_5d2bd7c1e1493d3c3784708a9b0bc001._comment

file too large to diff

− doc/special_remotes/comment_7_af01ee5ce31b1490af565cb087d65277._comment

file too large to diff

− doc/special_remotes/comment_8_3d4ffec566d68d601eafe8758a616756._comment

file too large to diff

− doc/special_remotes/comment_9_26af468952f0403171370b56e127830a._comment

file too large to diff

− doc/special_remotes/directory.mdwn

file too large to diff

− doc/special_remotes/directory/comment_12._comment

file too large to diff

− doc/special_remotes/gcrypt.mdwn

file too large to diff

− doc/special_remotes/glacier.mdwn

file too large to diff

− doc/special_remotes/hook.mdwn

file too large to diff

− doc/special_remotes/hook/comment_1_6a74a25891974a28a8cb42b87cb53c26._comment

file too large to diff

− doc/special_remotes/hook/comment_2_ee7c43b93c5b787216334f019643f6a0._comment

file too large to diff

− doc/special_remotes/hook/comment_3_2593291795e732994862d08bf2ed467b._comment

file too large to diff

− doc/special_remotes/hook/comment_4_35d79b5ffa5a19056efcdc805070bc4b._comment

file too large to diff

− doc/special_remotes/hook/comment_5_6fbf1e963fa3ea4b2eb8ca5a3819762d._comment

file too large to diff

− doc/special_remotes/hook/comment_6_e0ab48d5333e5de85f016b097e6fdac1._comment

file too large to diff

− doc/special_remotes/hook/comment_7_cc2b1243c2c36e63241513bcaddfea67._comment

file too large to diff

− doc/special_remotes/hook/comment_8_bbae315233bda48eb04662dfd48cf1ae._comment

file too large to diff

− doc/special_remotes/hook/comment_9_037523d1994c702239ca96791156fe65._comment

file too large to diff

− doc/special_remotes/rsync.mdwn

file too large to diff

− doc/special_remotes/web.mdwn

file too large to diff

− doc/special_remotes/web/comment_1_0bd570025f6cd551349ea88a4729ac8e._comment

file too large to diff

− doc/special_remotes/web/comment_2_333141cc9ec6c26ffd19aa95303a91e3._comment

file too large to diff

− doc/special_remotes/webdav.mdwn

file too large to diff

− doc/special_remotes/xmpp.mdwn

file too large to diff

− doc/special_remotes/xmpp/comment_1_568247938929a2934e8198fca80b7184._comment

file too large to diff

− doc/special_remotes/xmpp/comment_2_9fc3f512020b7eb2591d6b7b2e8de2d7._comment

file too large to diff

− doc/summary.mdwn

file too large to diff

− doc/sync.mdwn

file too large to diff

− doc/sync/comment_1_59681be5568f568f5c54eb0445163dd2._comment

file too large to diff

− doc/sync/comment_2_9301ff5e81d37475f594e74fbe32f24e._comment

file too large to diff

− doc/sync/comment_3_49560003da47490e4fabd4ab0089f2d7._comment

file too large to diff

− doc/sync/comment_4_cf29326408e62575085d1f980087c923._comment

file too large to diff

− doc/templates/bare.tmpl

file too large to diff

− doc/templates/bugtemplate.mdwn

file too large to diff

− doc/templates/walkthrough.tmpl

file too large to diff

− doc/testimonials.mdwn

file too large to diff

− doc/tips.mdwn

file too large to diff

− doc/tips/Decentralized_repository_behind_a_Firewall.mdwn

file too large to diff

− doc/tips/Delay_Assistant_Startup_on_Login.mdwn

file too large to diff

− doc/tips/Git_annex_and_Calibre.mdwn

file too large to diff

− doc/tips/How_to_retroactively_annex_a_file_already_in_a_git_repo.mdwn

file too large to diff

− doc/tips/Internet_Archive_via_S3.mdwn

file too large to diff

− doc/tips/Using_Git-annex_as_a_web_browsing_assistant.mdwn

file too large to diff

− doc/tips/assume-unstaged.mdwn

file too large to diff

− doc/tips/assume-unstaged/comment_1_44abd811ef79a85e557418e17a3927be._comment

file too large to diff

− doc/tips/assume-unstaged/comment_2_5b589f37cfc03bf7be33a51826cc4dba._comment

file too large to diff

− doc/tips/automatically_getting_files_on_checkout.mdwn

file too large to diff

− doc/tips/beware_of_SSD_wear_when_doing_fsck_on_large_special_remotes.mdwn

file too large to diff

− doc/tips/centralised_repository:_starting_from_nothing.mdwn

file too large to diff

− doc/tips/centralized_git_repository_tutorial.mdwn

file too large to diff

− doc/tips/downloading_podcasts.mdwn

file too large to diff

− doc/tips/dropboxannex.mdwn

file too large to diff

− doc/tips/emacs_integration.mdwn

file too large to diff

− doc/tips/finding_duplicate_files.mdwn

file too large to diff

− doc/tips/finding_duplicate_files/comment_3._comment

file too large to diff

− doc/tips/flickrannex.mdwn

file too large to diff

− doc/tips/flickrannex/comment_10_50707f259abe5829ce075dfbecd5a4ba._comment

file too large to diff

− doc/tips/flickrannex/comment_11_ab5bcb025381b3da4d7c6dfd0c7310dd._comment

file too large to diff

− doc/tips/flickrannex/comment_12_90a331275d888221bc695003c8acbe46._comment

file too large to diff

− doc/tips/flickrannex/comment_2_d74c4fc7edf8e47f7482564ce0ef4d12._comment

file too large to diff

− doc/tips/flickrannex/comment_2_f53d0d5520e2835e9705bea4e75556f0._comment

file too large to diff

− doc/tips/flickrannex/comment_4_9ebba4d61140f6c2071e988c9328cf7e._comment

file too large to diff

− doc/tips/flickrannex/comment_5_4470dae270613dd8712623474bc80ab0._comment

file too large to diff

− doc/tips/flickrannex/comment_5_d395cdcf815cb430e374ff05c1a63ff4._comment

file too large to diff

− doc/tips/flickrannex/comment_6_8cf730097001ffe106f2c743edce9d0a._comment

file too large to diff

− doc/tips/flickrannex/comment_7_a80c8087c4e1562a4c98a24edc182e5a._comment

file too large to diff

− doc/tips/flickrannex/comment_8_94f84254c32cf0f7dd1441b7da5d2bc6._comment

file too large to diff

− doc/tips/flickrannex/comment_9_5299b4cab4a4cb8e8fd4d2b39f0ea59c._comment

file too large to diff

− doc/tips/fully_encrypted_git_repositories_with_gcrypt.mdwn

file too large to diff

− doc/tips/googledriveannex.mdwn

file too large to diff

− doc/tips/imapannex.mdwn

file too large to diff

− doc/tips/megaannex.mdwn

file too large to diff

− doc/tips/migrating_data_to_a_new_backend.mdwn

file too large to diff

− doc/tips/owncloudannex.mdwn

file too large to diff

− doc/tips/owncloudannex/comment_1_129652308c3c499462828dcaf8e747a4._comment

file too large to diff

− doc/tips/owncloudannex/comment_2_38604990368666f654d41891ba99ac61._comment

file too large to diff

− doc/tips/owncloudannex/comment_3_1bfd290d00d6536da7d31818db46f8ec._comment

file too large to diff

− doc/tips/owncloudannex/comment_4_492b6922a7c5bb5464fedb46b0c5303b._comment

file too large to diff

− doc/tips/owncloudannex/comment_5_1d48ac08714fadcb06d874570d745bd8._comment

file too large to diff

− doc/tips/owncloudannex/comment_6_65959f49a2f56bffd6fe48670c0c8d5a._comment

file too large to diff

− doc/tips/owncloudannex/comment_7_7482002991672ef67836bae43b8d0be8._comment

file too large to diff

− doc/tips/powerful_file_matching.mdwn

file too large to diff

− doc/tips/recover_data_from_lost+found.mdwn

file too large to diff

− doc/tips/replacing_Sparkleshare_or_dvcs-autosync_with_the_assistant.mdwn

file too large to diff

− doc/tips/setup_a_public_repository_on_a_web_site.mdwn

file too large to diff

− doc/tips/skydriveannex.mdwn

file too large to diff

− doc/tips/untrusted_repositories.mdwn

file too large to diff

− doc/tips/using_Amazon_Glacier.mdwn

file too large to diff

− doc/tips/using_Amazon_S3.mdwn

file too large to diff

− doc/tips/using_Amazon_S3/comment_1_666a26f95024760c99c627eed37b1966._comment

file too large to diff

− doc/tips/using_Amazon_S3/comment_2_f5a0883be7dbb421b584c6dc0165f1ef._comment

file too large to diff

− doc/tips/using_Google_Cloud_Storage.mdwn

file too large to diff

− doc/tips/using_box.com_as_a_special_remote.mdwn

file too large to diff

− doc/tips/using_git_annex_with_no_fixed_hostname_and_optimising_ssh.mdwn

file too large to diff

− doc/tips/using_gitolite_with_git-annex.mdwn

file too large to diff

− doc/tips/using_the_SHA1_backend.mdwn

file too large to diff

− doc/tips/using_the_web_as_a_special_remote.mdwn

file too large to diff

− doc/tips/visualizing_repositories_with_gource.mdwn

file too large to diff

− doc/tips/visualizing_repositories_with_gource/screenshot.jpg

file too large to diff

− doc/tips/what_to_do_when_a_repository_is_corrupted.mdwn

file too large to diff

− doc/tips/what_to_do_when_you_lose_a_repository.mdwn

file too large to diff

− doc/tips/yet_another_simple_disk_usage_like_utility.mdwn

file too large to diff

− doc/todo.mdwn

file too large to diff

− doc/todo/A_really_simple_way_to_pair_devices_like_bittorent_sync.mdwn

file too large to diff

− doc/todo/Bittorrent-like_features.mdwn

file too large to diff

− doc/todo/Build_for_Synology_DSM.mdwn

file too large to diff

− doc/todo/Move_ssh_config_to___126____47__ssh__47__git-annex__47__config.mdwn

file too large to diff

− doc/todo/Please_abort_build_if___34__make_test__34___fails.mdwn

file too large to diff

− doc/todo/Please_add_support_for_monad-control_0.3.x.mdwn

file too large to diff

− doc/todo/S3.mdwn

file too large to diff

− doc/todo/Slow_transfer_for_a_lot_of_small_files..mdwn

file too large to diff

− doc/todo/Use_MediaScannerConnection_on_Android.mdwn

file too large to diff

− doc/todo/Use_a_remote_as_a_sharing_site_for_files_with_obfuscated_URLs.mdwn

file too large to diff

− doc/todo/Wishlist:_additional_environment_variables_for_hooks.mdwn

file too large to diff

− doc/todo/add_--exclude_option_to_git_annex_find.mdwn

file too large to diff

− doc/todo/add_-all_option.mdwn

file too large to diff

− doc/todo/add_a_git_backend.mdwn

file too large to diff

− doc/todo/add_an_icon_for_the_.desktop_file.mdwn

file too large to diff

− doc/todo/add_metadata_to_annexed_files.mdwn

file too large to diff

− doc/todo/assistant_git_sync_laddering.mdwn

file too large to diff

− doc/todo/assistant_parallel_file_transfers.txt

file too large to diff

− doc/todo/assistant_smarter_archive_directory_handling.mdwn

file too large to diff

− doc/todo/assistant_threaded_runtime.mdwn

file too large to diff

− doc/todo/auto_remotes.mdwn

file too large to diff

− doc/todo/auto_remotes/discussion.mdwn

file too large to diff

− doc/todo/automatic_bookkeeping_watch_command.mdwn

file too large to diff

− doc/todo/avoid_unnecessary_union_merges.mdwn

file too large to diff

− doc/todo/backendSHA1.mdwn

file too large to diff

− doc/todo/branching.mdwn

file too large to diff

− doc/todo/cache_key_info.mdwn

file too large to diff

− doc/todo/cache_key_info/comment_1_578df1b3b2cbfdc4aa1805378f35dc48._comment

file too large to diff

− doc/todo/checkout.mdwn

file too large to diff

− doc/todo/checksum_verification_on_transfer.mdwn

file too large to diff

− doc/todo/direct_mode_guard.mdwn

file too large to diff

− doc/todo/done.mdwn

file too large to diff

− doc/todo/exclude_files_on_a_given_remote.mdwn

file too large to diff

− doc/todo/faster_gnupg_cipher.mdwn

file too large to diff

− doc/todo/faster_rsync_remotes.mdwn

file too large to diff

− doc/todo/file_copy_progress_bar.mdwn

file too large to diff

− doc/todo/free_space_checking_for_local_special_remotes.mdwn

file too large to diff

− doc/todo/fsck.mdwn

file too large to diff

− doc/todo/fsck_special_remotes.mdwn

file too large to diff

− doc/todo/git-annex-shell.mdwn

file too large to diff

− doc/todo/git-annex_unused_eats_memory.mdwn

file too large to diff

− doc/todo/gitolite_and_gitosis_support.mdwn

file too large to diff

− doc/todo/gitrm.mdwn

file too large to diff

− doc/todo/hidden_files.mdwn

file too large to diff

− doc/todo/http_headers.mdwn

file too large to diff

− doc/todo/immutable_annexed_files.mdwn

file too large to diff

− doc/todo/incremental_fsck.mdwn

file too large to diff

− doc/todo/keep_annexed_files_for_a_while.mdwn

file too large to diff

file too large to diff

− doc/todo/network_remotes.mdwn

file too large to diff

− doc/todo/object_dir_reorg_v2.mdwn

file too large to diff

− doc/todo/optimise_git-annex_merge.mdwn

file too large to diff

− doc/todo/optinally_transfer_file_unencryptedly.mdwn

file too large to diff

− doc/todo/parallel_possibilities.mdwn

file too large to diff

− doc/todo/pushpull.mdwn

file too large to diff

− doc/todo/redundancy_stats_in_status.mdwn

file too large to diff

− doc/todo/resuming_encrypted_uploads.mdwn

file too large to diff

− doc/todo/rsync.mdwn

file too large to diff

− doc/todo/smudge.mdwn

file too large to diff

− doc/todo/smudge/comment_1_4ea616bcdbc9e9a6fae9f2e2795c31c9._comment

file too large to diff

− doc/todo/smudge/comment_2_e04b32caa0d2b4c577cdaf382a3ff7f6._comment

file too large to diff

− doc/todo/special_remote_for_amazon_glacier.mdwn

file too large to diff

− doc/todo/speed_up_fsck.mdwn

file too large to diff

− doc/todo/stream_feature__63__.mdwn

file too large to diff

− doc/todo/support-non-utf8-locales.mdwn

file too large to diff

− doc/todo/support_S3_multipart_uploads.mdwn

file too large to diff

− doc/todo/support_for_lossy_remotes.mdwn

file too large to diff

− doc/todo/support_for_writing_external_special_remotes.mdwn

file too large to diff

− doc/todo/support_fsck_in_bare_repos.mdwn

file too large to diff

file too large to diff

− doc/todo/sync_my_local_git-annex_from_a_dump_remote.mdwn

file too large to diff

− doc/todo/tahoe_lfs_for_reals.mdwn

file too large to diff

− doc/todo/union_mounting.mdwn

file too large to diff

− doc/todo/union_mounting/comment_1_cb08435812dd7766de26199c73f38e8b._comment

file too large to diff

− doc/todo/union_mounting/comment_2_240b1736f6bd4fbf87c372d3a46e661b._comment

file too large to diff

− doc/todo/untracked_remotes.mdwn

file too large to diff

− doc/todo/use_cp_reflink.mdwn

file too large to diff

− doc/todo/using_url_backend.mdwn

file too large to diff

− doc/todo/windows_support.mdwn

file too large to diff

− doc/todo/windows_support/comment_1_3cc26ad8101a22e95a8c60cf0c4dedcc._comment

file too large to diff

− doc/todo/windows_support/comment_2_8acae818ce468967499050bbe3c532ea._comment

file too large to diff

− doc/todo/windows_support/comment_3_bd0a12f4c9b884ab8a06082842381a01._comment

file too large to diff

− doc/todo/windows_support/comment_4_ad06b98b2ddac866ffee334e41fee6a8._comment

file too large to diff

− doc/todo/windows_support/comment_5_444fc7251f57db241b6e80abae41851c._comment

file too large to diff

− doc/todo/windows_support/comment_6_34f1f60b570c389bb1e741b990064a7e._comment

file too large to diff

− doc/todo/windows_support/comment_7_a5ca56c487257434650420acfa60e39f._comment

file too large to diff

− doc/todo/windows_support/comment_8_61214de7d967740d42905f3823ce2f65._comment

file too large to diff

− doc/todo/windows_support/comment_9_259a0b1a6f4d8d1944173380adc5e7c8._comment

file too large to diff

− doc/todo/wishlist:_Add_to_Android_version_to_Google_Play.mdwn

file too large to diff

− doc/todo/wishlist:_Advanced_settings_for_xmpp_and_webdav.mdwn

file too large to diff

− doc/todo/wishlist:_An_--all_option_for_dropunused.mdwn

file too large to diff

− doc/todo/wishlist:_An_option_like_--git-dir.mdwn

file too large to diff

− doc/todo/wishlist:_Freeing_X_space_on_remote_Y.mdwn

file too large to diff

− doc/todo/wishlist:_GnuPG_options.mdwn

file too large to diff

− doc/todo/wishlist:_Have_a_preview_of_download_or_upload_size.mdwn

file too large to diff

− doc/todo/wishlist:_Option_to_specify_max_transfer_rate.mdwn

file too large to diff

− doc/todo/wishlist:_Prevent_repeated_password_prompts_for_one_command.mdwn

file too large to diff

− doc/todo/wishlist:_Restore_s3_files_moved_to_Glacier.mdwn

file too large to diff

− doc/todo/wishlist:___34__git_annex_add__34___multiple_processes.mdwn

file too large to diff

− doc/todo/wishlist:___34__quiet__34___annex_get_for_centralized_use_case.mdwn

file too large to diff

− doc/todo/wishlist:___39__whereis__39___support_in_the_webapp.mdwn

file too large to diff

− doc/todo/wishlist:___96__git_annex_drop_--relaxed__96__.mdwn

file too large to diff

− doc/todo/wishlist:___96__git_annex_sync_-m__96__.mdwn

file too large to diff

− doc/todo/wishlist:_addurl_https:.mdwn

file too large to diff

− doc/todo/wishlist:_allow_configuration_of_downloader_for_addurl.mdwn

file too large to diff

− doc/todo/wishlist:_annex.largefiles_support_for_mimetypes.mdwn

file too large to diff

− doc/todo/wishlist:_command_options_changes.mdwn

file too large to diff

− doc/todo/wishlist:_define_remotes_that_must_have_all_files.mdwn

file too large to diff

− doc/todo/wishlist:_disable_automatic_commits.mdwn

file too large to diff

− doc/todo/wishlist:_do_round_robin_downloading_of_data.mdwn

file too large to diff

− doc/todo/wishlist:_dropping_git-annex_history.mdwn

file too large to diff

− doc/todo/wishlist:_git-annex_replicate.mdwn

file too large to diff

− doc/todo/wishlist:_git_annex_diff.mdwn

file too large to diff

− doc/todo/wishlist:_git_annex_put_--_same_as_get__44___but_for_defaults.mdwn

file too large to diff

− doc/todo/wishlist:_git_annex_status.mdwn

file too large to diff

− doc/todo/wishlist:_git_backend_for_git-annex.mdwn

file too large to diff

− doc/todo/wishlist:_history_of_operations.mdwn

file too large to diff

− doc/todo/wishlist:_make_partial_files_available_during_transfer.mdwn

file too large to diff

− doc/todo/wishlist:_option_to_disable_url_checking_with_addurl.mdwn

file too large to diff

− doc/todo/wishlist:_perform_fsck_remotely.mdwn

file too large to diff

− doc/todo/wishlist:_print_locations_for_files_in_rsync_remote.mdwn

file too large to diff

− doc/todo/wishlist:_recursive_directory_remote_setup__47__addurl.mdwn

file too large to diff

− doc/todo/wishlist:_simpler_gpg_usage.mdwn

file too large to diff

− doc/todo/wishlist:_special_remote_Ubuntu_One.mdwn

file too large to diff

− doc/todo/wishlist:_special_remote_for_sftp_or_rsync.mdwn

file too large to diff

− doc/todo/wishlist:_special_remote_mega.co.nz.mdwn

file too large to diff

− doc/todo/wishlist:_support_copy_--from__61__x_--to__61__y.mdwn

file too large to diff

− doc/todo/wishlist:_support_for_more_ssh_urls_.mdwn

file too large to diff

− doc/todo/wishlist:_swift_backend.mdwn

file too large to diff

− doc/todo/wishlist:_traffic_accounting_for_git-annex.mdwn

file too large to diff

− doc/todo/wishlist:_vicfg_possible_repo_group_names.mdwn

file too large to diff

− doc/todo/wishlist:alias_system.mdwn

file too large to diff

− doc/transferring_data.mdwn

file too large to diff

− doc/trust.mdwn

file too large to diff

− doc/upgrades.mdwn

file too large to diff

− doc/upgrades/SHA_size.mdwn

file too large to diff

− doc/upgrades/SHA_size/comment_1_20f9b7b75786075de666b2146dc13a60._comment

file too large to diff

− doc/use_case/Alice.mdwn

file too large to diff

− doc/use_case/Bob.mdwn

file too large to diff

− doc/users.mdwn

file too large to diff

− doc/users/anarcat.mdwn

file too large to diff

− doc/users/chrysn.mdwn

file too large to diff

− doc/users/fmarier.mdwn

file too large to diff

− doc/users/gebi.mdwn

file too large to diff

− doc/users/joey.mdwn

file too large to diff

− doc/videos.mdwn

file too large to diff

− doc/videos/FOSDEM2012.mdwn

file too large to diff

− doc/videos/LCA2013.mdwn

file too large to diff

− doc/videos/git-annex_assistant_archiving.mdwn

file too large to diff

− doc/videos/git-annex_assistant_introduction.mdwn

file too large to diff

− doc/videos/git-annex_assistant_remote_sharing.mdwn

file too large to diff

− doc/videos/git-annex_assistant_sync_demo.mdwn

file too large to diff

− doc/videos/git-annex_watch_demo.mdwn

file too large to diff

− doc/videos/git-annex_weppapp_demo.mdwn

file too large to diff

− doc/walkthrough.mdwn

file too large to diff

− doc/walkthrough/adding_a_remote.mdwn

file too large to diff

− doc/walkthrough/adding_files.mdwn

file too large to diff

− doc/walkthrough/automatically_managing_content.mdwn

file too large to diff

− doc/walkthrough/backups.mdwn

file too large to diff

− doc/walkthrough/creating_a_repository.mdwn

file too large to diff

− doc/walkthrough/fsck:_verifying_your_data.mdwn

file too large to diff

− doc/walkthrough/fsck:_when_things_go_wrong.mdwn

file too large to diff

− doc/walkthrough/getting_file_content.mdwn

file too large to diff

− doc/walkthrough/modifying_annexed_files.mdwn

file too large to diff

− doc/walkthrough/more.mdwn

file too large to diff

− doc/walkthrough/moving_file_content_between_repositories.mdwn

file too large to diff

− doc/walkthrough/removing_files.mdwn

file too large to diff

− doc/walkthrough/removing_files:_When_things_go_wrong.mdwn

file too large to diff

− doc/walkthrough/renaming_files.mdwn

file too large to diff

− doc/walkthrough/syncing.mdwn

file too large to diff

− doc/walkthrough/transferring_files:_When_things_go_wrong.mdwn

file too large to diff

− doc/walkthrough/unused_data.mdwn

file too large to diff

− doc/walkthrough/using_bup.mdwn

file too large to diff

− doc/walkthrough/using_ssh_remotes.mdwn

file too large to diff

− doc/walkthrough/using_tags_and_branches.mdwn

file too large to diff

git-annex-shell.1 view

file too large to diff

git-annex.1 view

file too large to diff

git-annex.cabal view

file too large to diff

standalone/android/Makefile view

file too large to diff

+ standalone/android/buildchroot view

file too large to diff

+ standalone/android/buildchroot-inchroot view

file too large to diff

+ standalone/android/buildchroot-inchroot-asuser view

file too large to diff

+ standalone/android/clean-haskell-packages view

file too large to diff

standalone/android/evilsplicer-headers.hs view

file too large to diff

− standalone/android/haskell-patches/DAV_0.3-0001-build-without-TH.patch

file too large to diff

+ standalone/android/haskell-patches/DAV_build-without-TH.patch view

file too large to diff

− standalone/android/haskell-patches/aeson_0.6.1.0_0001-disable-TH.patch

file too large to diff

+ standalone/android/haskell-patches/async_fix-build-with-new-ghc.patch view

file too large to diff

+ standalone/android/haskell-patches/comonad_cross-build.patch view

file too large to diff

+ standalone/android/haskell-patches/entropy_cross-build.patch view

file too large to diff

+ standalone/android/haskell-patches/file-embed_export-TH-symbols.patch view

file too large to diff

+ standalone/android/haskell-patches/gnuidn_fix-build-with-new-base.patch view

file too large to diff

− standalone/android/haskell-patches/hS3_0.5.7_0001-fix-build.patch

file too large to diff

− standalone/android/haskell-patches/hamlet_1.1.6.1_0001-remove-TH.patch

file too large to diff

+ standalone/android/haskell-patches/hamlet_export-TH-splice-stuff.patch view

file too large to diff

− standalone/android/haskell-patches/lens_3.8.5-0001-build-without-TH.patch

file too large to diff

+ standalone/android/haskell-patches/lens_various-hacking-to-cross-build.patch view

file too large to diff

+ standalone/android/haskell-patches/lifted-base_crossbuild.patch view

file too large to diff

+ standalone/android/haskell-patches/persistent-template_stub-out.patch view

file too large to diff

standalone/android/haskell-patches/persistent_1.1.5.1_0001-disable-TH.patch view

file too large to diff

+ standalone/android/haskell-patches/primitive_fix-build-with-new-ghc.patch view

file too large to diff

+ standalone/android/haskell-patches/process_fix-build-with-new-ghc.patch view

file too large to diff

− standalone/android/haskell-patches/shakespeare-js_1.1.2_0001-remove-TH.patch

file too large to diff

+ standalone/android/haskell-patches/shakespeare-js_TH-exports.patch view

file too large to diff

− standalone/android/haskell-patches/shakespeare_1.0.3_0001-remove-TH.patch

file too large to diff

+ standalone/android/haskell-patches/skein_hardcode_little-endian.patch view

file too large to diff

standalone/android/haskell-patches/socks_0.4.2_0001-remove-IPv6-stuff.patch view

file too large to diff

+ standalone/android/haskell-patches/unix-time_hack-for-Bionic.patch view

file too large to diff

+ standalone/android/haskell-patches/vector_hack-to-build-with-new-ghc.patch view

file too large to diff

− standalone/android/haskell-patches/wai-app-static_1.3.1-remove-TH.patch

file too large to diff

+ standalone/android/haskell-patches/wai-app-static_deal-with-TH.patch view

file too large to diff

+ standalone/android/haskell-patches/yesod-auth_don-t-really-build.patch view

file too large to diff

− standalone/android/haskell-patches/yesod-core_1.1.8_0001-remove-TH.patch

file too large to diff

+ standalone/android/haskell-patches/yesod-core_expand_TH.patch view

file too large to diff

− standalone/android/haskell-patches/yesod-form_1.2.1.1-0002-expand-TH.patch

file too large to diff

+ standalone/android/haskell-patches/yesod-form_spliced-TH.patch view

file too large to diff

− standalone/android/haskell-patches/yesod-static_1.1.2-remove-TH.patch

file too large to diff

+ standalone/android/haskell-patches/yesod_001_hacked-up-for-Android.patch view

file too large to diff

standalone/android/install-haskell-packages view

file too large to diff

standalone/licences.gz view

file too large to diff

standalone/linux/runshell view

file too large to diff

standalone/osx/git-annex.app/Contents/MacOS/runshell view

file too large to diff

templates/configurators/adddrive.hamlet view

file too large to diff

− templates/configurators/adddrive/clonemodal.hamlet

file too large to diff

+ templates/configurators/adddrive/combine.hamlet view

file too large to diff

− templates/configurators/adddrive/confirm.hamlet

file too large to diff

+ templates/configurators/adddrive/encrypt.hamlet view

file too large to diff

+ templates/configurators/adddrive/setupmodal.hamlet view

file too large to diff

− templates/configurators/addrsync.net.hamlet

file too large to diff

templates/configurators/editrepository.hamlet view

file too large to diff

+ templates/configurators/genkeymodal.hamlet view

file too large to diff

+ templates/configurators/needgcrypt.hamlet view

file too large to diff

templates/configurators/newrepository/combine.hamlet view

file too large to diff

+ templates/configurators/rsync.net/add.hamlet view

file too large to diff

+ templates/configurators/rsync.net/encrypt.hamlet view

file too large to diff

templates/configurators/ssh/enable.hamlet view

file too large to diff