packages feed

git-annex 4.20130802 → 4.20130815

raw patch · 108 files changed

+1736/−181 lines, 108 filesbinary-added

Files

Annex.hs view
@@ -43,6 +43,7 @@ import qualified Git.Config import Git.CatFile import Git.CheckAttr+import Git.CheckIgnore import Git.SharedRepository import qualified Git.Queue import Types.Backend@@ -91,6 +92,7 @@ 	, repoqueue :: Maybe Git.Queue.Queue 	, catfilehandles :: M.Map FilePath CatFileHandle 	, checkattrhandle :: Maybe CheckAttrHandle+	, checkignorehandle :: Maybe (Maybe CheckIgnoreHandle) 	, forcebackend :: Maybe String 	, forcenumcopies :: Maybe Int 	, limit :: Matcher (FileInfo -> Annex Bool)@@ -123,6 +125,7 @@ 	, repoqueue = Nothing 	, catfilehandles = M.empty 	, checkattrhandle = Nothing+	, checkignorehandle = Nothing 	, forcebackend = Nothing 	, forcenumcopies = Nothing 	, limit = Left []
+ Annex/CheckIgnore.hs view
@@ -0,0 +1,32 @@+{- git check-ignore interface, with handle automatically stored in+ - the Annex monad+ -+ - Copyright 2013 Joey Hess <joey@kitenet.net>+ -+ - Licensed under the GNU GPL version 3 or higher.+ -}++module Annex.CheckIgnore (+	checkIgnored,+	checkIgnoreHandle+) where++import Common.Annex+import qualified Git.CheckIgnore as Git+import qualified Annex++checkIgnored :: FilePath -> Annex Bool+checkIgnored file = go =<< checkIgnoreHandle+  where+  	go Nothing = return False+	go (Just h) = liftIO $ Git.checkIgnored h file++checkIgnoreHandle :: Annex (Maybe Git.CheckIgnoreHandle)+checkIgnoreHandle = maybe startup return =<< Annex.getState Annex.checkignorehandle+  where+	startup = do+		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 }+		return v
Annex/Content.hs view
@@ -48,12 +48,14 @@ import Utility.DataUnits import Utility.CopyFile import Config-import Annex.Exception import Git.SharedRepository import Annex.Perms import Annex.Link import Annex.Content.Direct import Annex.ReplaceFile+#ifndef mingw32_HOST_OS+import Annex.Exception+#endif  {- Checks if a given key's content is currently present. -} inAnnex :: Key -> Annex Bool@@ -91,34 +93,34 @@ inAnnexSafe = inAnnex' (fromMaybe False) (Just False) go   where 	go f = liftIO $ openforlock f >>= check-	openforlock f = catchMaybeIO $ #ifndef mingw32_HOST_OS+	openforlock f = catchMaybeIO $ 		openFd f ReadOnly Nothing defaultFileFlags #else-		return ()+	openforlock _ = return $ Just () #endif 	check Nothing = return is_missing-	check (Just h) = do #ifndef mingw32_HOST_OS+	check (Just h) = do 		v <- getLock h (ReadLock, AbsoluteSeek, 0, 0) 		closeFd h 		return $ case v of 			Just _ -> is_locked 			Nothing -> is_unlocked #else-		return is_unlocked+	check (Just _) = return is_unlocked #endif+#ifndef mingw32_HOST_OS 	is_locked = Nothing+#endif 	is_unlocked = Just True 	is_missing = Just False  {- Content is exclusively locked while running an action that might remove  - it. (If the content is not present, no locking is done.) -} lockContent :: Key -> Annex a -> Annex a+#ifndef mingw32_HOST_OS lockContent key a = do-#ifdef mingw32_HOST_OS-	a-#else 	file <- calcRepo $ gitAnnexLocation key 	bracketIO (openforlock file >>= lock) unlock (const a)   where@@ -140,6 +142,8 @@ 			Right _ -> return $ Just fd 	unlock Nothing = noop 	unlock (Just l) = closeFd l+#else+lockContent _key a = a -- no locking for Windows! #endif  {- Runs an action, passing it a temporary filename to get,
Annex/Environment.hs view
@@ -10,11 +10,14 @@ module Annex.Environment where  import Common.Annex-import Utility.Env import Utility.UserInfo import qualified Git.Config import Config import Annex.Exception++#ifndef mingw32_HOST_OS+import Utility.Env+#endif  {- Checks that the system's environment allows git to function.  - Git requires a GECOS username, or suitable git configuration, or
Annex/Journal.hs view
@@ -86,12 +86,13 @@ 	mode <- annexFileMode 	bracketIO (lock lockfile mode) unlock (const a)   where-	lock lockfile mode = do #ifndef mingw32_HOST_OS+	lock lockfile mode = do 		l <- noUmask mode $ createFile lockfile mode 		waitToSetLock l (WriteLock, AbsoluteSeek, 0, 0) 		return l #else+	lock lockfile _mode = do 		writeFile lockfile "" 		return lockfile #endif
Annex/LockPool.hs view
@@ -14,7 +14,9 @@  import Common.Annex import Annex+#ifndef mingw32_HOST_OS import Annex.Perms+#endif  {- Create a specified lock file, and takes a shared lock. -} lockFile :: FilePath -> Annex ()
Annex/Ssh.hs view
@@ -19,11 +19,13 @@  import Common.Annex import Annex.LockPool-import Annex.Perms import qualified Build.SysConfig as SysConfig import qualified Annex import Config import Utility.Env+#ifndef mingw32_HOST_OS+import Annex.Perms+#endif  {- Generates parameters to ssh to a given host (or user@host) on a given  - port, with connection caching. -}
Assistant/DeleteRemote.hs view
@@ -18,7 +18,7 @@ import qualified Remote import Remote.List import qualified Git.Command-import qualified Git.Version+import qualified Git.BuildVersion import Logs.Trust import qualified Annex @@ -39,7 +39,7 @@ 			[ Param "remote" 			-- name of this subcommand changed 			, Param $-				if Git.Version.older "1.8.0"+				if Git.BuildVersion.older "1.8.0" 					then "rm" 					else "remove" 			, Param (Remote.name remote)
Assistant/Install/Menu.o view

binary file changed (9360 → 9360 bytes)

Assistant/Threads/Committer.hs view
@@ -22,7 +22,7 @@ import qualified Annex.Queue import qualified Git.Command import qualified Git.LsFiles-import qualified Git.Version+import qualified Git.BuildVersion import qualified Command.Add import Utility.ThreadScheduler import qualified Utility.Lsof as Lsof@@ -234,9 +234,9 @@ 		, Param "--no-verify" 		] 	nomessage ps-		| Git.Version.older "1.7.2" =+		| Git.BuildVersion.older "1.7.2" = 			Param "-m" : Param "autocommit" : ps-		| Git.Version.older "1.7.8" =+		| Git.BuildVersion.older "1.7.8" = 			Param "--allow-empty-message" : 			Param "-m" : Param "" : ps 		| otherwise =
Assistant/Threads/Watcher.hs view
@@ -1,11 +1,11 @@ {- git-annex assistant tree watcher  -- - Copyright 2012 Joey Hess <joey@kitenet.net>+ - Copyright 2012-2013 Joey Hess <joey@kitenet.net>  -  - Licensed under the GNU GPL version 3 or higher.  -} -{-# LANGUAGE DeriveDataTypeable, CPP #-}+{-# LANGUAGE DeriveDataTypeable, BangPatterns, CPP #-}  module Assistant.Threads.Watcher ( 	watchThread,@@ -33,6 +33,7 @@ import Annex.Direct import Annex.Content.Direct import Annex.CatFile+import Annex.CheckIgnore import Annex.Link import Annex.FileMatcher import Annex.ReplaceFile@@ -141,6 +142,8 @@  		return (True, r) +{- Hardcoded ignores, passed to the DirWatcher so it can avoid looking+ - at the entire .git directory. Does not include .gitignores. -} ignored :: FilePath -> Bool ignored = ig . takeFileName   where@@ -152,6 +155,12 @@ #endif 	ig _ = False +unlessIgnored :: FilePath -> Assistant (Maybe Change) -> Assistant (Maybe Change)+unlessIgnored file a = ifM (liftAnnex $ checkIgnored file)+	( noChange+	, a+	)+ type Handler = FilePath -> Maybe FileStatus -> Assistant (Maybe Change)  {- Runs an action handler, and if there was a change, adds it to the ChangeChan.@@ -186,7 +195,9 @@  onAdd :: FileMatcher -> Handler onAdd matcher file filestatus-	| maybe False isRegularFile filestatus = add matcher file+	| maybe False isRegularFile filestatus =+		unlessIgnored file $+			add matcher file 	| otherwise = noChange  {- In direct mode, add events are received for both new files, and@@ -214,9 +225,10 @@ 					liftAnnex $ changedDirect key file 					add matcher file 				)-		_ -> guardSymlinkStandin Nothing $ do-			debug ["add direct", file]-			add matcher file+		_ -> unlessIgnored file $+			guardSymlinkStandin Nothing $ do+				debug ["add direct", file]+				add matcher file   where  	{- On a filesystem without symlinks, we'll get changes for regular 	 - files that git uses to stand-in for symlinks. Detect when@@ -240,7 +252,7 @@  - before adding it.  -} onAddSymlink :: Bool -> Handler-onAddSymlink isdirect file filestatus = do+onAddSymlink isdirect file filestatus = unlessIgnored file $ do 	linktarget <- liftIO (catchMaybeIO $ readSymbolicLink file) 	kv <- liftAnnex (Backend.lookupFile file) 	onAddSymlink' linktarget (fmap fst kv) isdirect file filestatus
Build/Configure.hs view
@@ -17,6 +17,7 @@ import Utility.Monad import Utility.Exception import Utility.ExternalSHA+import qualified Git.Version  tests :: [TestCase] tests =@@ -121,10 +122,8 @@ 	middle = drop 1 . init  getGitVersion :: Test-getGitVersion = do-	s <- readProcess "git" ["--version"] ""-	let version = unwords $ drop 2 $ words $ head $ lines s-	return $ Config "gitversion" (StringConfig version)+getGitVersion = Config "gitversion" . StringConfig . show+	<$> Git.Version.installed  getSshConnectionCaching :: Test getSshConnectionCaching = Config "sshconnectioncaching" . BoolConfig <$>
Build/Configure.o view

binary file changed (54624 → 53340 bytes)

Build/DesktopFile.o view

binary file changed (14364 → 14364 bytes)

Build/TestConfig.o view

binary file changed (33088 → 33088 bytes)

BuildFlags.hs view
@@ -48,4 +48,7 @@ #ifdef WITH_DNS 	, "DNS" #endif+#ifdef WITH_FEEDS+	, "Feeds"+#endif 	]
CHANGELOG view
@@ -1,3 +1,17 @@+git-annex (4.20130815) unstable; urgency=low++  * assistant, watcher: .gitignore files and other git ignores are now+    honored, when git 1.8.4 or newer is installed.+    (Thanks, Adam Spiers, for getting the necessary support into git for this.)+  * importfeed: Ignores transient problems with feeds. Only exits nonzero+    when a feed has repeatedly had a problems for at least 1 day.+  * importfeed: Fix handling of dots in extensions.+  * Windows: Added support for encrypted special remotes.+  * Windows: Fixed permissions problem that prevented removing files+    from directory special remote. Directory special remotes now fully usable.++ -- Joey Hess <joeyh@debian.org>  Thu, 15 Aug 2013 10:14:33 +0200+ git-annex (4.20130802) unstable; urgency=low    * dropunused behavior change: Now refuses to drop the last copy of a
CmdLine.hs view
@@ -17,7 +17,7 @@ import qualified Data.Map as M import Control.Exception (throw) import System.Console.GetOpt-#ifndef __WINDOWS__+#ifndef mingw32_HOST_OS import System.Posix.Signals #endif @@ -123,7 +123,7 @@ {- Actions to perform each time ran. -} startup :: Annex Bool startup = liftIO $ do-#ifndef __WINDOWS__+#ifndef mingw32_HOST_OS 	void $ installHandler sigINT Default Nothing #endif 	return True
Command/ImportFeed.hs view
@@ -13,6 +13,7 @@ import qualified Data.Set as S import qualified Data.Map as M import Data.Char+import Data.Time.Clock  import Common.Annex import qualified Annex@@ -23,6 +24,8 @@ import qualified Utility.Format import Utility.Tmp import Command.AddUrl (addUrlFile, relaxedOption)+import Annex.Perms+import Backend.URL (fromUrl)  def :: [Command] def = [notBareRepo $ withOptions [templateOption, relaxedOption] $@@ -48,20 +51,30 @@ 	v <- findEnclosures url 	case v of 		Just l | not (null l) -> do-			mapM_ (downloadEnclosure relaxed cache) l+			ok <- all id+				<$> mapM (downloadEnclosure relaxed cache) l+			next $ cleanup url ok+		_ -> do+			feedProblem url "bad feed content" 			next $ return True-		_ -> stop +cleanup :: URLString -> Bool -> CommandCleanup+cleanup url ok = do+	when ok $+		clearFeedProblem url+	return ok+ data ToDownload = ToDownload 	{ feed :: Feed+	, feedurl :: URLString 	, item :: Item 	, location :: URLString 	} -mkToDownload :: Feed -> Item -> Maybe ToDownload-mkToDownload f i = case getItemEnclosure i of+mkToDownload :: Feed -> URLString -> Item -> Maybe ToDownload+mkToDownload f u i = case getItemEnclosure i of 	Nothing -> Nothing-	Just (enclosureurl, _, _) -> Just $ ToDownload f i enclosureurl+	Just (enclosureurl, _, _) -> Just $ ToDownload f u i enclosureurl  data Cache = Cache 	{ knownurls :: S.Set URLString@@ -80,13 +93,10 @@ 	ret s = return $ Cache s tmpl  findEnclosures :: URLString -> Annex (Maybe [ToDownload])-findEnclosures url = go =<< downloadFeed url+findEnclosures url = extract <$> downloadFeed url   where-	go Nothing = do-		warning $ "failed to parse feed " ++ url-		return Nothing-	go (Just f) = return $ Just $-		mapMaybe (mkToDownload f) (feedItems f)+	extract Nothing = Nothing+	extract (Just f) = Just $ mapMaybe (mkToDownload f url) (feedItems f)  {- Feeds change, so a feed download cannot be resumed. -} downloadFeed :: URLString -> Annex (Maybe Feed)@@ -95,16 +105,15 @@ 	liftIO $ withTmpFile "feed" $ \f h -> do 		fileEncoding h 		ifM (Url.download url [] [] f)-			( parseFeedString <$> hGetContentsStrict h+			( liftIO $ parseFeedString <$> hGetContentsStrict h 			, return Nothing 			)  {- Avoids downloading any urls that are already known to be associated  - with a file in the annex, unless forced. -}-downloadEnclosure :: Bool -> Cache -> ToDownload -> Annex ()+downloadEnclosure :: Bool -> Cache -> ToDownload -> Annex Bool downloadEnclosure relaxed cache enclosure-	| S.member url (knownurls cache) =-		whenM forced go+	| S.member url (knownurls cache) = ifM forced (go, return True) 	| otherwise = go   where   	forced = Annex.getState Annex.force@@ -112,13 +121,17 @@ 	go = do 		dest <- makeunique (1 :: Integer) $ feedFile (template cache) enclosure 		case dest of-			Nothing -> noop+			Nothing -> return True 			Just f -> do 				showStart "addurl" f-				ifM (addUrlFile relaxed url f)-					( showEndOk-					, showEndFail-					)+				ok <- addUrlFile relaxed url f+				if ok+					then do+						showEndOk+						return True+					else do+						showEndFail+						checkFeedBroken (feedurl enclosure) 	{- Find a unique filename to save the url to. 	 - If the file exists, prefixes it with a number. 	 - When forced, the file may already exist and have the same@@ -169,5 +182,41 @@ 	fieldMaybe k (Just v) = field k v  	sanitize c+		| c == '.' = c 		| isSpace c || isPunctuation c || c == '/' = '_' 		| otherwise = c++{- Called when there is a problem with a feed.+ - Throws an error if the feed is broken, otherwise shows a warning. -}+feedProblem :: URLString -> String -> Annex ()+feedProblem url message = ifM (checkFeedBroken url)+	( error $ message ++ " (having repeated problems with this feed!)"+	, warning $ "warning: " ++ message+	)++{- A feed is only broken if problems have occurred repeatedly, for at+ - least 23 hours. -}+checkFeedBroken :: URLString -> Annex Bool+checkFeedBroken url = checkFeedBroken' url =<< feedState url+checkFeedBroken' :: URLString -> FilePath -> Annex Bool+checkFeedBroken' url f = do+	prev <- maybe Nothing readish <$> liftIO (catchMaybeIO $ readFile f)+	now <- liftIO getCurrentTime+	case prev of+		Nothing -> do+			createAnnexDirectory (parentDir f)+			liftIO $ writeFile f $ show now+			return False+		Just prevtime -> do+			let broken = diffUTCTime now prevtime > 60 * 60 * 23+			when broken $+				-- Avoid repeatedly complaining about+				-- broken feed.+				clearFeedProblem url+			return broken++clearFeedProblem :: URLString -> Annex ()+clearFeedProblem url = void $ liftIO . tryIO . removeFile =<< feedState url++feedState :: URLString -> Annex FilePath+feedState url = fromRepo . gitAnnexFeedState =<< fromUrl url Nothing
Config/Files.o view

binary file changed (15108 → 15108 bytes)

Creds.hs view
@@ -15,7 +15,9 @@ import Crypto import Types.Remote (RemoteConfig, RemoteConfigKey) import Remote.Helper.Encryptable (remoteCipher, embedCreds)+#ifndef mingw32_HOST_OS import Utility.Env (setEnv)+#endif  import System.Environment import qualified Data.ByteString.Lazy.Char8 as L@@ -107,7 +109,7 @@  {- Stores a CredPair in the environment. -} setEnvCredPair :: CredPair -> CredPairStorage -> IO ()-#ifndef __WINDOWS__+#ifndef mingw32_HOST_OS setEnvCredPair (l, p) storage = do 	set uenv l 	set penv p
Git.hs view
@@ -32,13 +32,15 @@ ) where  import Network.URI (uriPath, uriScheme, unEscapeString)-#ifndef __WINDOWS__+#ifndef mingw32_HOST_OS import System.Posix.Files #endif  import Common import Git.Types+#ifndef mingw32_HOST_OS import Utility.FileMode+#endif  {- User-visible description of a git repo. -} repoDescribe :: Repo -> String@@ -131,7 +133,7 @@ 	ifM (catchBoolIO $ isexecutable hook) 		( return $ Just hook , return Nothing )   where-#if __WINDOWS__+#if mingw32_HOST_OS 	isexecutable f = doesFileExist f #else 	isexecutable f = isExecutable . fileMode <$> getFileStatus f
+ Git/BuildVersion.hs view
@@ -0,0 +1,21 @@+{- git build version+ -+ - Copyright 2011 Joey Hess <joey@kitenet.net>+ -+ - Licensed under the GNU GPL version 3 or higher.+ -}++module Git.BuildVersion where++import Git.Version+import qualified Build.SysConfig++{- Using the version it was configured for avoids running git to check its+ - version, at the cost that upgrading git won't be noticed.+ - This is only acceptable because it's rare that git's version influences+ - code's behavior. -}+buildVersion :: GitVersion+buildVersion = normalize Build.SysConfig.gitversion++older :: String -> Bool+older n = buildVersion < normalize n 
Git/CatFile.hs view
@@ -93,10 +93,10 @@ 			, Param "-p" 			, Param query 			] repo-		(_, Just h, _, pid) <- withNullHandle $ \null -> +		(_, Just h, _, pid) <- withNullHandle $ \h ->  			createProcess p 				{ std_out = CreatePipe-				, std_err = UseHandle null+				, std_err = UseHandle h 				} 		fileEncoding h 		content <- L.hGetContents h
Git/CheckAttr.hs view
@@ -10,7 +10,7 @@ import Common import Git import Git.Command-import qualified Git.Version+import qualified Git.BuildVersion import qualified Utility.CoProcess as CoProcess  type CheckAttrHandle = (CoProcess.CoProcessHandle, [Attr], String)@@ -54,7 +54,7 @@ 	 - With newer git, git check-attr chokes on some absolute 	 - filenames, and the bugs that necessitated them were fixed, 	 - so use relative filenames. -}-	oldgit = Git.Version.older "1.7.7"+	oldgit = Git.BuildVersion.older "1.7.7" 	file' 		| oldgit = absPathFrom cwd file 		| otherwise = relPathDirToFile cwd $ absPathFrom cwd file
+ Git/CheckIgnore.hs view
@@ -0,0 +1,71 @@+{- git check-ignore interface+ -+ - Copyright 2013 Joey Hess <joey@kitenet.net>+ -+ - Licensed under the GNU GPL version 3 or higher.+ -}++module Git.CheckIgnore (+	CheckIgnoreHandle,+	checkIgnoreStart,+	checkIgnoreStop,+	checkIgnored+) where++import Common+import Git+import Git.Command+import qualified Git.Version+import qualified Utility.CoProcess as CoProcess++import System.IO.Error++type CheckIgnoreHandle = CoProcess.CoProcessHandle++{- Starts git check-ignore running, and returns a handle.+ -+ - This relies on git check-ignore --non-matching -v outputting+ - lines for both matching an non-matching files. Also relies on+ - GIT_FLUSH behavior flushing the output buffer when git check-ignore+ - is piping to us.+ -+ - The first version of git to support what we need is 1.8.4.+ - Nothing is returned if an older git is installed.+ -}+checkIgnoreStart :: Repo -> IO (Maybe CheckIgnoreHandle)+checkIgnoreStart repo = ifM supportedGitVersion+	( Just <$> (CoProcess.rawMode =<< gitCoProcessStart True params repo)+	, return Nothing+	)+  where+	params =+		[ Param "check-ignore" +		, Params "-z --stdin --verbose --non-matching"+		]++supportedGitVersion :: IO Bool+supportedGitVersion = do+	v <- Git.Version.installed+	return $ v >= Git.Version.normalize "1.8.4"++checkIgnoreStop :: CheckIgnoreHandle -> IO ()+checkIgnoreStop = CoProcess.stop++{- Returns True if a file is ignored. -}+checkIgnored :: CheckIgnoreHandle -> FilePath -> IO Bool+checkIgnored h file = CoProcess.query h send (receive "")+  where+	send to = do+		hPutStr to $ file ++ "\0"+		hFlush to+	receive c from = do+		s <- hGetSomeString from 1024+		if null s+			then eofError+			else do+				let v = c ++ s+				maybe (receive v from) return (parse v)+	parse s = case segment (== '\0') s of+		(_source:_line:pattern:_pathname:_eol:[]) -> Just $ not $ null pattern+		_ -> Nothing+	eofError = ioError $ mkIOError userErrorType "git cat-file EOF" Nothing Nothing
Git/CurrentRepo.hs view
@@ -13,7 +13,9 @@ import Git.Types import Git.Construct import qualified Git.Config+#ifndef mingw32_HOST_OS import Utility.Env+#endif  {- Gets the current git repository.  -@@ -40,8 +42,8 @@ 				setCurrentDirectory d 			return $ addworktree wt r   where-	pathenv s = do #ifndef mingw32_HOST_OS+	pathenv s = do 		v <- getEnv s 		case v of 			Just d -> do@@ -49,7 +51,7 @@ 				Just <$> absPath d 			Nothing -> return Nothing #else-		return Nothing+	pathenv _ = return Nothing #endif  	configure Nothing (Just r) = Git.Config.read r
Git/Merge.hs view
@@ -10,7 +10,7 @@ import Common import Git import Git.Command-import Git.Version+import Git.BuildVersion  {- Avoids recent git's interactive merge. -} mergeNonInteractive :: Ref -> Repo -> IO Bool
Git/Version.hs view
@@ -1,6 +1,6 @@-{- git version checking+{- git versions  -- - Copyright 2011 Joey Hess <joey@kitenet.net>+ - Copyright 2011, 2013 Joey Hess <joey@kitenet.net>  -  - Licensed under the GNU GPL version 3 or higher.  -}@@ -8,24 +8,29 @@ module Git.Version where  import Common-import qualified Build.SysConfig -{- Using the version it was configured for avoids running git to check its- - version, at the cost that upgrading git won't be noticed.- - This is only acceptable because it's rare that git's version influences- - code's behavior. -}-version :: String-version = Build.SysConfig.gitversion+data GitVersion = GitVersion String Integer+	deriving (Eq) -older :: String -> Bool-older v = normalize version < normalize v+instance Ord GitVersion where+	compare (GitVersion _ x) (GitVersion _ y) = compare x y +instance Show GitVersion where+	show (GitVersion s _) = s++installed :: IO GitVersion+installed = normalize . extract <$> readProcess "git" ["--version"]+  where+  	extract s = case lines s of+		[] -> ""+		(l:_) -> unwords $ drop 2 $ words l+ {- To compare dotted versions like 1.7.7 and 1.8, they are normalized to  - a somewhat arbitrary integer representation. -}-normalize :: String -> Integer-normalize = sum . mult 1 . reverse .-		extend precision . take precision .-		map readi . split "."+normalize :: String -> GitVersion+normalize v = GitVersion v $ +	sum $ mult 1 $ reverse $ extend precision $ take precision $+		map readi $ split "." v   where 	extend n l = l ++ replicate (n - length l) 0 	mult _ [] = []
+ Git/Version.o view

binary file changed (absent → 15924 bytes)

GitAnnex.hs view
@@ -23,7 +23,7 @@ import qualified Command.FromKey import qualified Command.DropKey import qualified Command.TransferKey-#ifndef __WINDOWS__+#ifndef mingw32_HOST_OS import qualified Command.TransferKeys #endif import qualified Command.ReKey@@ -118,7 +118,7 @@ 	, Command.FromKey.def 	, Command.DropKey.def 	, Command.TransferKey.def-#ifndef __WINDOWS__+#ifndef mingw32_HOST_OS 	, Command.TransferKeys.def #endif 	, Command.ReKey.def
Init.hs view
@@ -26,21 +26,23 @@ import Logs.UUID import Annex.Version import Annex.UUID-import Utility.UserInfo import Utility.Shell-import Utility.FileMode import Config import Annex.Direct import Annex.Content.Direct import Annex.Environment import Backend+#ifndef mingw32_HOST_OS+import Utility.UserInfo+import Utility.FileMode+#endif  genDescription :: Maybe String -> Annex String genDescription (Just d) = return d genDescription Nothing = do 	reldir <- liftIO . relHome =<< fromRepo Git.repoPath 	hostname <- fromMaybe "" <$> liftIO getHostname-#ifndef __WINDOWS__+#ifndef mingw32_HOST_OS 	let at = if null hostname then "" else "@" 	username <- liftIO myUserName 	return $ concat [username, at, hostname, ":", reldir]@@ -129,7 +131,7 @@  - or removing write access from files. -} probeCrippledFileSystem :: Annex Bool probeCrippledFileSystem = do-#ifdef __WINDOWS__+#ifdef mingw32_HOST_OS 	return True #else 	tmp <- fromRepo gitAnnexTmpDir@@ -177,7 +179,7 @@  probeFifoSupport :: Annex Bool probeFifoSupport = do-#ifdef __WINDOWS__+#ifdef mingw32_HOST_OS 	return False #else 	tmp <- fromRepo gitAnnexTmpDir
Limit.hs view
@@ -35,8 +35,10 @@ import Text.Regex.TDFA import Text.Regex.TDFA.String #else+#ifndef mingw32_HOST_OS import System.Path.WildMatch import Types.FileMatcher+#endif #endif  type MatchFiles = AssumeNotPresent -> FileInfo -> Annex Bool
Locations.hs view
@@ -28,6 +28,8 @@ 	gitAnnexFsckState, 	gitAnnexTransferDir, 	gitAnnexCredsDir,+	gitAnnexFeedStateDir,+	gitAnnexFeedState, 	gitAnnexMergeDir, 	gitAnnexJournalDir, 	gitAnnexJournalLock,@@ -189,6 +191,13 @@  - remotes. -} gitAnnexCredsDir :: Git.Repo -> FilePath gitAnnexCredsDir r = addTrailingPathSeparator $ gitAnnexDir r </> "creds"++{- .git/annex/feeds/ is used to record per-key (url) state by importfeeds -}+gitAnnexFeedStateDir :: Git.Repo -> FilePath+gitAnnexFeedStateDir r = addTrailingPathSeparator $ gitAnnexDir r </> "feedstate"++gitAnnexFeedState :: Key -> Git.Repo -> FilePath+gitAnnexFeedState k r = gitAnnexFeedStateDir r </> keyFile k  {- .git/annex/merge/ is used for direct mode merges. -} gitAnnexMergeDir :: Git.Repo -> FilePath
Logs/Transfer.hs view
@@ -129,8 +129,8 @@ 			unless ok $ recordFailedTransfer t info 			return ok   where-	prep tfile mode info = do #ifndef mingw32_HOST_OS+	prep tfile mode info = do 		mfd <- catchMaybeIO $ 			openFd (transferLockFile tfile) ReadWrite (Just mode) 				defaultFileFlags { trunc = True }@@ -145,6 +145,7 @@ 						void $ tryIO $ writeTransferInfoFile info tfile 						return (mfd, False) #else+	prep tfile _mode info = do 		mfd <- catchMaybeIO $ do 			writeFile (transferLockFile tfile) "" 			writeTransferInfoFile info tfile
Remote/Directory.hs view
@@ -231,6 +231,11 @@ remove :: FilePath -> Key -> Annex Bool remove d k = liftIO $ do 	void $ tryIO $ allowWrite dir+#ifdef mingw32_HOST_OS+	{- Windows needs the files inside the directory to be writable+	 - before it can delete them. -}+	void $ tryIO $ mapM_ allowWrite =<< dirContents dir+#endif 	catchBoolIO $ do 		removeDirectoryRecursive dir 		return True
Remote/Git.hs view
@@ -17,7 +17,6 @@ import Control.Exception.Extensible  import Common.Annex-import Utility.CopyFile import Utility.Rsync import Remote.Helper.Ssh import Annex.Ssh@@ -44,6 +43,9 @@ import qualified Fields import Logs.Location import Utility.Metered+#ifndef mingw32_HOST_OS+import Utility.CopyFile+#endif  import Control.Concurrent import Control.Concurrent.MSampleVar@@ -360,8 +362,8 @@ 		bracketIO noop (const $ tryIO $ killThread tid) (const $ a feeder)  copyFromRemoteCheap :: Remote -> Key -> FilePath -> Annex Bool-copyFromRemoteCheap r key file #ifndef mingw32_HOST_OS+copyFromRemoteCheap r key file 	| not $ Git.repoIsUrl (repo r) = guardUsable (repo r) False $ do 		loc <- liftIO $ gitAnnexLocation key (repo r) $ 			fromJust $ remoteGitConfig $ gitconfig r@@ -371,8 +373,10 @@ 			( copyFromRemote' r key Nothing file 			, return False 			)-#endif 	| otherwise = return False+#else+copyFromRemoteCheap _ _ _ = return False+#endif  {- Tries to copy a key's content to a remote's annex. -} copyToRemote :: Remote -> Key -> AssociatedFile -> MeterUpdate -> Annex Bool
Remote/Helper/Hooks.hs view
@@ -15,7 +15,9 @@ import Types.Remote import qualified Annex import Annex.LockPool+#ifndef mingw32_HOST_OS import Annex.Perms+#endif  {- Modifies a remote's access functions to first run the  - annex-start-command hook, and trigger annex-stop-command on shutdown.@@ -71,8 +73,8 @@ 		run starthook  		Annex.addCleanup (remoteid ++ "-stop-command") $ runstop lck-	runstop lck = do #ifndef __WINDOWS__+	runstop lck = do 		-- Drop any shared lock we have, and take an 		-- exclusive lock, without blocking. If the lock 		-- succeeds, we're the only process using this remote,@@ -88,5 +90,5 @@ 			Right _ -> run stophook 		liftIO $ closeFd fd #else-		run stophook+	runstop _lck = run stophook #endif
Setup.o view

binary file changed (10440 → 10440 bytes)

Test.hs view
@@ -58,7 +58,7 @@ import qualified Utility.Gpg import qualified Utility.Matcher import qualified Utility.Exception-#ifndef __WINDOWS__+#ifndef mingw32_HOST_OS import qualified GitAnnex #endif @@ -75,7 +75,7 @@ 	putStrLn "  (Do not be alarmed by odd output here; it's normal."         putStrLn "   wait for the last line to see how it went.)" 	rs <- runhunit =<< prepare False-#ifndef __WINDOWS__+#ifndef mingw32_HOST_OS 	directrs <- runhunit =<< prepare True #else 	-- Windows is only going to use direct mode, so don't test twice.@@ -221,7 +221,7 @@ 		git_annex env "add" ["dir"] @? "add of subdir failed" 		createDirectory "dir2" 		writeFile ("dir2" </> "foo") $ content annexedfile-#ifndef __WINDOWS__+#ifndef mingw32_HOST_OS 		{- This does not work on Windows, for whatever reason. -} 		setCurrentDirectory "dir" 		git_annex env "add" [".." </> "dir2"] @? "add of ../subdir failed"@@ -666,7 +666,6 @@ 						boolSystem "git" [Params "remote add r3", File ("../../" ++ r3)] @? "remote add" 					git_annex env "get" [annexedfile] @? "get failed" 					boolSystem "git" [Params "remote rm origin"] @? "remote rm"-#ifndef __WINDOWS__ 				forM_ [r3, r2, r1] $ \r -> indir env r $ 					git_annex env "sync" [] @? "sync failed" 				forM_ [r3, r2] $ \r -> indir env r $@@ -678,7 +677,6 @@ 					 - mangled location log data and it 					 - thought the file was still in r2 -} 					git_annex_expectoutput env "find" ["--in", "r2"] []-#endif  {- Regression test for the automatic conflict resolution bug fixed  - in f4ba19f2b8a76a1676da7bb5850baa40d9c388e2. -}@@ -707,7 +705,6 @@ 						git_annex env "unlock" [annexedfile] @? "unlock failed"		 						writeFile annexedfile newcontent 					)-#ifndef __WINDOWS__ 			{- Sync twice in r1 so it gets the conflict resolution 			 - update from r2 -} 			forM_ [r1, r2, r1] $ \r -> indir env r $ do@@ -721,7 +718,6 @@ 			 - been put in it. -} 			forM_ [r1, r2] $ \r -> indir env r $ do 			 	git_annex env "get" [] @? "unable to get all files after merge conflict resolution in " ++ rname r-#endif  test_map :: TestEnv -> Test test_map env = "git-annex map" ~: intmpclonerepo env $ do@@ -761,7 +757,7 @@  test_hook_remote :: TestEnv -> Test test_hook_remote env = "git-annex hook remote" ~: intmpclonerepo env $ do-#ifndef __WINDOWS__+#ifndef mingw32_HOST_OS 	git_annex env "initremote" (words "foo type=hook encryption=none hooktype=foo") @? "initremote failed" 	createDirectory dir 	git_config "annex.foo-store-hook" $@@ -802,17 +798,14 @@ 	annexed_present annexedfile 	git_annex env "drop" [annexedfile, "--numcopies=2"] @? "drop failed" 	annexed_notpresent annexedfile-#ifndef __WINDOWS__-	-- moving from directory special remote fails on Windows TODO 	git_annex env "move" [annexedfile, "--from", "foo"] @? "move --from directory remote failed" 	annexed_present annexedfile 	not <$> git_annex env "drop" [annexedfile, "--numcopies=2"] @? "drop failed to fail" 	annexed_present annexedfile-#endif  test_rsync_remote :: TestEnv -> Test test_rsync_remote env = "git-annex rsync remote" ~: intmpclonerepo env $ do-#ifndef __WINDOWS__+#ifndef mingw32_HOST_OS 	createDirectory "dir" 	git_annex env "initremote" (words $ "foo type=rsync encryption=none rsyncurl=dir") @? "initremote failed" 	git_annex env "get" [annexedfile] @? "get of file failed"@@ -849,7 +842,7 @@ -- gpg is not a build dependency, so only test when it's available test_crypto :: TestEnv -> Test test_crypto env = "git-annex crypto" ~: intmpclonerepo env $ whenM (Utility.Path.inPath Utility.Gpg.gpgcmd) $ do-#ifndef __WINDOWS__+#ifndef mingw32_HOST_OS 	Utility.Gpg.testTestHarness @? "test harness self-test failed" 	Utility.Gpg.testHarness $ do 		createDirectory "dir"@@ -882,7 +875,7 @@ -- (when the OS allows) so test coverage collection works. git_annex :: TestEnv -> String -> [String] -> IO Bool git_annex env command params = do-#ifndef __WINDOWS__+#ifndef mingw32_HOST_OS 	forM_ (M.toList env) $ \(var, val) -> 		Utility.Env.setEnv var val True 
Upgrade.hs view
@@ -11,7 +11,7 @@  import Common.Annex import Annex.Version-#ifndef __WINDOWS__+#ifndef mingw32_HOST_OS import qualified Upgrade.V0 import qualified Upgrade.V1 #endif@@ -20,7 +20,7 @@ upgrade :: Annex Bool upgrade = go =<< getVersion   where-#ifndef __WINDOWS__+#ifndef mingw32_HOST_OS 	go (Just "0") = Upgrade.V0.upgrade 	go (Just "1") = Upgrade.V1.upgrade #else
Utility/Applicative.o view

binary file changed (1308 → 1308 bytes)

Utility/Daemon.hs view
@@ -10,13 +10,14 @@ module Utility.Daemon where  import Common+#ifndef mingw32_HOST_OS import Utility.LogFile+#endif  #ifndef mingw32_HOST_OS import System.Posix #else import System.PosixCompat-import System.Posix.Types #endif  {- Run an action as a daemon, with all output sent to a file descriptor.
Utility/Env.o view

binary file changed (3664 → 3664 bytes)

Utility/FileSystemEncoding.o view

binary file changed (7068 → 7068 bytes)

Utility/FreeDesktop.o view

binary file changed (23532 → 23532 bytes)

Utility/Gpg.hs view
@@ -9,16 +9,21 @@  module Utility.Gpg where -import System.Posix.Types import Control.Applicative import Control.Concurrent-import Control.Exception (bracket)-import System.Path  import Common-import Utility.Env import qualified Build.SysConfig as SysConfig +#ifndef mingw32_HOST_OS+import System.Posix.Types+import Control.Exception (bracket)+import System.Path+import Utility.Env+#else+import Utility.Tmp+#endif+ newtype KeyIds = KeyIds [String] 	deriving (Ord, Eq) @@ -77,8 +82,8 @@  - Note that to avoid deadlock with the cleanup stage,  - the reader must fully consume gpg's input before returning. -} feedRead :: [CommandParam] -> String -> (Handle -> IO ()) -> (Handle -> IO a) -> IO a-#ifndef mingw32_HOST_OS feedRead params passphrase feeder reader = do+#ifndef mingw32_HOST_OS 	-- pipe the passphrase into gpg on a fd 	(frompipe, topipe) <- createPipe 	void $ forkIO $ do@@ -89,17 +94,23 @@ 	let passphrasefd = [Param "--passphrase-fd", Param $ show pfd]  	params' <- stdParams $ [Param "--batch"] ++ passphrasefd ++ params-	closeFd frompipe `after`-		withBothHandles createProcessSuccess (proc gpgcmd params') go-  where-	go (to, from) = do-		void $ forkIO $ do-			feeder to-			hClose to-		reader from+	closeFd frompipe `after` go params' #else-feedRead = error "gpg feedRead not implemented on Windows" -- TODO+	-- store the passphrase in a temp file for gpg+	withTmpFile "gpg" $ \tmpfile h -> do+		hPutStr h passphrase+		hClose h+		let passphrasefile = [Param "--passphrase-file", File tmpfile]+		params' <- stdParams $ [Param "--batch"] ++ passphrasefile ++ params+		go params' #endif+  where+	go params' = withBothHandles createProcessSuccess (proc gpgcmd params')+		$ \(to, from) -> do+			void $ forkIO $ do+				feeder to+				hClose to+			reader from  {- Finds gpg public keys matching some string. (Could be an email address,  - a key id, or a name; See the section 'HOW TO SPECIFY A USER ID' of
Utility/LogFile.hs view
@@ -58,8 +58,8 @@ redirLog _ = error "redirLog TODO" #endif -#ifndef mingw32_HOST_OS redir :: Fd -> Fd -> IO ()+#ifndef mingw32_HOST_OS redir newh h = do 	closeFd h 	void $ dupTo newh h
Utility/Misc.hs view
@@ -17,9 +17,8 @@ import Control.Applicative #ifndef mingw32_HOST_OS import System.Posix.Process (getAnyProcessStatus)-#endif- import Utility.Exception+#endif  {- A version of hgetContents that is not lazy. Ensures file is   - all read before it gets closed. -}
Utility/Misc.o view

binary file changed (19232 → 19232 bytes)

Utility/OSX.o view

binary file changed (8808 → 8808 bytes)

Utility/PartialPrelude.o view

binary file changed (5448 → 5456 bytes)

Utility/Process.hs view
@@ -42,9 +42,9 @@ import Control.Concurrent import qualified Control.Exception as E import Control.Monad-import Data.Maybe #ifndef mingw32_HOST_OS import System.Posix.IO+import Data.Maybe #endif  import Utility.Misc
Utility/UserInfo.o view

binary file changed (6304 → 6280 bytes)

− debian/.changelog.swp

binary file changed (16384 → absent bytes)

debian/changelog view
@@ -1,3 +1,17 @@+git-annex (4.20130815) unstable; urgency=low++  * assistant, watcher: .gitignore files and other git ignores are now+    honored, when git 1.8.4 or newer is installed.+    (Thanks, Adam Spiers, for getting the necessary support into git for this.)+  * importfeed: Ignores transient problems with feeds. Only exits nonzero+    when a feed has repeatedly had a problems for at least 1 day.+  * importfeed: Fix handling of dots in extensions.+  * Windows: Added support for encrypted special remotes.+  * Windows: Fixed permissions problem that prevented removing files+    from directory special remote. Directory special remotes now fully usable.++ -- Joey Hess <joeyh@debian.org>  Thu, 15 Aug 2013 10:14:33 +0200+ git-annex (4.20130802) unstable; urgency=low    * dropunused behavior change: Now refuses to drop the last copy of a
− doc/assistant/.release_notes.mdwn.swp

binary file changed (20480 → absent bytes)

doc/assistant/release_notes.mdwn view
@@ -1,3 +1,15 @@+## 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
+ doc/bugs/Unable_to_use_remotes_with_space_in_the_path.mdwn view
@@ -0,0 +1,32 @@+### Please describe the problem.++Git annex can't use remotes with the type "file://" if the path contains spaces++### What steps will reproduce the problem?++- Create one repository with a space in the path (and initialize annex in it)+- Clone that repo to an other directory (and initialize annex also in that)+- add a file to the first repository in the annex way+- chdir to the second repository and try to get that file, it won't work (also after git pull or git sync pull)++Check this typescripts for a more detailed description++<http://uz.sns.it/~enrico/git-annex-bugreport.txt>++<http://pastebin.com/f8wkDNrG> (thanks mhameed for that data)+++### What version of git-annex are you using? On what operating system?++I'm using debian testing (jessie) on a i386 machine.++`git-annex` version: 4.20130521 (according to apt data and `git annex version`)++`git-annex` build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP++`git` version: 1.7.10.4+++### Please provide any additional information below.++I don't use git annex assistant nor the webapp
+ doc/bugs/Using_a_revoked_GPG_key.mdwn view
@@ -0,0 +1,31 @@+### Please describe the problem.+git-annex refuses to use revoked GPG keys. This may be understandable for the initial remote setup, but it hit me when I tried to add a new key to a remote. The previous key has been revoked (because it has been superseded by the new one), and git-annex refused to reinvoke the shared key with both keys because one of them was revoked.++Given the encryption model does not allow key replacement, it should not refuse to reencrypt using a revoked key. Maybe using `--expert` would help.++### What steps will reproduce the problem?+Encrypt a special remote with a key K1. Revoke key K1. Try to add key K2 with enableremote. git-annex will refuse to encrypt the shared key with the revoked one.++### What version of git-annex are you using? On what operating system?+git-annex version: 4.20130802-g1452ac3++### Please provide any additional information below.++[[!format sh """+% git annex enableremote zoidberg-crypted encryption=42B8F7C2 +enableremote zoidberg-crypted (encryption update) +You need a passphrase to unlock the secret key for+user: "Samuel Tardieu <sam@rfc1149.net>"+2048-bit ELG key, ID F0D70BAF, created 2002-05-31 (main key ID 1B80ADE6)++gpg: NOTE: key has been revoked+gpg: reason for revocation: Key is superseded+gpg: revocation comment: Key superseded by 42B8F7C2+gpg: revocation comment: (fingerprint 1D36 D924 8B33 DCAB 7BA5  BA44 7A30 BCF4 42B8 F7C2)+gpg: F13322411B80ADE6: skipped: Unusable public key+gpg: [stdin]: encryption failed: Unusable public key++git-annex: user error (gpg ["--quiet","--trust-model","always","--encrypt","--no-encrypt-to","--no-default-recipient","--recipient","7A30BCF442B8F7C2","--recipient","F13322411B80ADE6"] exited 2)+failed+git-annex: enableremote: 1 failed+"""]]
+ doc/bugs/__96__git_annex_sync__96___ignores_remotes.mdwn view
@@ -0,0 +1,106 @@+### Please describe the problem.++A mere `git annex sync` does not go through the reachable remotes.++### What steps will reproduce the problem?++I do not know what could have put my repository in this state.++### What version of git-annex are you using? On what operating system?++git-annex version: 4.20130802-g1452ac3+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++Linux dawn 3.10.3-1-ARCH #1 SMP PREEMPT Fri Jul 26 11:26:59 CEST 2013 x86_64 GNU/Linux++### Please provide any additional information below.++[[!format sh """+% 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: 1+	f3cb4e8f-65f1-4ded-a6a1-abef64ddcff5 -- zoidberg (sam@git-annex:/media/git-annex/Music)+semitrusted repositories: 5+	00000000-0000-0000-0000-000000000001 -- web+ 	063a31dc-542d-407f-a9ed-124479fa6354 -- here (dawn)+ 	22b72aa6-058b-4622-8132-27aa2d8950dc -- arrakis (sam@arrakis:~/Music)+ 	5b3a1abf-5e0b-41bc-a141-774d6236ec76 -- backup on old USB disk+ 	6affec3c-fd26-11e2-9ddd-53f02e5ca176 -- music on eeePC+untrusted repositories: 0+transfers in progress: none+available local disk space: 9.83 gigabytes (+1 megabyte reserved)+local annex keys: 3947+local annex size: 23.51 gigabytes+known annex keys: 3965+known annex size: 23.56 gigabytes+bloom filter size: 16 mebibytes (0.8% full)+backend usage: +	SHA256E: 7912++% git remote -v+arrakis	arrakis:Music (fetch)+arrakis	arrakis:Music (push)+zoidberg	ssh://git-annex@zoidberg.rfc1149.net:2222/~/Music (fetch)+zoidberg	ssh://git-annex@zoidberg.rfc1149.net:2222/~/Music (push)++# Note how here it does not seem to sync with any remote+% git annex sync+(Recording state in git...)+commit  +ok++% git annex sync zoidberg+(Recording state in git...)+commit  +ok+pull zoidberg +ok+push zoidberg +Everything up-to-date+ok++% git annex sync arrakis+(Recording state in git...)+commit  +ok+pull arrakis +From arrakis:Music+   c1a24bd..ba060b7  git-annex  -> arrakis/git-annex+   98b9a8e..be9c146  master     -> arrakis/master+   e0df2be..be9c146  synced/master -> arrakis/synced/master+ok++# A nameless sync with debug turned on+% git annex sync --debug        +[2013-08-06 10:59:57 CEST] read: git ["--git-dir=/home/sam/Music/.git","--work-tree=/home/sam/Music","symbolic-ref","HEAD"]+[2013-08-06 10:59:57 CEST] read: git ["--git-dir=/home/sam/Music/.git","--work-tree=/home/sam/Music","show-ref","refs/heads/master"]+[2013-08-06 10:59:57 CEST] read: git ["--git-dir=/home/sam/Music/.git","--work-tree=/home/sam/Music","show-ref","git-annex"]+[2013-08-06 10:59:57 CEST] read: git ["--git-dir=/home/sam/Music/.git","--work-tree=/home/sam/Music","show-ref","--hash","refs/heads/git-annex"]+[2013-08-06 10:59:57 CEST] read: git ["--git-dir=/home/sam/Music/.git","--work-tree=/home/sam/Music","log","refs/heads/git-annex..ba060b7777413ab687d64771b5d6c2b36a072335","--oneline","-n1"]+[2013-08-06 10:59:57 CEST] read: git ["--git-dir=/home/sam/Music/.git","--work-tree=/home/sam/Music","log","refs/heads/git-annex..f401f2b7b67567862df7c5b8d304f52c3af43f4b","--oneline","-n1"]+[2013-08-06 10:59:57 CEST] read: git ["--git-dir=/home/sam/Music/.git","--work-tree=/home/sam/Music","log","refs/heads/git-annex..feaba7c5ea5f4ca73c123e6ea44ffd6333bf383e","--oneline","-n1"]+[2013-08-06 10:59:57 CEST] chat: git ["--git-dir=/home/sam/Music/.git","--work-tree=/home/sam/Music","cat-file","--batch"]+[2013-08-06 10:59:57 CEST] read: git ["--git-dir=/home/sam/Music/.git","--work-tree=/home/sam/Music","ls-files","--stage","-z","--others","--exclude-standard","--","/home/sam/Music"]+[2013-08-06 10:59:57 CEST] chat: git ["--git-dir=/home/sam/Music/.git","--work-tree=/home/sam/Music","cat-file","--batch"]+(Recording state in git...)+[2013-08-06 11:00:16 CEST] feed: xargs ["-0","git","--git-dir=/home/sam/Music/.git","--work-tree=/home/sam/Music","add","-f"]+commit  +[2013-08-06 11:00:16 CEST] read: git ["--git-dir=/home/sam/Music/.git","--work-tree=/home/sam/Music","commit","-m","git-annex automatic sync"]+ok+[2013-08-06 11:00:17 CEST] call: git ["--git-dir=/home/sam/Music/.git","--work-tree=/home/sam/Music","show-ref","--verify","-q","refs/heads/synced/master"]+[2013-08-06 11:00:17 CEST] read: git ["--git-dir=/home/sam/Music/.git","--work-tree=/home/sam/Music","log","refs/heads/master..refs/heads/synced/master","--oneline","-n1"]+[2013-08-06 11:00:17 CEST] read: git ["--git-dir=/home/sam/Music/.git","--work-tree=/home/sam/Music","show-ref","git-annex"]+[2013-08-06 11:00:17 CEST] read: git ["--git-dir=/home/sam/Music/.git","--work-tree=/home/sam/Music","show-ref","--hash","refs/heads/git-annex"]+[2013-08-06 11:00:17 CEST] read: git ["--git-dir=/home/sam/Music/.git","--work-tree=/home/sam/Music","log","refs/heads/git-annex..ba060b7777413ab687d64771b5d6c2b36a072335","--oneline","-n1"]+[2013-08-06 11:00:17 CEST] read: git ["--git-dir=/home/sam/Music/.git","--work-tree=/home/sam/Music","log","refs/heads/git-annex..f401f2b7b67567862df7c5b8d304f52c3af43f4b","--oneline","-n1"]+[2013-08-06 11:00:17 CEST] read: git ["--git-dir=/home/sam/Music/.git","--work-tree=/home/sam/Music","log","refs/heads/git-annex..feaba7c5ea5f4ca73c123e6ea44ffd6333bf383e","--oneline","-n1"]+[2013-08-06 11:00:17 CEST] call: git ["--git-dir=/home/sam/Music/.git","--work-tree=/home/sam/Music","branch","-f","synced/master"]+"""]]++[[done]]
doc/bugs/assistant_ignore_.gitignore.mdwn view
@@ -27,3 +27,5 @@ > or a gitignore parser. --[[Joey]]   [[!tag /design/assistant]]++> [[fixed|done]]; with git 1.8.4 the assistant honors .gitignore --[[Joey]]
+ doc/bugs/authentication_to_rsync.net_fails.mdwn view
@@ -0,0 +1,27 @@+### Please describe the problem.++Used assistant to "Add a cloud repository".  Supplied hostname, username in webapp. Directory "annex" port 22.+Clicked on "Use this rsync.net repository" and got++**********************+ssh_askpass: exec(/usr/bin/ssh-askpass): No such file or directory+ssh_askpass: exec(/usr/bin/ssh-askpass): No such file or directory+ssh_askpass: exec(/usr/bin/ssh-askpass): No such file or directory+Received disconnect from 69.43.165.7: 2: Too many authentication failures for 2440+**********************++### What steps will reproduce the problem?+See above?  A simple "ssh user@host.rsync.net ls /usr/bin" reveals that indeed no ssh-askpass is available in that namespace.++### What version of git-annex are you using? On what operating system?+git-annex version: 4.20130521 on debian linux 7.1.++### 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++That log is empty.+# End of transcript or log.+"""]]
+ doc/bugs/direct_mode_assistant_in_subdir_confusion.mdwn view
@@ -0,0 +1,6 @@+I ran the assistant in a subdir in direct mode, and it seemed to move files from other places outside that subdir+into it, and commit them there. These may have been files that needed to be committed, and it just staged them to the wrong place.++I'm pretty sure this does not affect indirect mode.++--[[Joey]]
+ doc/bugs/git-annex_opens_too_many_files.mdwn view
@@ -0,0 +1,38 @@+### Please describe the problem.+After running git-annex some minutes, the websites is not responsible any more and it even crashes eventually.++### What steps will reproduce the problem?+Start the assistant.++### What version of git-annex are you using? On what operating system?+it-annex version: 4.20130802-g1452ac3+build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP++### Please provide any additional information below.++[[!format sh """+# If you can, paste a complete transcript of the problem occurring here.+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log+[2013-08-06 13:32:51 CEST] main: starting assistant version 4.20130802-g1452ac3                     +                                                                                                    +Already up-to-date.                                                                                 +(scanning...) [2013-08-06 13:32:51 CEST] Watcher: Performing startup scan                           +                                                                                                    +Already up-to-date.                                                                                 +(started...)                                                                                        +git-annex: accept: resource exhausted (Too many open files)                                         +[2013-08-06 19:50:37 CEST] read: git ["--git-dir=/home/christian/git-annex/.git","--work-tree=/home/+christian/git-annex","symbolic-ref","HEAD"]                                                        +git-annex: runInteractiveProcess: pipe: Too many open files                                         +[2013-08-06 19ND:ea5te1Wm:ao1tn1cS htCeaErtSFuTas]l  lcNbreaatcsWkha etcdcr:ha es/rhh:eo dmd:ee /tgc+eihctrt:ie sdct rineaeantt/wegoPirrtko- cacenosnnsen:xe /cr.tegisiootnu/                           +racnen[ e2ex0x/1h:3a -uo0sp8te-en0dT6 e (m1Tp9oF:oi5 l1me:a:1n 1yr  eCosEpoSeuTnr] c feri eleaexdsh:+)a                                                                                                 +ugsitte d[ "(-T-ogoi tm-adniyr =o/pheonm ef/iclhersi)s                                              +tian/git-annex/.git","--work-tree=/home/christian/git-annex","symbolic-ref","HEAD"]                 +git-annex: runInteractiveProcess: pipe: Too many open files                                         +git-annex: git: createProcess: resource exhausted (Too many open files)                             +[2013-08-06 19:51:11 CEST] NetWatcherFallback: warning NetWatcherFallback crashed: git: createProces+s: resource exhausted (Too many open files)                                                        +[2013-08-06 19:51:11 CEST] DaemonStatus: warning DaemonStatus crashed: /home/christian/git-annex/.gi+t/annex/: openTempFile: resource exhausted (Too many open files) ++(system was asleep from 14:00 until 19:50)++# End of transcript or log.+"""]]
+ doc/bugs/git_annex_add_error_with_Andrew_File_System.mdwn view
@@ -0,0 +1,26 @@+### Please describe the problem.+I have a git annex clone on Andrew File System. I obtain an error when I try+to add a file to the annex:++git-annex: test: createLink: unsupported operation (Invalid cross-device link)++### What steps will reproduce the problem?+Create a test file with touch and add it with git annex add.++### What version of git-annex are you using? On what operating system?+git-annex 4.20130723 on Debian sid.++### Please provide any additional information below.++[[!format sh """+gio@crack:~/nobackup/archive$ touch test+gio@crack:~/nobackup/archive$ git annex add test+add test +git-annex: test: createLink: unsupported operation (Invalid cross-device link)+failed+git-annex: add: 1 failed+gio@crack:~/nobackup/archive$ logout+"""]]++It seems to me that AFS doesn't support hard links between different+directories.
+ doc/bugs/immediately_drops_files.mdwn view
@@ -0,0 +1,222 @@+### Please describe the problem.+When I `git annex get` files in a certain directory, they are got, then are dropped.+When I do the same in a different directory, then the files there remains (as expected).++`git annex fsck` also fails on these files, but after that the problem persists.++I'm not really sure where to look to see why this is happening, especially why only on some directories.+The filesystem (ext4) this is on has several GB free.++Looking at the (broken) symlinks, they are strange:++[[!format sh """+git annex fsck IMG_4230.JPG > /dev/null+ls -l IMG_4230.JPG+lrwxrwxrwx 1 walter walter 207 Aug 13 12:14 IMG_4230.JPG -> ../../../.git/annex/objects/86/KF/SHA256E-s4209479--bba2489f526ed1288d23157b2b985bfda99321c52d05d3f4ddb92144b301318e.JPG/SHA256E-s4209479--bba2489f526ed1288d23157b2b985bfda99321c52d05d3f4ddb92144b301318e.JPG+"""]]++But then after getting it (and it being dropped somehow), the symlink is different (the number of ..s)++[[!format sh """+git annex get IMG_4230.JPG > /dev/null+ls -l IMG_4230.JPG+lrwxrwxrwx 1 walter walter 210 Aug 13 12:16 IMG_4230.JPG -> ../../../../.git/annex/objects/86/KF/SHA256E-s4209479--bba2489f526ed1288d23157b2b985bfda99321c52d05d3f4ddb92144b301318e.JPG/SHA256E-s4209479--bba2489f526ed1288d23157b2b985bfda99321c52d05d3f4ddb92144b301318e.JPG+"""]]++++### What steps will reproduce the problem?++I'm not really sure; I will test later whether this happens on other computers.++### What version of git-annex are you using? On what operating system?+    git-annex version: 4.20130812-gc590455+    build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP DNS+    local repository version: 3+    default repository version: 3+    supported repository versions: 3 4+    upgrade supported from repository versions: 0 1 2++On ubuntu 12.10+++--Walter++### Please provide any additional information below.++*output of git annex fsck*+[[!format sh """+git annex fsck 2013/08/01/IMG_4230.JPG+[2013-08-13 12:01:25 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","ls-files","--cached","-z","--","2013/08/01/IMG_4230.JPG"]+[2013-08-13 12:01:25 NZST] chat: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","check-attr","-z","--stdin","annex.backend","annex.numcopies","--"]+fsck 2013/08/01/IMG_4230.JPG [2013-08-13 12:01:25 NZST] chat: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","cat-file","--batch"]+[2013-08-13 12:01:25 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","show-ref","git-annex"]+[2013-08-13 12:01:25 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","show-ref","--hash","refs/heads/git-annex"]+[2013-08-13 12:01:25 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..3afd101dade8be4e1ed7ac48fdf4173274d3ecd7","--oneline","-n1"]+[2013-08-13 12:01:25 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..9be78e75db197a26db6aaaffbcddf5057e30d23f","--oneline","-n1"]+[2013-08-13 12:01:25 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..2bae49a6e1ce85ad501b0fa85439da7cde8c8597","--oneline","-n1"]+[2013-08-13 12:01:25 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..b5858e25b7f7c45564ab463ecf3e74ecd8979609","--oneline","-n1"]+[2013-08-13 12:01:25 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..cad75ea77d513a24006ee0b56ff0aad12b7aa805","--oneline","-n1"]+[2013-08-13 12:01:25 NZST] read: git ["config","--null","--list"]+ok+[2013-08-13 12:01:25 NZST] chat: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","hash-object","-w","--stdin-paths","--no-filters"]+[2013-08-13 12:01:25 NZST] feed: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","update-index","-z","--index-info"]+[2013-08-13 12:01:25 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","show-ref","--hash","refs/heads/git-annex"]+(Recording state in git...)+[2013-08-13 12:01:25 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","write-tree"]+[2013-08-13 12:01:25 NZST] chat: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","commit-tree","78aca82f86ffb91bc841a3978f410e55aa6e0efe","-p","refs/heads/git-annex"]+[2013-08-13 12:01:25 NZST] call: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","update-ref","refs/heads/git-annex","14908fedbd44917815dd013125b69def1f7f8f7c"]++"""]]++*output of git annex get* (output taken from daemon.log, as output from command does not include the dropping part)+[[!format sh """+git annex get 2013/08/01/IMG_4230.JPG+[2013-08-13 12:03:46 NZST] TransferWatcher: transfer starting: Download UUID "e6bb2ef2-b2b5-11e1-bd1b-3fd40e5e767d" 2013/08/01/IMG_4230.JPG Nothing+[2013-08-13 12:03:46 NZST] TransferWatcher: transfer starting: Download UUID "e6bb2ef2-b2b5-11e1-bd1b-3fd40e5e767d" 2013/08/01/IMG_4230.JPG Nothing+[2013-08-13 12:03:46 NZST] TransferWatcher: transfer finishing: Transfer {transferDirection = Download, transferUUID = UUID "e6bb2ef2-b2b5-11e1-bd1b-3fd40e5e767d", transferKey = Key {keyName = "bba2489f526ed1288d23157b2b985bfda99321c52d05d3f4ddb92144b301318e.JPG", keyBackendName = "SHA256E", keySize = Just 4209479, keyMtime = Nothing}}+[2013-08-13 12:03:46 NZST] Watcher: add symlink 01/IMG_4230.JPG+[2013-08-13 12:03:46 NZST] chat: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","hash-object","-t","blob","-w","--stdin","--no-filters"]+[2013-08-13 12:03:46 NZST] Committer: committing 1 changes+[2013-08-13 12:03:46 NZST] Committer: Committing changes to git+[2013-08-13 12:03:46 NZST] feed: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","update-index","-z","--index-info"]+[2013-08-13 12:03:46 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","commit","--allow-empty-message","--no-edit","-m","","--quiet","--no-verify"]+[2013-08-13 12:03:46 NZST] Pusher: Synok+(Recording state in git...)+(Recording state in git...)+(Recording state in git...)+(Recording state in git...)+(Recording state in git...)+(Recording state in git...)+drop 01/IMG_4230.JPG cing with Adata, b(checking cloud...) itbucket +[2013-08-13 12:03:46 NZST] Committer: dropped 01/IMG_4230.JPG (from here) (copies now 4) : file renamed+[2013-08-13 12:03:46 NZST] chat: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","hash-object","-w","--stdin-paths","--no-filters"]+[2013-08-13 12:03:46 NZST] feed: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","update-index","-z","--index-info"]+[2013-08-13 12:03:47 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","show-ref","--hash","refs/heads/git-annex"]+[2013-08-13 12:03:47 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","write-tree"]+[2013-08-13 12:03:47 NZST] chat: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","commit-tree","f288bfce8d133cc0ce00b65d48ca726809da34e6","-p","refs/heads/git-annex"]+[2013-08-13 12:03:47 NZST] call: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","update-ref","refs/heads/git-annex","5a188246bda51207d12adf86c6d87568ca7076d7"]+[2013-08-13 12:03:47 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","symbolic-ref","HEAD"]+[2013-08-13 12:03:47 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","show-ref","refs/heads/master"]+[2013-08-13 12:03:47 NZST] Pusher: pushing to [Remote { name ="Adata" },Remote { name ="bitbucket" }]+[2013-08-13 12:03:47 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","show-ref","git-annex"]+[2013-08-13 12:03:47 NZST] call: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","branch","-f","synced/master"]+[2013-08-13 12:03:47 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","show-ref","--hash","refs/heads/git-annex"]+[2013-08-13 12:03:47 NZST] call: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","push","bitbucket","git-annex:synced/git-annex","master:synced/master"]+[2013-08-13 12:03:47 NZST] call: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","push","Adata","git-annex:synced/git-annex","master:synced/master"]+[2013-08-13 12:03:47 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..5a188246bda51207d12adf86c6d87568ca7076d7","--oneline","-n1"]+[2013-08-13 12:03:47 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..9be78e75db197a26db6aaaffbcddf5057e30d23f","--oneline","-n1"]+[2013-08-13 12:03:47 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..2bae49a6e1ce85ad501b0fa85439da7cde8c8597","--oneline","-n1"]+[2013-08-13 12:03:47 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..b5858e25b7f7c45564ab463ecf3e74ecd8979609","--oneline","-n1"]+[2013-08-13 12:03:47 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..3afd101dade8be4e1ed7ac48fdf4173274d3ecd7","--oneline","-n1"]+[2013-08-13 12:03:47 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..cad75ea77d513a24006ee0b56ff0aad12b7aa805","--oneline","-n1"]+[2013-08-13 12:03:47 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","ls-tree","-z","--","refs/heads/git-annex","uuid.log","remote.log","trust.log","group.log","preferred-content.log"]+[2013-08-13 12:03:47 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","show-ref","git-annex"]+[2013-08-13 12:03:47 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","show-ref","--hash","refs/heads/git-annex"]+[2013-08-13 12:03:47 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..5a188246bda51207d12adf86c6d87568ca7076d7","--oneline","-n1"]+[2013-08-13 12:03:47 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..9be78e75db197a26db6aaaffbcddf5057e30d23f","--oneline","-n1"]+[2013-08-13 12:03:47 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..2bae49a6e1ce85ad501b0fa85439da7cde8c8597","--oneline","-n1"]+[2013-08-13 12:03:47 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..b5858e25b7f7c45564ab463ecf3e74ecd8979609","--oneline","-n1"]+[2013-08-13 12:03:47 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..3afd101dade8be4e1ed7ac48fdf4173274d3ecd7","--oneline","-n1"]+[2013-08-13 12:03:47 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..cad75ea77d513a24006ee0b56ff0aad12b7aa805","--oneline","-n1"]+[2013-08-13 12:03:47 NZST] Watcher: add symlink 01/IMG_4230.JPG+[2013-08-13 12:03:47 NZST] chat: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","hash-object","-t","blob","-w","--stdin","--no-filters"]+To /media/walter/327D522A6727FE79/Pictures+   3afd101..5a18824  git-annex -> synced/git-annex+[2013-08-13 12:03:48 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","show-ref","git-annex"]+[2013-08-13 12:03:48 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","push","Adata","git-annex:synced/git-annex","master"]+[2013-08-13 12:03:48 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","show-ref","--hash","refs/heads/git-annex"]+[2013-08-13 12:03:48 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..5a188246bda51207d12adf86c6d87568ca7076d7","--oneline","-n1"]+[2013-08-13 12:03:48 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..9be78e75db197a26db6aaaffbcddf5057e30d23f","--oneline","-n1"]+[2013-08-13 12:03:48 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..2bae49a6e1ce85ad501b0fa85439da7cde8c8597","--oneline","-n1"]+[2013-08-13 12:03:48 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..b5858e25b7f7c45564ab463ecf3e74ecd8979609","--oneline","-n1"]+[2013-08-13 12:03:48 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..cad75ea77d513a24006ee0b56ff0aad12b7aa805","--oneline","-n1"]+[2013-08-13 12:03:48 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..3afd101dade8be4e1ed7ac48fdf4173274d3ecd7","--oneline","-n1"]+[2013-08-13 12:03:48 NZST] Committer: committing 1 changes+[2013-08-13 12:03:48 NZST] Committer: Committing changes to git+[2013-08-13 12:03:48 NZST] feed: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","update-index","-z","--index-info"]+[2013-08-13 12:03:48 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","commit","--allow-empty-message","--no-edit","-m","","--quiet","--no-verify"]+To git@bitbucket.org:waltersom/Pictures.git+   3afd101..5a18824  git-annex -> synced/git-annex+[2013-08-13 12:03:52 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","show-ref","git-annex"]+[2013-08-13 12:03:52 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","push","bitbucket","git-annex:synced/git-annex","master"]+[2013-08-13 12:03:52 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","show-ref","--hash","refs/heads/git-annex"]+[2013-08-13 12:03:52 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..5a188246bda51207d12adf86c6d87568ca7076d7","--oneline","-n1"]+[2013-08-13 12:03:52 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..9be78e75db197a26db6aaaffbcddf5057e30d23f","--oneline","-n1"]+[2013-08-13 12:03:52 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..2bae49a6e1ce85ad501b0fa85439da7cde8c8597","--oneline","-n1"]+[2013-08-13 12:03:52 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..b5858e25b7f7c45564ab463ecf3e74ecd8979609","--oneline","-n1"]+[2013-08-13 12:03:52 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..cad75ea77d513a24006ee0b56ff0aad12b7aa805","--oneline","-n1"]+[2013-08-13 12:03:58 NZST] Pusher: Syncing with Adata, bitbucket +[2013-08-13 12:03:58 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","symbolic-ref","HEAD"]+[2013-08-13 12:03:58 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","show-ref","refs/heads/master"]+[2013-08-13 12:03:58 NZST] Pusher: pushing to [Remote { name ="Adata" },Remote { name ="bitbucket" }]+[2013-08-13 12:03:58 NZST] call: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","branch","-f","synced/master"]+[2013-08-13 12:03:58 NZST] call: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","push","Adata","git-annex:synced/git-annex","master:synced/master"]+[2013-08-13 12:03:58 NZST] call: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","push","bitbucket","git-annex:synced/git-annex","master:synced/master"]+Everything up-to-date+[2013-08-13 12:03:58 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","push","Adata","git-annex:synced/git-annex","master"]+Everything up-to-date+[2013-08-13 12:04:02 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","push","bitbucket","git-annex:synced/git-annex","master"]++"""+]]++++I tried removing the USB drive I had plugged in, and was able to get the file from S3, and it wasn't dropped.+However, checking the logs, I see that it did try to drop the file, but was unable to verify numcopies, so gives up.+Also odd, is that it doesn't suggest making the USB drive available, but `git annex whereis` knows that the drive does have it. Also, annex.numcopies is 1, and it got it from S3, so why can't it drop it on the computer?+Or, why does it say that it needs two copies? `git config annex.numcopies` gives 1.++[[!format sh """+[2013-08-13 16:52:08 NZST] TransferWatcher: transfer starting: Download UUID "be992080-b1db-11e1-8f79-1b10bb4092ef" 01/IMG_4230.JPG Nothing+[2013-08-13 16:54:06 NZST] TransferWatcher: transfer starting: Download UUID "be992080-b1db-11e1-8f79-1b10bb4092ef" 01/IMG_4230.JPG Just 65504+[...]+[2013-08-13 16:54:06 NZST] TransferWatcher: transfer starting: Download UUID "be992080-b1db-11e1-8f79-1b10bb4092ef" 01/IMG_4230.JPG Just 4192256+[2013-08-13 16:54:06 NZST] TransferWatcher: transfer finishing: Transfer {transferDirection = Download, transferUUID = UUID "be992080-b1db-11e1-8f79-1b10bb4092ef", transferKey = Key {keyName = "bba2489f526ed1288d23157b2b985bfda99321c52d05d3f4ddb92144b301318e.JPG", keyBackendName = "SHA256E", keySize = Just 4209479, keyMtime = Nothing}}+[2013-08-13 16:54:06 NZST] Watcher: add symlink 01/IMG_4230.JPG+[2013-08-13 16:54:06 NZST] chat: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","hash-object","-t","blob","-w","--stdin","--no-filters"]+[2013-08-13 16:54:06 NZST] Committer: committing 1 changes+[2013-08-13 16:54:06 NZST] Committer: Committing changes to git+[2013-08-13 16:54:06 NZST] feed: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","update-index","-z","--index-info"]+[2013-08-13 16:54:06 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","commit","--allow-empty-message","--no-edit","-m","","--quiet","--no-verify"]+[2013-08-13 16:54:06 +  Could only verify the existence of 1 out of 2 necessary copies++  Try making some of these repositories available:+  	416aa28e-b1d4-11e1-9539-c39b14a3f7d2 -- timeline laptop+   	f42d30a0-b1d2-11e1-8b32-3bdd169e3280 -- my desktop++  (Use --force to override this check, or adjust annex.numcopies.)+failed+(Recording state in git...)+(Recording state in git...)+(Recording state in git...)+drop 01/IMG_4230.JPG NZST] Pusher:(checking cloud...)  Syncing with bitbucket +(unsafe) [2013-08-13 16:54:07 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","symbolic-ref","HEAD"]+[2013-08-13 16:54:07 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","show-ref","refs/heads/master"]+[2013-08-13 16:54:07 NZST] Pusher: pushing to [Remote { name ="bitbucket" }]+[2013-08-13 16:54:07 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","show-ref","git-annex"]+[2013-08-13 16:54:07 NZST] call: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","branch","-f","synced/master"]+[2013-08-13 16:54:07 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","show-ref","--hash","refs/heads/git-annex"]+[2013-08-13 16:54:07 NZST] call: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","push","bitbucket","git-annex:synced/git-annex","master:synced/master"]+[2013-08-13 16:54:07 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..7b6b1c6c479a13f9d4ece135bdf3ba31bc484b31","--oneline","-n1"]+[2013-08-13 16:54:07 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..9be78e75db197a26db6aaaffbcddf5057e30d23f","--oneline","-n1"]+[2013-08-13 16:54:07 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..2bae49a6e1ce85ad501b0fa85439da7cde8c8597","--oneline","-n1"]+[2013-08-13 16:54:07 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..b5858e25b7f7c45564ab463ecf3e74ecd8979609","--oneline","-n1"]+[2013-08-13 16:54:07 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..11a0c19d7c79f3e574b81295782ab2820caea232","--oneline","-n1"]+[2013-08-13 16:54:07 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..cad75ea77d513a24006ee0b56ff0aad12b7aa805","--oneline","-n1"]+[2013-08-13 16:54:07 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..5ebb3e46b8fc109c2966ceccdd716f469d94fcad","--oneline","-n1"]+[2013-08-13 16:54:07 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","ls-tree","-z","--","refs/heads/git-annex","uuid.log","remote.log","trust.log","group.log","preferred-content.log"]+To git@bitbucket.org:waltersom/Pictures.git+   5ebb3e4..7b6b1c6  git-annex -> synced/git-annex+[2013-08-13 16:54:12 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","show-ref","git-annex"]+[2013-08-13 16:54:12 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","push","bitbucket","git-annex:synced/git-annex","master"]+[2013-08-13 16:54:12 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","show-ref","--hash","refs/heads/git-annex"]+[2013-08-13 16:54:12 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..7b6b1c6c479a13f9d4ece135bdf3ba31bc484b31","--oneline","-n1"]+[2013-08-13 16:54:12 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..9be78e75db197a26db6aaaffbcddf5057e30d23f","--oneline","-n1"]+[2013-08-13 16:54:12 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..2bae49a6e1ce85ad501b0fa85439da7cde8c8597","--oneline","-n1"]+[2013-08-13 16:54:12 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..b5858e25b7f7c45564ab463ecf3e74ecd8979609","--oneline","-n1"]+[2013-08-13 16:54:12 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..11a0c19d7c79f3e574b81295782ab2820caea232","--oneline","-n1"]+[2013-08-13 16:54:12 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..cad75ea77d513a24006ee0b56ff0aad12b7aa805","--oneline","-n1"]+"""]]
+ doc/bugs/importfeed_uses___34____95__foo__34___as_extension.mdwn view
@@ -0,0 +1,17 @@+### Please describe the problem.+When running importfeed on gitminutes <http://feeds.gitminutes.com/gitminutes-podcast> git-annex interprets the extension as "_mp3" rather than ".mp3" which means that renaming is needed for various audio players to accept the files.++### What steps will reproduce the problem?+git annex importfeed http://feeds.gitminutes.com/gitminutes-podcast --fast++### What version of git-annex are you using? On what operating system?+git-annex version: 4.20130802+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++on Debian Sid++> Already fixed in git. [[done]] --[[Joey]]
+ doc/bugs/non-annexed_file_changed_to_annexed_on_typechange.mdwn view
@@ -0,0 +1,38 @@+### Please describe the problem.++Changing a file in a repository from a symlink to a normal file causes annex to create an annexed file from that typechange regardless of weather or not it was an annexed file.+++### What steps will reproduce the problem?++    git init newrepo+    cd newrepo && git annex init+    touch realfile+    git add .+    git commit -m "added realfile"+    mkdir newdir && cd newdir+    ln -s ../realfile newfile+    git add .+    git commit -m "Added placeholder until we get assets from designers"+    rm newfile+    dd bs=1024 count=10000 if=/dev/zero of=newfile+    git add .+    git commit -m "Finally got assets from designers"+    ls -la newfile+    # lrwxrwxrwx 1 user user <date> newfile -> ../.git/annex/objects/XX/XX/UUID/UUID++### What version of git-annex are you using? On what operating system?++git-annex version: 4.20130802++Ubuntu 12.04 LTS++### 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/test_suite_failure_on_samba_mount.mdwn view
@@ -0,0 +1,278 @@+### Please describe the problem.++`git annex test` show multiple failures on a samba mounted partition.++### What steps will reproduce the problem?++just run `git annex test` (in the mounted dir)++### What version of git-annex are you using? On what operating system?++4.20130521, built for architecture `armhf` by the Raspbian maintainers ("jessie" suite at the time of writing)++### Please provide any additional information below.++Here are the last lines of `git annex test` output; AFAICT they are the only lines mentioning failures. Before them the output mentions `+++ OK, passed 100 tests.`.++[[!format text """+# 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++Cases: 1  Tried: 0  Errors: 0  Failures: 0----------------------------------------------------------------------+Now, some broader checks ...+  (Do not be alarmed by odd output here; it's normal.+   wait for the last line to see how it went.)+----------------------------------------------------------------------+init+  Detected a crippled filesystem.+  Enabling direct mode.+  Detected a filesystem without fifo support.+  Disabling ssh connection caching.+                                          Cases: 1  Tried: 1  Errors: 0  Failures: 0+Cases: 3  Tried: 0  Errors: 0  Failures: 0Cases: 3  Tried: 1  Errors: 0  Failures: 0----------------------------------------------------------------------+add+  Detected a crippled filesystem.+  Enabling direct mode.+  Detected a filesystem without fifo support.+  Disabling ssh connection caching.+Cases: 3  Tried: 2  Errors: 0  Failures: 0  Detected a crippled filesystem.+  Enabling direct mode.+  Detected a filesystem without fifo support.+  Disabling ssh connection caching.+error: unable to create temporary sha1 filename : No such file or directory++git-annex: user error (git ["--git-dir=/media/freebox/.t/tmprepo0/.git","--work-tree=/media/freebox/.t/tmprepo0","commit-tree","4b825dc642cb6eb9a060e54bf8d69288fbee4904"] exited 1)+                                          ### Failure in: git-annex add:2+git annex init failed+Cases: 3  Tried: 3  Errors: 0  Failures: 1+Cases: 1  Tried: 0  Errors: 0  Failures: 0----------------------------------------------------------------------+reinject+  Detected a crippled filesystem.+  Enabling direct mode.+  Detected a filesystem without fifo support.+  Disabling ssh connection caching.+  Detected a crippled filesystem.+  Detected a filesystem without fifo support.+  Disabling ssh connection caching.+                                          Cases: 1  Tried: 1  Errors: 0  Failures: 0+Cases: 2  Tried: 0  Errors: 0  Failures: 0not supported in direct mode; skipping+----------------------------------------------------------------------+unannex+  Detected a crippled filesystem.+  Enabling direct mode.+  Detected a filesystem without fifo support.+  Disabling ssh connection caching.+error: unable to create temporary sha1 filename : No such file or directory++git-annex: user error (git ["--git-dir=/media/freebox/.t/tmprepo1/.git","--work-tree=/media/freebox/.t/tmprepo1","commit-tree","4b825dc642cb6eb9a060e54bf8d69288fbee4904"] exited 1)+                                          ### Failure in: git-annex unannex:0:no content+git annex init failed+Cases: 2  Tried: 1  Errors: 0  Failures: 1  Detected a crippled filesystem.+  Enabling direct mode.+  Detected a filesystem without fifo support.+  Disabling ssh connection caching.+  Detected a crippled filesystem.+  Detected a filesystem without fifo support.+  Disabling ssh connection caching.+                                          Cases: 2  Tried: 2  Errors: 0  Failures: 1+Cases: 3  Tried: 0  Errors: 0  Failures: 0not supported in direct mode; skipping+----------------------------------------------------------------------+drop+  Detected a crippled filesystem.+  Enabling direct mode.+  Detected a filesystem without fifo support.+  Disabling ssh connection caching.+error: unable to create temporary sha1 filename : No such file or directory++git-annex: user error (git ["--git-dir=/media/freebox/.t/tmprepo2/.git","--work-tree=/media/freebox/.t/tmprepo2","commit-tree","4b825dc642cb6eb9a060e54bf8d69288fbee4904"] exited 1)+                                          ### Failure in: git-annex drop:0:no remotes+git annex init failed+Cases: 3  Tried: 1  Errors: 0  Failures: 1  Detected a crippled filesystem.+  Enabling direct mode.+  Detected a filesystem without fifo support.+  Disabling ssh connection caching.+Cases: 3  Tried: 2  Errors: 0  Failures: 1/media/freebox/.t/tmprepo3/.git: No such file or directory+                                          ### Failure in: git-annex drop:2:untrusted remote+git clone failed+Cases: 3  Tried: 3  Errors: 0  Failures: 2+Cases: 1  Tried: 0  Errors: 0  Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory+                                          ### Failure in: git-annex get+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1+Cases: 1  Tried: 0  Errors: 0  Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory+                                          ### Failure in: git-annex move+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1+Cases: 1  Tried: 0  Errors: 0  Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory+                                          ### Failure in: git-annex copy+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1+Cases: 1  Tried: 0  Errors: 0  Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory+                                          ### Failure in: git-annex unlock/lock+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1+Cases: 2  Tried: 0  Errors: 0  Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory+                                          ### Failure in: git-annex edit/commit:0+git clone failed+Cases: 2  Tried: 1  Errors: 0  Failures: 1/media/freebox/.t/tmprepo3/.git: No such file or directory+                                          ### Failure in: git-annex edit/commit:1+git clone failed+Cases: 2  Tried: 2  Errors: 0  Failures: 2+Cases: 1  Tried: 0  Errors: 0  Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory+                                          ### Failure in: git-annex fix+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1+Cases: 1  Tried: 0  Errors: 0  Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory+                                          ### Failure in: git-annex trust/untrust/semitrust/dead+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1+Cases: 4  Tried: 0  Errors: 0  Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory+                                          ### Failure in: git-annex fsck:0+git clone failed+Cases: 4  Tried: 1  Errors: 0  Failures: 1/media/freebox/.t/tmprepo3/refs: No such file or directory+                                          ### Failure in: git-annex fsck:1+git clone failed+Cases: 4  Tried: 2  Errors: 0  Failures: 2/media/freebox/.t/tmprepo3/.git: No such file or directory+                                          ### Failure in: git-annex fsck:2+git clone failed+Cases: 4  Tried: 3  Errors: 0  Failures: 3/media/freebox/.t/tmprepo3/.git: No such file or directory+                                          ### Failure in: git-annex fsck:3+git clone failed+Cases: 4  Tried: 4  Errors: 0  Failures: 4+Cases: 2  Tried: 0  Errors: 0  Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory+                                          ### Failure in: git-annex migrate:0+git clone failed+Cases: 2  Tried: 1  Errors: 0  Failures: 1/media/freebox/.t/tmprepo3/.git: No such file or directory+                                          ### Failure in: git-annex migrate:1+git clone failed+Cases: 2  Tried: 2  Errors: 0  Failures: 2+Cases: 1  Tried: 0  Errors: 0  Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory+                                          ### Failure in: git-annex unused/dropunused+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1+Cases: 1  Tried: 0  Errors: 0  Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory+                                          ### Failure in: git-annex describe+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1+Cases: 1  Tried: 0  Errors: 0  Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory+                                          ### Failure in: git-annex find+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1+Cases: 1  Tried: 0  Errors: 0  Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory+                                          ### Failure in: git-annex merge+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1+Cases: 1  Tried: 0  Errors: 0  Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory+                                          ### Failure in: git-annex status+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1+Cases: 1  Tried: 0  Errors: 0  Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory+                                          ### Failure in: git-annex version+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1+Cases: 1  Tried: 0  Errors: 0  Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory+                                          ### Failure in: git-annex sync+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1+Cases: 1  Tried: 0  Errors: 0  Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory+                                          ### Failure in: union merge regression+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1+Cases: 1  Tried: 0  Errors: 0  Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory+                                          ### Failure in: automatic conflict resolution+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1+Cases: 1  Tried: 0  Errors: 0  Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory+                                          ### Failure in: git-annex map+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1+Cases: 1  Tried: 0  Errors: 0  Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory+                                          ### Failure in: git-annex uninit+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1+Cases: 1  Tried: 0  Errors: 0  Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory+                                          ### Failure in: git-annex upgrade+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1+Cases: 1  Tried: 0  Errors: 0  Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory+                                          ### Failure in: git-annex whereis+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1+Cases: 1  Tried: 0  Errors: 0  Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory+                                          ### Failure in: git-annex hook remote+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1+Cases: 1  Tried: 0  Errors: 0  Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory+                                          ### Failure in: git-annex directory remote+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1+Cases: 1  Tried: 0  Errors: 0  Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory+                                          ### Failure in: git-annex rsync remote+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1+Cases: 1  Tried: 0  Errors: 0  Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory+                                          ### Failure in: git-annex bup remote+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1+Cases: 1  Tried: 0  Errors: 0  Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory+                                          ### Failure in: git-annex crypto+git clone failed+Cases: 1  Tried: 1  Errors: 0  Failures: 1+----------------------------------------------------------------------+get+----------------------------------------------------------------------+move+----------------------------------------------------------------------+copy+----------------------------------------------------------------------+lock+----------------------------------------------------------------------+edit+----------------------------------------------------------------------+fix+----------------------------------------------------------------------+trust+----------------------------------------------------------------------+fsck+----------------------------------------------------------------------+migrate+----------------------------------------------------------------------+ unused+----------------------------------------------------------------------+describe+----------------------------------------------------------------------+find+----------------------------------------------------------------------+merge+----------------------------------------------------------------------+status+----------------------------------------------------------------------+version+----------------------------------------------------------------------+sync+----------------------------------------------------------------------+union merge regression+----------------------------------------------------------------------+conflict resolution+----------------------------------------------------------------------+map+----------------------------------------------------------------------+uninit+----------------------------------------------------------------------+upgrade+----------------------------------------------------------------------+whereis+----------------------------------------------------------------------+hook remote+----------------------------------------------------------------------+directory remote+----------------------------------------------------------------------+rsync remote+----------------------------------------------------------------------+bup remote+----------------------------------------------------------------------+crypto+git-annex: .t/repo/.git/annex: removeDirectory: unsatisified constraints (Directory not empty)++# End of transcript or log.+"""]]
+ doc/bugs/unfinished_repos_in_webapp.mdwn view
@@ -0,0 +1,27 @@+### Please describe the problem.++Hi,  all excited that the new release fixes the unknown UUID issue in the Webapp I hurridly installed the latest versions.  ++Some progress in that the webapp now reports my missing/non-existent repo as an "unfinished repository" in the process of being setup.  I see a check status box that when clicked says "in progress please be patient".  Also I see the ssh config has changed to use IdentitiesOnly option.++I had a go a deleting details via git-annex vicfg and directly editing the git-annex branch log files as detailed [here](http://git-annex.branchable.com/forum/Reappearing_repos_in_webapp_and_vicfg/).  But still no joy.  ++Any hints on what to do?  Nothing in the log seems to help...++### What steps will reproduce the problem?++Not sure anymore.++### What version of git-annex are you using? On what operating system?++Latest.++### 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/design/assistant/blog/day_310__release_day.mdwn view
@@ -10,3 +10,9 @@  Pleased that the git-cat-files bug was quickly fixed by Peff and has already been pulled into Junio's release tree!++----++This evening, I've added an interface around the new improved +`git check-ignore` in git 1.8.4. The assistant can finally honor `.gitignore`+files!
+ doc/design/assistant/blog/day_311__Windows_porting.mdwn view
@@ -0,0 +1,10 @@+Made two big improvements to the Windows port, in just a few hours.+First, got gpg working, and encrypted special remotes work on Windows.+Next, fixed a permissions problem that was breaking removing files+from directory special remotes on Windows.+(Also cleaned up a lot of compiler warnings on Windows.)++I think I'm almost ready to move the Windows port from alpha to beta+status. The only really bad problem that I know of with using it is that+due to a lack of locking, it's not safe to run multiple git-annex+commands at the same time in Windows.
doc/design/assistant/inotify.mdwn view
@@ -14,14 +14,6 @@  ## todo -* Run niced and ioniced? Seems to make sense, this is a background job.-* configurable option to only annex files meeting certian size or-  filename criteria-* option to check files not meeting annex criteria into git directly,-  automatically-* honor .gitignore, not adding files it excludes (difficult, probably-  needs my own .gitignore parser to avoid excessive running of git commands-  to check for ignored files) * There needs to be a way for a new version of git-annex, when installed,   to restart any running watch or assistant daemons. Or for the daemons   to somehow detect it's been upgraded and restart themselves. Needed
doc/design/assistant/polls/Android_default_directory.mdwn view
@@ -4,4 +4,4 @@ want the first time they run it, but to save typing on android, anything that gets enough votes will be included in a list of choices as well. -[[!poll open=yes expandable=yes 54 "/sdcard/annex" 5 "Whole /sdcard" 4 "DCIM directory (photos and videos only)" 1 "Same as for regular git-annex. ~/annex/"]]+[[!poll open=yes expandable=yes 55 "/sdcard/annex" 5 "Whole /sdcard" 4 "DCIM directory (photos and videos only)" 1 "Same as for regular git-annex. ~/annex/"]]
+ doc/direct_mode/comment_7_5355ac418bfb26e990762b80f4c36b77._comment view
@@ -0,0 +1,12 @@+[[!comment format=mdwn+ username="http://caust1c.myopenid.com/"+ nickname="asbraithwaite"+ subject="comment 7"+ date="2013-08-12T18:06:21Z"+ content="""+Would it be safe to add largefiles to gitignore in direct mode?++Can git-annex still track large files ignored by git?++Thanks. :-)+"""]]
+ doc/direct_mode/comment_8_6cd15e2c5fd0bef48f60c6993322c2fc._comment view
@@ -0,0 +1,9 @@+[[!comment format=mdwn+ username="arand"+ ip="130.243.226.21"+ subject="comment 8"+ date="2013-08-12T18:12:32Z"+ content="""+asbraithwaite:+No, as far as I know it can not.+"""]]
+ doc/forum/Accessing_files_directly_on__a_USB_device.mdwn view
@@ -0,0 +1,11 @@+Using the assistant, I have created a repository on my laptop plus a synced repository on a USB disk. Looking into the first repository, I see my files accompanied by a .git directory. However, looking on the USB disk (e.g. /media/usb/annex), all I see is what looks like the content of a .git directory.++This means that it is difficult to retrieve any file directly from this disk -- it has to be synced to another local repository first.++Is there any way to change this ? E.g. to have a copy of the working tree, plus a .git directory, on the disk ?++My use case: I have added plenty of media files to my repository. In addition to using the USB disk as a backup/medium for transfering these files to another computer, I'd like to be able to plug the disk to e.g. a media player and read the files directly from the tree, but it does not work at the moment.++Is there anything I am missing ?++Edited: yes, there is something I was missing: the forum entry at [[forum/USB_backup_with_files_visible/]]
+ doc/forum/Can__39__t_get_git-annex_merge_to_work_from_git_hook.mdwn view
@@ -0,0 +1,41 @@+I'm trying to automate syncing of two repos A and B. My goal is to run `git annex sync` from A and have the working copy of B updated automatically. According to the manual page, `git annex merge` should to the trick. It works just fine when I run it manually in B, but not when I run it from the post-receive hook, as suggested in the manual page.++Here is a test script that illustrates the issue: <https://gist.github.com/anonymous/6197019>++The output I get:++    [...]+    file1 exists after manual git annex merge+    [...]+    file2 does not exist after git annex merge in post-receive++From the output I can see that `git annex merge` is run on the remote end, and seems to do it's thing (`file2` is added):++    remote: merge git-annex (merging synced/git-annex into git-annex...)+    remote: ok+    remote: merge synced/master Updating 6e5bfba..0dcbcfd+    remote: Fast-forward+    remote:  file2 |    1 ++    remote:  1 file changed, 1 insertion(+)+    remote:  create mode 120000 file2+    remote: +    remote: ok++However, the working copy in B does not have the file `file2`. Even worse, `git status` in B shows the file as deleted:++    # On branch master+    # Your branch is ahead of 'origin/master' by 2 commits.+    #+    # Changes not staged for commit:+    #   (use "git add/rm <file>..." to update what will be committed)+    #   (use "git checkout -- <file>..." to discard changes in working directory)+    #+    #	deleted:    file2+    #+    no changes added to commit (use "git add" and/or "git commit -a")++So when running `git annex sync` from B now, the file will be deleted from A as well, which is not what I expected.++This is on Ubuntu 12.04, using the precompiled git-annex tarball (amd64).++What am I doing wrong?
+ doc/forum/Can_we_have_remotes_that_aren__39__t_tracked__63___.mdwn view
@@ -0,0 +1,13 @@+I'm wondering if it is possible to have remotes that don't have the *content* of git-annex tracked.++# My use case:++I have a number of projects that I am working on at any one time.  They all are tracking independently by `git` and more recently I am using `git annex` to manage the large files.++However because I have so many projects I work on one (called `AAA`), move to another, delete `AAA` to save disk space, ...time passes... return to `AAA`.++Now, prior to `git-annex` I could just clone `AAA` from my central repository folder do work, commit, push, repeat and then delete and there is no indication that I had one, or many copies of `AAA` floating around.  Now with `git-annex` there is some trail of me cloning, running `git annex get`, etc.++Is there some way to set a remote as `untracked`?  By that I mean it is classed as `untrusted` - so I can move files around, add them, copy to trusted remotes and delete the whole repository without worrying about losing data - but it also doesn't push any of the git-annex tracking info of where a copy of a file actually is.  I don't want to know if any or all of my other `untracked` repositories have a copy of a file or not. ++I don't want my `git annex whereis` polluted with many references to repositories that just don't exist any more.  I guess I could set them to dead but that still keeps all of the tracking info around in all the repos, which seems unnecessary...
@@ -0,0 +1,23 @@+Hey,++I've found that git annex works great as a way to publish websites to a web server.  I can edit my website on my computer, `git annex sync` my working directory to the VPS, and then `git annex get files-I-want-to-publish`.  This works great.  I can maintain my normal working directory structure on the VPS and I don't have to worry about people seeing files I DIDN'T want to publish, since the dead symlinks just show up as 404s.++There's one small problem.  ++Say:++ 1) I've already published a file using `git annex get file-to-update`++ 2) I update that file on my computer++ 3) I do `git annex sync`++ 4) I do `git annex get file-to-update`++Between steps 3 and 4, file-to-update goes from being an accessible web resource to being a dead symlink.  It's not really a problem for me, as hardly anyone visits my site. But it would be nice if I could make `sync` leave the old symlink to the old file until I `get`ed the new one.++Is this possible?++PS: For those who might follow in my footsteps, remember that you probably don't want people reading the contents of your .git dir, so make a re-write rule for this!++Timothy
+ doc/forum/Manual_Setup_of_a_Central_Repo.mdwn view
@@ -0,0 +1,1 @@+My current setup involves 3 computers, one desktop one laptop and a vps. In my current setup I have created annex repos on the server and cloned from it, both machines sync to the server. All three use non base repos. Now I have another annex folder on the desktop that I would like to sync between the three. Both machines are behind NAT so server can not communicate with the machines. In order to init the repo on the vps, I was thinking of setting up a temporary VPN/port forward between the desktop and the VPS then clone from the desktop finally remove the remote section in .git/config on the server so VPS becomes the master again. First of all is there an easier way to do this? if not is it safe to do this? or is it going to cause problems down the line.
+ doc/forum/Poor_man__39__s_IMAP.mdwn view
@@ -0,0 +1,6 @@+I have an e-mail server configured to save my mail in ~/Maildir on an account that is available over ssh. I'd like to keep emailserver:~/Maildir in a two-way sync with laptop:~/Mail/private essentially creating a poor man's IMAP — without setting up and maintaining an actual IMAP server. **Is it an appropriate use of git-annex or would another tool be more fitting? And how do I go about doing it?** I'd like to sync the files, the content, not just information about the files or other meta-data. ++I tried setting it up with the webUI to the assistant but it only offers encrypted storage[1] on the remote server. I looked into setting it up manually but "git-annex does not notice when files are added to remote rsync repositories."[2]++[1] http://git-annex.branchable.com/bugs/Remote_repositories_have_to_be_setup_encrypted/  +[2] from comments on http://git-annex.branchable.com/special_remotes/rsync/
+ doc/forum/Relocating_annex_directory.mdwn view
@@ -0,0 +1,1 @@+I have around 70 GBs of data spread around 4 repositories on a Linux (Ubuntu) box. My problem is I need to reformat the drive they are on. I would like to move them to an external usb drive temporarily during reinstall then move them back to their original location. When I started with annex I did try to mv annexFolder/ toNewLoc/ which failed leaving behind a corrupt repo. What is a safe way to move an annex folder? My primary connection is a 3G modem so I am trying to avoid re downloading everything. Another thing I am trying to avoid is cloning the repos to the external drive, reinstall, clone it back to the internal drive and mark original and external repos as dead, but AFAIK those dead repos will show up in the output of whereis, so everytime I reformat I gonna have two extra dead repos.
+ doc/forum/Revert_file_linkage_to_original_files.mdwn view
@@ -0,0 +1,9 @@+I've recently found the following problem:++I really really want to get back my original folder structure - which includes the real files, not the symlinks. I've searched for quite a while, but I simply could not find an acceptable solution...++So I thought I would like to ask you guys here, if anybody experienced similar problems (or at least knows a solution for my problem)?++Greetings++Pethor
+ doc/forum/USB_drive_in_transfer_group_keeps_growing_-_assistant.txt view
@@ -0,0 +1,22 @@+1. Set up two computers with a client repository.+2. Add a removable drive repository and set it to transfer group.+3. Start adding files to computer #1 repository. See how the files get synced to the usb drive.+4. Connect the usb drive to computer #2 and see the files getting transferred to computer #2. Everything is looking good.+++5. Connect the usb drive to computer #1 again. +6. Add a file that is larger than the remaining size of the usb drive, BUT smaller than the original size of the usb drive.+7. The file does not get transferred to the usb drive due to lack of disk space.++I would expect the assistant to make some space on the usb drive. Removing the files it knows has been transferred to computer #2, and then transfer the new file to the usb drive. But this does not seem to happen. ++Have I missed something about how the transfer group is supposed to work?++ +Using version:+git-annex version: 4.20130802-g0a52f02+build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP++Pre built tar file.++
+ doc/forum/git_annex_assistant__44___share_with_other_devices.mdwn view
@@ -0,0 +1,3 @@+I am trying to share files between my PC at home at that at work using the walkthrough here: http://git-annex.branchable.com/assistant/remote_sharing_walkthrough/. However, I don't have the option on my machine to "Share with other devices". Any ideas why this would be missing? I am using Ubuntu 13.04 if that helps. ++Update: it now works after a software update, I guess I just had an older version of git-annex. Now, I have version 4.20130723. 
+ doc/forum/taskwarrior.mdwn view
@@ -0,0 +1,11 @@+I try to sync my taskWarrior files .task/*.data with git-annex ... but there is two problem :++- i need to chmod 755 my files because taskWarrior doesn't recognize them, or say "problem with permission" ++- taskwarrior seems crazy with symbolic link used by git-annex, undo not work, task appear multiple times , etc.++Is there any solution ?+Any user experienced the same problem?++Thanks+Sr.
+ doc/forum/taskwarrior/comment_1_1c3a29e7d292cb602d9d349f8009b51e._comment view
@@ -0,0 +1,10 @@+[[!comment format=mdwn+ username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"+ nickname="Richard"+ subject="comment 1"+ date="2013-08-06T12:44:11Z"+ content="""+* You could try metastore (not merge friendly), git-cache-meta (pretty minimal) or metamonger (not done yet) to sync your file permissions+* Look into direct mode to avoid symlinks+* Alternatively, check your taskwarrior files into git, not git-annex, to avoid symlinks+"""]]
+ doc/forum/unknown_response_from_git_cat-file.mdwn view
@@ -0,0 +1,8 @@+Hi,++when running git annex add in my direct mode repository, since a few days ago I only get:++$ git annex add+git-annex: unknown response from git cat-file (":./Archiv/Someone missing",:./Archiv/Someone Like You Cover-fCvjvEGkTu4.flv)++The :./Archiv/Someone missing part strikes me odd because it so much looks like broken shell meta-character escaping in git-annex, but I doubt that because it stopped working just suddenly.
+ doc/how_it_works/comment_1_b3bdd6a06d5764db521ae54878131f5f._comment view
@@ -0,0 +1,14 @@+[[!comment format=mdwn+ username="https://www.google.com/accounts/o8/id?id=AItOawnaH44G3QbxBAYyDwy0PbvL0ls60XoaR3Y"+ nickname="Nigel"+ subject="minor suggestion"+ date="2013-08-10T14:31:31Z"+ content="""+The contents of large files are not stored in git, only the names of the files and some other metadata remain there.++Would this read better to the newbie as:++The contents of 'annexed' files are not stored in git, only the names of the files and some other metadata remain there.++First time for me, the note about large files made me think that maybe annex operated on files above a certain size.+"""]]
+ doc/install/cabal/comment_11_0d06702e6e0ae3cd331cf748a9f6f273._comment view
@@ -0,0 +1,44 @@+[[!comment format=mdwn+ username="https://www.google.com/accounts/o8/id?id=AItOawlXEIT2PEAuHuInLP4UYVzWE0lceMYd2lA"+ nickname="Gregor"+ subject="Installation on tonidoplug"+ date="2013-08-03T07:19:54Z"+ content="""+I tried various ways to install git-annex on my [TonidoPlug](http://www.tonidoplug.com/).++System Info:++	root@TonidoPlug2:~# uname -a+	Linux TonidoPlug2 2.6.31.8-topkick1281p2-001-004-20101214 #1 Thu Jun 16 10:06:20 CST 2011 armv5tel GNU/Linux++`apt-get` didn't work.++	root@TonidoPlug2:~# apt-get install git-annex+	Reading package lists... Done+	Building dependency tree       +	Reading state information... Done+	E: Unable to locate package git-annex++The Linux standalone installation results in an error message like this, when calling `git-annex` (or `git annex`)++	~$ git-annex.linux/git-annex+	/home/gitolite/git-annex.linux/bin/git-annex: 1: Syntax error: \")\" unexpected++(git-annex.linux/bin/git-annex is a binary file and works fine on other distros)++When installing with cabal, I get the error message (tried as root and gitolite user)++	~$ cabal install git-annex --bindir=$HOME/bin -f\"-assistant -webapp -webdav -pairing -xmpp -dns\"+	Resolving dependencies...+	cabal: cannot configure git-annex-4.20130802. It requires base >=4.5 && <4.8+	For the dependency on base >=4.5 && <4.8 there are these packages:+	base-4.5.0.0, base-4.5.1.0, base-4.6.0.0 and base-4.6.0.1. However none of+	them are available.+	base-4.5.0.0 was excluded because of the top level dependency base -any+	base-4.5.1.0 was excluded because of the top level dependency base -any+	base-4.6.0.0 was excluded because of the top level dependency base -any+	base-4.6.0.1 was excluded because of the top level dependency base -any++Any help is appreciated.+Thanks for providing git-annex. I started cleaning up my backups with it yesterday and really like it.+"""]]
+ doc/install/cabal/comment_12_b93ca271dffca3f948645d3e1326c1d9._comment view
@@ -0,0 +1,12 @@+[[!comment format=mdwn+ username="http://joeyh.name/"+ ip="2001:4978:f:21a::2"+ subject="comment 12"+ date="2013-08-07T16:31:30Z"+ content="""+The Linux standalone builds for i386 and amd64 will not work on Arm systems.++There are builds of git-annex for arm in eg, Debian. You should be able to use one of those if this system is running Debian. You may need to upgrade to eg, Debian stable, which includes git-annex.++It looks like you have an old and/or broken GHC compiler too. You could upgrade that to a newer version (eg from Debian stable) and build it that way, but it seems like the long way around if you have a Debian system there.+"""]]
+ doc/install/cabal/comment_13_3dac019cda71bf99878c0a1d9382323b._comment view
@@ -0,0 +1,8 @@+[[!comment format=mdwn+ username="https://www.google.com/accounts/o8/id?id=AItOawlXEIT2PEAuHuInLP4UYVzWE0lceMYd2lA"+ nickname="Gregor"+ subject="TonidoPlug"+ date="2013-08-09T17:46:28Z"+ content="""+@Joey Thanks for the answer. I didn't want to mess around too much with the TonidoPlug. I am currently setting up a raspberry pi, which works fine. +"""]]
− doc/news/version_4.20130621.mdwn
@@ -1,40 +0,0 @@-git-annex 4.20130621 released with [[!toggle text="these changes"]]-[[!toggleable text="""-   * Supports indirect mode on encfs in paranoia mode, and other-     filesystems that do not support hard links, but do support-     symlinks and other POSIX filesystem features.-   * Android: Add .thumbnails to .gitignore when setting up a camera-     repository.-   * Android: Make the "Open webapp" menu item open the just created-     repository when a new repo is made.-   * webapp: When the user switches to display a different repository,-     that repository becomes the default repository to be displayed next time-     the webapp gets started.-   * glacier: Better handling of the glacier inventory, which avoids-     duplicate uploads to the same glacier repository by `git annex copy`.-   * Direct mode: No longer temporarily remove write permission bit of files-     when adding them.-   * sync: Better support for bare git remotes. Now pushes directly to the-     master branch on such a remote, instead of to synced/master. This-     makes it easier to clone from a bare git remote that has been populated-     with git annex sync or by the assistant.-   * Android: Fix use of cp command to not try to use features present-     only on build system.-   * Windows: Fix hang when adding several files at once.-   * assistant: In direct mode, objects are now only dropped when all-     associated files are unwanted. This avoids a repreated drop/get loop-     of a file that has a copy in an archive directory, and a copy not in an-     archive directory. (Indirect mode still has some buggy behavior in this-     area, since it does not keep track of associated files.)-     Closes: #[712060](http://bugs.debian.org/712060)-   * status: No longer shows dead repositories.-   * annex.debug can now be set to enable debug logging by default.-     The webapp's debugging check box does this.-   * fsck: Avoid getting confused by Windows path separators-   * Windows: Multiple bug fixes, including fixing the data written to the-     git-annex branch.-   * Windows: The test suite now passes on Windows (a few broken parts are-     disabled).-   * assistant: On Linux, the expensive transfer scan is run niced.-   * Enable assistant and WebDAV support on powerpc and sparc architectures,-     which now have the necessary dependencies built."""]]
+ doc/news/version_4.20130815.mdwn view
@@ -0,0 +1,11 @@+git-annex 4.20130815 released with [[!toggle text="these changes"]]+[[!toggleable text="""+   * assistant, watcher: .gitignore files and other git ignores are now+     honored, when git 1.8.4 or newer is installed.+     (Thanks, Adam Spiers, for getting the necessary support into git for this.)+   * importfeed: Ignores transient problems with feeds. Only exits nonzero+     when a feed has repeatedly had a problems for at least 1 day.+   * importfeed: Fix handling of dots in extensions.+   * Windows: Added support for encrypted special remotes.+   * Windows: Fixed permissions problem that prevented removing files+     from directory special remote. Directory special remotes now fully usable."""]]
doc/special_remotes/directory.mdwn view
@@ -5,6 +5,10 @@ [[encrypted|encryption]] contents). Just set up both systems to use the drive's mountpoint as a directory remote. +If you just want two copies of your repository with the files "visible"+in the tree in both, the directory special remote is not what you want.+Instead, you should use a regular `git clone` of your git-annex repository.+ ## configuration  These parameters can be passed to `git annex initremote` to configure the
doc/special_remotes/xmpp.mdwn view
@@ -21,4 +21,25 @@ to see incoming pushes, the XMPP remote cannot be used with git at the command line. +## Hosted server support status+[[!table  data="""+Server|Status|Notes+Gmail|Working|Google apps users will have to edit `.git/annex/creds/xmpp` manually+Facebook|Failing|Maybe non 2-factor will work+League Of Legends|Failing+"""]]++## Server daemon support status+[[!table  data="""+Server|Status|Notes+[[Prosody|http://prosody.im/]]|Working+[[Metronome|http://www.lightwitch.org/]]|Working+Ejabberd|[[Failing|http://git-annex.branchable.com/forum/XMPP_authentication_failure/]]|[[Authentication bug|https://support.process-one.net/browse/EJAB-1632]]: Fixed in debian unstable with version 2.1.10-5+jabberd14|[[Failing|http://git-annex.branchable.com/forum/XMPP_authentication_failure/#comment-4ce5aeabd12ca3016290b3d8255f6ef1]]|No further information+jabberd2|?|Please update+Openfire|?|Please update+Tigase|?|Please update+iChat Server|?|Please update+"""]]+ See also: [[xmpp_protocol_design_notes|design/assistant/xmpp]]
doc/tips/Decentralized_repository_behind_a_Firewall.mdwn view
@@ -10,16 +10,16 @@  Then, log into your *home* computer, with *port forwarding*: -    ssh me@myhome.no-ip.org L 2201:localhost:22+    ssh me@myhome.no-ip.org -R 2201:localhost:22  Your *home* computer can now ssh into your *on-the-go* computer, as long as you keep the above shell running.  You can now add your *on-the-go* computer as a remote on your *home* computer. Use the port forwarding shell you just connected with the command above, if you like.       ssh-keygen -t rsa-    ssh-copy-id me@localhost -p 2201+    ssh-copy-id "me@localhost -p 2201"     cd ~/annex-    git annex remote add on-the-go ssh://me@localhost:2201/home/myuser/annex+    git remote add on-the-go ssh://me@localhost:2201/home/myuser/annex  Now you can run normal annex operations, as long as the port forwarding shell is running³. 
+ doc/tips/Git_annex_and_Calibre.mdwn view
@@ -0,0 +1,118 @@+The problem+===========++[Calibre](http://calibre-ebook.com/) is a ebook manager that is+available in [debian](http://packages.debian.org/sid/calibre). I use+it to maintain my library, but also to dowload every day an epub+version of a French newspaper and then put it on my kobo.++Configuring git annex for this+==============================++I wanted to use git-annex, so++    $ git init+    $ git annex init "some useful name"++But I don't want every thing in annex, because Calibre use some text+file to save some metadata, so I used:++    $ git config annex.largefiles "include=* exclude=*.opf exclude=*.json"++then lets add everything++    $ git annex add *+    $ git add *+    $ git commit -m "first commit"++Calibre need read and write access on the its database, so let unlock it:++    $ git annex unlock metadata.db++On my other computer I only need to do++    $ git clone $user@$host:Calibre\ library+    $ cd Calibre\ library+    $ git annex init "another useful name"+    $ git annex get .+    $ git annex unlock metadata.db++The problem is that every time you will `git annex sync`, git annex+will lock again the metadata.db, so lets unlock it automatically. I+use git hooks, in `.git/hooks/post-commit` I have++    #!/bin/bash++    git annex edit metadata.db++don't forget to make this file executable++    $ chmod a+x .git/hooks/post-commit++Day to day operation+====================++    $ git annex add .++Will put new file into the annex++    $ git add .++Will take care of the files that should no go into annex++    $ git annex sync++Will make the repositories exchange informations about all this, and+make remote change local++    $ git annex get .++Will make remote book locally available++Merge conflict+--------------+You should not run calibre on the two computer simultaneously, or+without syncing before it. If you do, you will have a conflict that+git-annex will automatically *solve* by rename both of the file.++You can then either:++ - Choose one. If no books have been changed or added on one of the+   computer, to use the other `metadata.db` will not make you loose+   any information+ - rebuild it. `calibredb restore_database` won't do it, but will tell+   you how to do it.++Checking the library+--------------------+You can use `calibredb check_library` to check you library is+correct. If you use git for it, it will always tell you that it is not+correct: there is this author ".git" it doesn't know about. Just don't+care about it.++Maybe this can be solved by using `vcsh` but apparently+`vcsh`+`git annex` it not well tested yet.++Automatic stuff+---------------+I use `mr` to automatically run all this, but some config could be+done (I believe) to have `git annex copy --auto` do what it should.++There are also the git annex assistant for this kind of automatic+synchronizations of contents, but I don't know if my automatic+unlocking of one file will break this.++It might be interesting to find someway to unlock and lock the library+only when running calibre, a simple script to launch calibre will do+that. Note that each time you will lock and unlock, you will have a+new commit in git.++Another solution+===================+You could also use direct mode in place of the auto unlock feature++    git annex indirect++The remove the `post-commit` git hook (or do not add it). Its a+simpler solution, but remember that interaction between git annex direct+repositories and plain git are complex
+ doc/todo/add_metadata_to_annexed_files.mdwn view
@@ -0,0 +1,5 @@+I would like to attach metadata to annexed files (objects) without cluttering the workdir with files containing this metadata. A common use case would be to add titles to my photo collection that could than end up in a generated photo album.++Depending on the implementation it might also be possible to use the metadata facility for a threaded commenting system.++The first question is whether the metadata is attached to the objects and thus shared by all paths pointing to the same data object or to paths in the worktree. I've no preference here at this point.
+ doc/todo/assistant_parallel_file_transfers.txt view
@@ -0,0 +1,15 @@+Hi and thank you for an incredible piece of software and great work!++I've noticed that when I add new files to a repository and I have my USB drive connected, the assistant alternate it's transfers of files. And only transfers one queued file at the time.++file1 -->> Internet offsite computer+file1 -->> USB drive+file2 -->> Internet offsite computer+file2 -->> USB drive+++I would prefer a logic where the assistant transfer files in parallel to my different repositories. I know that it might not be a good thing doing that with network accessed repositories, but when I have "low cost", locally attached USB drives it would be great if the transfers could be done in parallel.+++Is there a configuration option for this already?+
+ doc/todo/keep_annexed_files_for_a_while.mdwn view
@@ -0,0 +1,8 @@+I don't want files that I dropped to immediately disappear from my local or all of my remotes repos on the next sync. Especially in situations where changes to the git-annex repo get automatically and immediately replicated to remote repos, I want a configurable "grace" period before files in .git/annex/objects get really deleted.++This has similarities to the "trash" on a desktop. It might also be nice to++* configure a maximum amount of space of the "trash"+* have a way to see the contents of the trash to easily recover deleted files++Maybe it would make sense to just move dropped files to the desktops trash? "git annex trash" as an alternative to drop?
+ doc/todo/sync_my_local_git-annex_from_a_dump_remote.mdwn view
@@ -0,0 +1,6 @@+As discussed on debconf, I have the following use case:++* I have a dump remote, a folder on my webserver where files are uploaded through the web app. I don't have git on the webserver, just a plain folder.+* I have git-annex repo on a development server. The development server polls the webserver (ssh/ftp) once in an hour and synchronizes the state of the local git-annex repo with the state found on the webserver and commits that.+* This is not meant to be backup facility. I just want to be able to have a state on my development machine that is very likely to the state on the webserver.+
+ doc/todo/untracked_remotes.mdwn view
@@ -0,0 +1,9 @@+Seems that a fairly common desire in some use cases is to be able to make a+clone of a repository and be able to get files, without updating the+location tracking information. (And without even recording a uuid in the+remote.log.) Use cases include wanting to have temporary+clones without cluttering history, and centralized development where the+developers don't care to know about one-another's systems.++It seems that such an untracked repository would need to automatically+consider itself untrusted. Is that enough to avoid losing data?
doc/todo/windows_support.mdwn view
@@ -3,12 +3,10 @@  ## status -* Does not support encryption with gpg. * Does not work with Cygwin's build of git (that git does not consistently   support use of DOS style paths, which git-annex uses on Windows).    Must use the upstream build of git for Windows.-* Test suite works and passes, but 6 tests are disabled due to failing.-* Directory and rsync special remotes are known buggy.+* rsync special remotes are known buggy. * Bad file locking, it's probably not safe to run more than one git-annex   process at the same time on Windows. * No support for the assistant or webapp.
git-annex.cabal view
@@ -1,5 +1,5 @@ Name: git-annex-Version: 4.20130802+Version: 4.20130815 Cabal-Version: >= 1.8 License: GPL-3 Maintainer: Joey Hess <joey@kitenet.net>
standalone/windows/build.sh view
@@ -26,10 +26,12 @@ # for haskell libraries to link them with the cygwin library. cabal update || true -rm -rf MissingH-1.2.0.0+MISSINGH_VERSION="1.2.0.1"++rm -rf MissingH-${MISSINGH_VERSION} cabal unpack MissingH-cd MissingH-1.2.0.0-withcyg patch -p1 <../standalone/windows/haskell-patches/MissingH_1.2.0.0-0001-hack-around-strange-build-problem-in-jenkins-autobui.patch+cd MissingH-${MISSINGH_VERSION}+withcyg patch -p1 <../standalone/windows/haskell-patches/ccc5967426a14eb7e8978277ed4fa937f8e0c514.patch cabal install || true cd ..