git-annex 4.20131101 → 4.20131106
raw patch · 75 files changed
+1150/−112 lines, 75 files
Files
- Annex/Branch.hs +10/−8
- Assistant/Alert.hs +1/−1
- Assistant/Pairing.hs +1/−1
- Assistant/Threads/PairListener.hs +23/−11
- Assistant/WebApp/Configurators/Edit.hs +4/−0
- Assistant/WebApp/Configurators/Local.hs +1/−1
- Assistant/WebApp/OtherRepos.hs +6/−2
- Build/EvilSplicer.hs +1/−1
- Build/OSXMkLibs.hs +1/−1
- CHANGELOG +21/−0
- Command/GCryptSetup.hs +7/−3
- Command/Map.hs +1/−1
- Command/Merge.hs +1/−2
- Command/Sync.hs +17/−12
- Git/Construct.hs +10/−8
- Git/Url.hs +12/−11
- Remote/Directory.hs +1/−1
- Remote/GCrypt.hs +1/−1
- Remote/Git.hs +1/−1
- Remote/Helper/Ssh.hs +1/−1
- Remote/Hook.hs +1/−1
- Remote/Rsync.hs +1/−1
- Remote/Web.hs +2/−4
- debian/changelog +21/−0
- doc/bugs/Conflicting_archive_descriptions.mdwn +16/−0
- doc/bugs/Endless_SSH_password_prompts.mdwn +15/−0
- doc/bugs/Impossible_to_enable_an_existing_gcrypt_repo_in_the_webapp.mdwn +21/−0
- doc/bugs/Local_pairing_fails:_received_PairMsg_loop.mdwn +39/−0
- doc/bugs/Transfers_continue_after_daemon_stopped.mdwn +5/−0
- doc/bugs/Unnecessary_remote_transfers.mdwn +24/−0
- doc/bugs/Zombie_processes_and__47__or_stuck_git_processes.mdwn +44/−0
- doc/bugs/git-annex-shell:_gcryptsetup_permission_denied.mdwn +48/−0
- doc/bugs/importfeed_should_allow_pubdate_in_the_template.mdwn +5/−0
- doc/bugs/internal_server_error:_unknown_UUID_on_webapp.mdwn +147/−0
- doc/bugs/remote_not_showing_up_in_webapp.mdwn +88/−0
- doc/bugs/unfinished_repository_when_using_annex-ignore_true_.mdwn +23/−0
- doc/bugs/web_app_loops_over_a_non-addable_file.mdwn +54/−0
- doc/devblog/day_47__fell_off_the_blogging_wagon.mdwn +3/−0
- doc/devblog/day_48__direct_mode_guard_design.mdwn +29/−0
- doc/devblog/day_49__direct_mode_guard_implementation.mdwn +14/−0
- doc/devblog/day_50__.mdwn +16/−0
- doc/forum/GPG_passphrase_handling.txt +2/−0
- doc/forum/Git_annex___39__corrupting__39___itself.mdwn +34/−0
- doc/forum/How_to_cancel_an_add__63__.mdwn +5/−0
- doc/forum/Please_publish_new_releases_not_shorter_than_11_days.mdwn +6/−0
- doc/forum/Purge_a_remote.txt +2/−0
- doc/forum/Purge_a_remote/comment_1_78b3b77f457c65d31fd8a5abf714905d._comment +8/−0
- doc/forum/Purge_a_remote/comment_2_dc65719157dee63b3979563ed57ee0ce._comment +10/−0
- doc/forum/Purge_a_remote/comment_3_63e0280273b816fa4b837724e102f813._comment +8/−0
- doc/forum/Purge_a_remote/comment_4_7fad1c4798ca03a4095ac3241c279f6d._comment +11/−0
- doc/forum/Suggestion:_Put_ssh_server_back_into_android_version.mdwn +9/−0
- doc/forum/lost_in_walkthrough....txt +78/−0
- doc/forum/preferred_content.mdwn +11/−0
- doc/forum/speed_up_assistant_startup_on_large_repositories.mdwn +1/−0
- doc/install/Debian.mdwn +4/−0
- doc/install/Ubuntu/comment_12_38f69dffe2db0d15e4c4e5cb47f40ef8._comment +8/−0
- doc/install/cabal/comment_26_bd455c732639728bce2bfc39e32871d2._comment +8/−0
- doc/install/cabal/comment_27_c080e9239b6eec88d329c28da7bb4141._comment +17/−0
- doc/install/cabal/comment_28_15951dd070a675300420eea137a28ef9._comment +10/−0
- doc/internals.mdwn +1/−1
- doc/internals/lockdown.mdwn +44/−0
- doc/news/version_4.20130827.mdwn +0/−27
- doc/news/version_4.20131106.mdwn +18/−0
- doc/special_remotes/gcrypt.mdwn +1/−1
- doc/tips/fully_encrypted_git_repositories_with_gcrypt.mdwn +21/−6
- doc/todo/Option_for_browser_to_launch_webapp_with.mdwn +7/−0
- doc/todo/Show_repo_type_in_repo_list.mdwn +1/−0
- doc/todo/Sync_repo_names__63__.mdwn +10/−0
- doc/todo/direct_mode_guard.mdwn +60/−0
- doc/todo/wishlist:_annex.largefiles_configuration_in_webapp_and_sync.mdwn +1/−0
- doc/todo/wishlist:_encrypted_git_remote_on_hosting_site_from_webapp.mdwn +1/−0
- doc/todo/wishlist_degraded_files.mdwn +5/−0
- git-annex.cabal +1/−1
- templates/configurators/newrepository.hamlet +5/−0
- templates/documentation/repogroup.hamlet +5/−3
Annex/Branch.hs view
@@ -29,6 +29,7 @@ import qualified Data.ByteString.Lazy.Char8 as L import qualified Data.Set as S import qualified Data.Map as M+import qualified Control.Exception as E import Common.Annex import Annex.BranchState@@ -53,6 +54,7 @@ import Annex.ReplaceFile import qualified Annex.Queue import Annex.Branch.Transitions+import Annex.Exception {- Name of the branch that is used to store git-annex's information. -} name :: Git.Ref@@ -345,15 +347,15 @@ #endif let g' = g { gitEnv = Just $ ("GIT_INDEX_FILE", f):e } - Annex.changeState $ \s -> s { Annex.repo = g' }- checkIndexOnce $ unlessM (liftIO $ doesFileExist f) $ do- unless bootstrapping create- liftIO $ createDirectoryIfMissing True $ takeDirectory f- unless bootstrapping $ inRepo genIndex- r <- a+ r <- tryAnnex $ do+ Annex.changeState $ \s -> s { Annex.repo = g' }+ checkIndexOnce $ unlessM (liftIO $ doesFileExist f) $ do+ unless bootstrapping create+ liftIO $ createDirectoryIfMissing True $ takeDirectory f+ unless bootstrapping $ inRepo genIndex+ a Annex.changeState $ \s -> s { Annex.repo = (Annex.repo s) { gitEnv = gitEnv g} }-- return r+ either E.throw return r {- Updates the branch's index to reflect the current contents of the branch. - Any changes staged in the index will be preserved.
Assistant/Alert.hs view
@@ -192,7 +192,7 @@ button <- mkAlertButton True (T.pack "Configure") urlrenderer ConfigFsckR void $ addAlert (notFsckedAlert mr button) #else-notFsckedNudge _ = noop+notFsckedNudge _ _ = noop #endif notFsckedAlert :: Maybe Remote -> AlertButton -> Alert
Assistant/Pairing.hs view
@@ -28,7 +28,7 @@ | PairAck {- "I saw your PairAck; you can stop sending them." -} | PairDone- deriving (Eq, Read, Show, Ord)+ deriving (Eq, Read, Show, Ord, Enum) newtype PairMsg = PairMsg (Verifiable (PairStage, PairData, SomeAddr)) deriving (Eq, Read, Show)
Assistant/Threads/PairListener.hs view
@@ -16,6 +16,7 @@ import Assistant.Alert import Assistant.DaemonStatus import Utility.ThreadScheduler+import Utility.Format import Git import Network.Multicast@@ -42,20 +43,32 @@ (pip, verified) <- verificationCheck m =<< (pairingInProgress <$> getDaemonStatus) let wrongstage = maybe False (\p -> pairMsgStage m <= inProgressPairStage p) pip- case (wrongstage, sane, pairMsgStage m) of- -- ignore our own messages, and- -- out of order messages- (True, _, _) -> go reqs cache sock- (_, False, _) -> go reqs cache sock- (_, _, PairReq) -> if m `elem` reqs+ let fromus = maybe False (\p -> remoteSshPubKey (pairMsgData m) == remoteSshPubKey (inProgressPairData p)) pip+ case (wrongstage, fromus, sane, pairMsgStage m) of+ (_, True, _, _) -> do+ debug ["ignoring message that looped back"]+ go reqs cache sock+ (_, _, False, _) -> go reqs cache sock+ -- PairReq starts a pairing process, so a+ -- new one is always heeded, even if+ -- some other pairing is in process.+ (_, _, _, PairReq) -> if m `elem` reqs then go reqs (invalidateCache m cache) sock else do pairReqReceived verified urlrenderer m go (m:take 10 reqs) (invalidateCache m cache) sock- (_, _, PairAck) -> do+ (True, _, _, _) -> do+ debug+ ["ignoring out of order message"+ , show (pairMsgStage m)+ , "expected"+ , show (succ . inProgressPairStage <$> pip)+ ]+ go reqs cache sock+ (_, _, _, PairAck) -> do cache' <- pairAckReceived verified pip m cache go reqs cache' sock- (_, _, PairDone) -> do+ (_,_ , _, PairDone) -> do pairDoneReceived verified pip m go reqs cache sock @@ -75,11 +88,10 @@ verified = verifiedPairMsg m pip sameuuid = pairUUID (inProgressPairData pip) == pairUUID (pairMsgData m) - {- Various sanity checks on the content of the message. -}- checkSane msg + checkSane msg {- Control characters could be used in a - console poisoning attack. -}- | any isControl msg || any (`elem` "\r\n") msg = do+ | any isControl (filter (/= '\n') (decode_c msg)) = do liftAnnex $ warning "illegal control characters in pairing message; ignoring" return False
Assistant/WebApp/Configurators/Edit.hs view
@@ -37,6 +37,7 @@ import Remote.Helper.Encryptable (extractCipher) import Types.Crypto import Utility.Gpg+import Annex.UUID import qualified Data.Text as T import qualified Data.Map as M@@ -178,6 +179,9 @@ editForm :: Bool -> UUID -> Handler Html editForm new uuid = page "Edit repository" (Just Configuration) $ do mremote <- liftAnnex $ Remote.remoteFromUUID uuid+ when (mremote == Nothing) $+ whenM ((/=) uuid <$> liftAnnex getUUID) $+ error "unknown remote" curr <- liftAnnex $ getRepoConfig uuid mremote liftAnnex $ checkAssociatedDirectory curr mremote ((result, form), enctype) <- liftH $
Assistant/WebApp/Configurators/Local.hs view
@@ -24,8 +24,8 @@ import Utility.FreeDesktop #ifdef WITH_CLIBS import Utility.Mounts-#endif import Utility.DiskFree+#endif import Utility.DataUnits import Utility.Network import Remote (prettyUUID)
Assistant/WebApp/OtherRepos.hs view
@@ -61,8 +61,12 @@ threadDelay 100000 -- 1/10th of a second a +{- Returns once the assistant has daemonized, but possibly before it's+ - listening for web connections. -} startAssistant :: FilePath -> IO () startAssistant repo = do program <- readProgramFile- void $ forkIO $ void $ createProcess $- (proc program ["assistant"]) { cwd = Just repo }+ (_, _, _, pid) <- + createProcess $+ (proc program ["assistant"]) { cwd = Just repo }+ void $ checkSuccessProcess pid
Build/EvilSplicer.hs view
@@ -584,7 +584,7 @@ parsecAndReplace :: Parser String -> String -> String parsecAndReplace p s = case parse find "" s of Left e -> s- Right l -> concatMap (either (\c -> [c]) id) l+ Right l -> concatMap (either return id) l where find :: Parser [Either Char String] find = many $ try (Right <$> p) <|> (Left <$> anyChar)
Build/OSXMkLibs.hs view
@@ -144,7 +144,7 @@ Just n -> (n, libmap) Nothing -> (nextfreename, M.insert lib nextfreename libmap) where- names = map (\c -> [c]) ['A' .. 'Z'] +++ names = map pure ['A' .. 'Z'] ++ [[n, l] | n <- ['0' .. '9'], l <- ['A' .. 'Z']] used = S.fromList $ M.elems libmap nextfreename = fromMaybe (error "ran out of short library names!") $
CHANGELOG view
@@ -1,3 +1,24 @@+git-annex (4.20131106) unstable; urgency=low++ * Improve local pairing behavior when two computers both try to start+ the pairing process separately.+ * sync: Work even when the local git repository is new and empty,+ with no master branch.+ * gcrypt, bup: Fix bug that prevented using these special remotes+ with encryption=pubkey.+ * Fix enabling of gcrypt repository accessed over ssh;+ git-annex-shell gcryptsetup had a bug that caused it to fail+ with permission denied.+ * Fix zombie process that occurred when switching between repository+ views in the webapp.+ * map: Work when there are gcrypt remotes.+ * Fix build w/o webapp.+ * Fix exception handling bug that could cause .git/annex/index to be used+ for git commits outside the git-annex branch. Known to affect git-annex+ when used with the git shipped with Ubuntu 13.10.++ -- Joey Hess <joeyh@debian.org> Wed, 06 Nov 2013 11:17:47 -0400+ git-annex (4.20131101) unstable; urgency=low * The "git annex content" command is renamed to "git annex wanted".
Command/GCryptSetup.hs view
@@ -23,13 +23,17 @@ start :: String -> CommandStart start gcryptid = next $ next $ do- g <- gitRepo u <- getUUID+ when (u /= NoUUID) $+ error "gcryptsetup refusing to run; this repository already has a git-annex uuid!"+ + g <- gitRepo gu <- Remote.GCrypt.getGCryptUUID True g- if u == NoUUID && gu == Nothing+ let newgu = genUUIDInNameSpace gCryptNameSpace gcryptid+ if gu == Nothing || gu == Just newgu then if Git.repoIsLocalBare g then do void $ Remote.GCrypt.setupRepo gcryptid g return True else error "cannot use gcrypt in a non-bare repository"- else error "gcryptsetup permission denied"+ else error "gcryptsetup uuid mismatch"
Command/Map.hs view
@@ -74,7 +74,7 @@ hostname :: Git.Repo -> String hostname r- | Git.repoIsUrl r = Git.Url.host r+ | Git.repoIsUrl r = fromMaybe (Git.repoLocation r) (Git.Url.host r) | otherwise = "localhost" basehostname :: Git.Repo -> String
Command/Merge.hs view
@@ -34,6 +34,5 @@ mergeSynced :: CommandStart mergeSynced = do- branch <- inRepo Git.Branch.current prepMerge- maybe stop mergeLocal branch+ mergeLocal =<< inRepo Git.Branch.current
Command/Sync.hs view
@@ -45,13 +45,15 @@ prepMerge -- There may not be a branch checked out until after the commit,- -- so only look it up once needed, and only look it up once.+ -- or perhaps after it gets merged from the remote.+ -- So only look it up once it's needed, and if once there is a+ -- branch, cache it. mvar <- liftIO newEmptyMVar let getbranch = ifM (liftIO $ isEmptyMVar mvar) ( do- branch <- fromMaybe (error "no branch is checked out")- <$> inRepo Git.Branch.current- liftIO $ putMVar mvar branch+ branch <- inRepo Git.Branch.current+ when (isJust branch) $+ liftIO $ putMVar mvar branch return branch , liftIO $ readMVar mvar )@@ -116,8 +118,9 @@ _ <- inRepo $ tryIO . Git.Command.runQuiet params return True -mergeLocal :: Git.Ref -> CommandStart-mergeLocal branch = go =<< needmerge+mergeLocal :: Maybe Git.Ref -> CommandStart+mergeLocal Nothing = stop+mergeLocal (Just branch) = go =<< needmerge where syncbranch = syncBranch branch needmerge = ifM isBareRepo@@ -132,8 +135,9 @@ showStart "merge" $ Git.Ref.describe syncbranch next $ next $ mergeFrom syncbranch -pushLocal :: Git.Ref -> CommandStart-pushLocal branch = do+pushLocal :: Maybe Git.Ref -> CommandStart+pushLocal Nothing = stop+pushLocal (Just branch) = do inRepo $ updateBranch $ syncBranch branch stop @@ -147,13 +151,13 @@ , Param $ show $ Git.Ref.base syncbranch ] g -pullRemote :: Remote -> Git.Ref -> CommandStart+pullRemote :: Remote -> Maybe Git.Ref -> CommandStart pullRemote remote branch = do showStart "pull" (Remote.name remote) next $ do showOutput stopUnless fetch $- next $ mergeRemote remote (Just branch)+ next $ mergeRemote remote branch where fetch = inRepo $ Git.Command.runBool [Param "fetch", Param $ Remote.name remote]@@ -175,8 +179,9 @@ branchlist Nothing = [] branchlist (Just branch) = [branch, syncBranch branch] -pushRemote :: Remote -> Git.Ref -> CommandStart-pushRemote remote branch = go =<< needpush+pushRemote :: Remote -> Maybe Git.Ref -> CommandStart+pushRemote _remote Nothing = stop+pushRemote remote (Just branch) = go =<< needpush where needpush = anyM (newer remote) [syncBranch branch, Annex.Branch.name] go False = stop
Git/Construct.hs view
@@ -104,14 +104,16 @@ localToUrl reference r | not $ repoIsUrl reference = error "internal error; reference repo not url" | repoIsUrl r = r- | otherwise = r { location = Url $ fromJust $ parseURI absurl }- where- absurl = concat- [ Url.scheme reference- , "//"- , Url.authority reference- , repoPath r- ]+ | otherwise = case Url.authority reference of+ Nothing -> r+ Just auth -> + let absurl = concat+ [ Url.scheme reference+ , "//"+ , auth+ , repoPath r+ ]+ in r { location = Url $ fromJust $ parseURI absurl } {- Calculates a list of a repo's configured remotes, by parsing its config. -} fromRemotes :: Repo -> IO [Repo]
Git/Url.hs view
@@ -37,32 +37,33 @@ fixup x = x {- Hostname of an URL repo. -}-host :: Repo -> String+host :: Repo -> Maybe String host = authpart uriRegName' {- Port of an URL repo, if it has a nonstandard one. -} port :: Repo -> Maybe Integer port r = case authpart uriPort r of- ":" -> Nothing- (':':p) -> readish p- _ -> Nothing+ Nothing -> Nothing+ Just ":" -> Nothing+ Just (':':p) -> readish p+ Just _ -> Nothing {- Hostname of an URL repo, including any username (ie, "user@host") -}-hostuser :: Repo -> String-hostuser r = authpart uriUserInfo r ++ authpart uriRegName' r+hostuser :: Repo -> Maybe String+hostuser r = (++)+ <$> authpart uriUserInfo r+ <*> authpart uriRegName' r {- The full authority portion an URL repo. (ie, "user@host:port") -}-authority :: Repo -> String+authority :: Repo -> Maybe String authority = authpart assemble where assemble a = uriUserInfo a ++ uriRegName' a ++ uriPort a {- Applies a function to extract part of the uriAuthority of an URL repo. -}-authpart :: (URIAuth -> a) -> Repo -> a-authpart a Repo { location = Url u } = a auth- where- auth = fromMaybe (error $ "bad url " ++ show u) (uriAuthority u)+authpart :: (URIAuth -> a) -> Repo -> Maybe a+authpart a Repo { location = Url u } = a <$> uriAuthority u authpart _ repo = notUrl repo notUrl :: Repo -> a
Remote/Directory.hs view
@@ -56,7 +56,7 @@ whereisKey = Nothing, remoteFsck = Nothing, repairRepo = Nothing,- config = M.empty,+ config = c, repo = r, gitconfig = gc, localpath = Just dir,
Remote/GCrypt.hs view
@@ -109,7 +109,7 @@ , whereisKey = Nothing , remoteFsck = Nothing , repairRepo = Nothing- , config = M.empty+ , config = c , localpath = localpathCalc r , repo = r , gitconfig = gc { remoteGitConfig = Just $ extractGitConfig r }
Remote/Git.hs view
@@ -120,7 +120,7 @@ , repairRepo = if Git.repoIsUrl r then Nothing else Just $ repairRemote r- , config = M.empty+ , config = c , localpath = localpathCalc r , repo = r , gitconfig = gc
Remote/Helper/Ssh.hs view
@@ -30,7 +30,7 @@ g <- fromRepo id let c = extractRemoteGitConfig g (Git.repoDescribe r) let opts = map Param $ remoteAnnexSshOptions c- let host = Git.Url.hostuser r+ let host = fromMaybe (error "bad ssh url") $ Git.Url.hostuser r params <- sshCachingOptions (host, Git.Url.port r) opts return $ params ++ Param host : sshcmd
Remote/Hook.hs view
@@ -54,7 +54,7 @@ whereisKey = Nothing, remoteFsck = Nothing, repairRepo = Nothing,- config = M.empty,+ config = c, localpath = Nothing, repo = r, gitconfig = gc,
Remote/Rsync.hs view
@@ -81,7 +81,7 @@ , whereisKey = Nothing , remoteFsck = Nothing , repairRepo = Nothing- , config = M.empty+ , config = c , repo = r , gitconfig = gc , localpath = if islocal
Remote/Web.hs view
@@ -25,8 +25,6 @@ import qualified Utility.Quvi as Quvi #endif -import qualified Data.Map as M- remote :: RemoteType remote = RemoteType { typename = "web",@@ -44,7 +42,7 @@ return [r] gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex (Maybe Remote)-gen r _ _ gc = +gen r _ c gc = return $ Just Remote { uuid = webUUID, cost = expensiveRemoteCost,@@ -58,7 +56,7 @@ whereisKey = Just getUrls, remoteFsck = Nothing, repairRepo = Nothing,- config = M.empty,+ config = c, gitconfig = gc, localpath = Nothing, repo = r,
debian/changelog view
@@ -1,3 +1,24 @@+git-annex (4.20131106) unstable; urgency=low++ * Improve local pairing behavior when two computers both try to start+ the pairing process separately.+ * sync: Work even when the local git repository is new and empty,+ with no master branch.+ * gcrypt, bup: Fix bug that prevented using these special remotes+ with encryption=pubkey.+ * Fix enabling of gcrypt repository accessed over ssh;+ git-annex-shell gcryptsetup had a bug that caused it to fail+ with permission denied.+ * Fix zombie process that occurred when switching between repository+ views in the webapp.+ * map: Work when there are gcrypt remotes.+ * Fix build w/o webapp.+ * Fix exception handling bug that could cause .git/annex/index to be used+ for git commits outside the git-annex branch. Known to affect git-annex+ when used with the git shipped with Ubuntu 13.10.++ -- Joey Hess <joeyh@debian.org> Wed, 06 Nov 2013 11:17:47 -0400+ git-annex (4.20131101) unstable; urgency=low * The "git annex content" command is renamed to "git annex wanted".
+ doc/bugs/Conflicting_archive_descriptions.mdwn view
@@ -0,0 +1,16 @@+This is confusing:++"Next we come to the archive repositories.The archive repositories coordinate together, so that each file is archived in only one place. **When you move files into a folder named "archive"**, they'll be moved to an archive repository, and removed from all your client repositories. This is handy if you have old files you don't need anymore, but want to keep archived for later. When you copy or move a file out of an "archive" folder, it'll be retrieved from the archive repository."++"The small archive repositories are like other archive repositories, but smaller. While archive repositories normally accumulate every file they can, small archive repositories only accumulate files **once you put them in an "archive" directory.**"++Based upon those descriptions, I don't know what the difference is.++> Improved wording to not imply that files are only put into archive+> repositories once the files are moved to archive directories.+> (Which is how small archive repositories work.)+> +> If you're still confused about it, see+> <http://git-annex.branchable.com/assistant/archival_walkthrough/>+> +> [[done]] --[[Joey]]
+ doc/bugs/Endless_SSH_password_prompts.mdwn view
@@ -0,0 +1,15 @@+### Please describe the problem.+Yesterday I installed git-annex on two computers and paired their repos. Today I logged back in to one of them, and as soon as the webapp loaded (autostarted in the background), it popped up an OpenSSH prompt wanting my key's password. I typed it in, and it popped up another. This went on several times. When I hit Cancel instead, it popped up a prompt wanting the password for the user account on my other computer. Even with that, once wasn't enough.++This is bad enough, but worse is that the password prompt captures the keyboard input so I can't even open my Yakuake console to kill git-annex. Well, it's difficult and requires hitting Escape rapidly over and over until I can squeeze in a keystroke to the rest of the system.++I don't understand why this is happening.++1. Shouldn't git-annex have installed a passwordless key on my paired system? It did that for my remote repo.++2. The prompt it's using has no option to remember the pasword. I use ssh-agent, but usually by running ssh-add in a terminal. Maybe if it would use a prompt that works with the agent it wouldn't ask for the password multiple times. ++3. I think it's opening multiple SSH connections at once, before I've entered the password even once, so even after I enter the password, it will keep asking for it until I've entered it for every SSH process that was already started.++### What version of git-annex are you using? On what operating system?+1 Nov 2013 Linux tarball on Ubuntu Raring 13.04
+ doc/bugs/Impossible_to_enable_an_existing_gcrypt_repo_in_the_webapp.mdwn view
@@ -0,0 +1,21 @@+### Please describe the problem.+As described earlier in [[tips/fully_encrypted_git_repositories_with_gcrypt]]++### What steps will reproduce the problem?+- A: use the webapp to create a new repository+- A: add a remote server to the repository using the 'gcrypt' method+- A: add a jabber account++- B: use the webapp to create a new repository+- B: add the jabber account+- B: see the previously created 'cloud repository' with status 'not enabled'+- B: click enable, see that the stored credentials are correct, and press "verify this server"+- B: enter the ssh password twice+- B: get redirected to a blank screen (on the url /config/repository/enable/gcrypt/UUID "x"?auth=y)++The assistent logfiles show nothing after the "Your public key has been saved in", the server shows that no public key for B was added to the account.++This is with git-annex installed on the remote server; without it the process gets stuck after clicking "encrypt repository" in step 2, it will just indefinitely keep prompting for the SSH password.++### What version of git-annex are you using? On what operating system?+Latest nightly build on ubuntu 13.10
+ doc/bugs/Local_pairing_fails:_received_PairMsg_loop.mdwn view
@@ -0,0 +1,39 @@+### Please describe the problem.+Pairing over my local network doesn't work. The pairing process never finishes. The log shows that the same PairMsg messages are repeated endlessly.++### What steps will reproduce the problem?+++### What version of git-annex are you using? On what operating system?+I'm on Ubuntu Raring 13.04. I installed git-annex 4.20131024 from the Precise PPA. It is working fine with a remote ssh repo, just not local pairing.++### 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-11-01 16:55:21 CDT] main: Pairing in progress+[2013-11-01 16:55:55 CDT] PairListener: received "PairMsg (Verifiable {verifiableVal = (PairReq,PairData {remoteHostName = Just \"Onyx\", remoteUserName = \"me\", remoteDirectory = \"~/annex\", remoteSshPubKey = \"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBT0Y6TTzTg8nWwonmgUPPwJmPIaJzfEoJl8DbuylpgXqGCQ4doJXuvBODHIehPfyMr1xCWqNlNNLkcWg/a/eHFceyt3IlcD9XaZ1aKPzPmpjYKKf5amiYd6mAssw8zFaZUvwaXkNuHZpXVZyg6C6TkT6kdfln+6fOJZpSGQzksy0jka/Rzx0KXjsp3oqO4tQJbC7AX0nvmD0zvLtyCURzfGV+n2IqQxpPf2nP75Evt8jamcuqm6pWoe+hj9zjGytIXpSKe35wzRwUAUrjgmZ9NweuWfi2uMPJlDv8/n+Q3HyjygA+GzixBGuYXDt1CD8ISZvuoygS+9+jeY9uYH8b me@Onyx\\n\", pairUUID = UUID \"834b4f39-ca66-4baf-9323-57ef7058d7d0\"},IPv4Addr 2281744576), verifiableDigest = \"8d5d380542f7377f09a4584a38b0dbcea9ea215c\"})"+[2013-11-01 16:55:56 CDT] PairListener: received "PairMsg (Verifiable {verifiableVal = (PairReq,PairData {remoteHostName = Just \"kubbie\", remoteUserName = \"me\", remoteDirectory = \"~/annex\", remoteSshPubKey = \"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCvBEWT+AiAmehOFyTQWlSdwDs7DDbkw7rfZ4W/IeG5awZjMgT5BefIv9cmar8vGIIEFMZLpf8cL3xIargDz0xE2wuqj5CLkdz+DKp5f2FGs11Ax/62DZr+eCiVtPnwijFw0Cz0wMRzkN93uedrvzP/KkNRcczgWh3aZqn8WxlkCia1fyykm/pP3W80MNkiJYX5vXpu1NCV5KLu+UXQzKhM2njOauJ3W5wsMvSl8faZIpEmKVCD3BMDDruxTIxggA3kt9GCGvIbPawy+fGOpp/j6pHqnX3GB2kkT47RIZKYEv99HuLyvea+oY5R11FsC2yYY3ujIdUU0fXnV8pvrqSv me@kubbie\\n\", pairUUID = UUID \"fd6a6858-76c9-4eea-b733-9359c7313e72\"},IPv4Addr 1879091392), verifiableDigest = \"cbd8197c3d78c8c68bb30f63aa974cd88dd0fb13\"})"+[2013-11-01 16:55:57 CDT] PairListener: received "PairMsg (Verifiable {verifiableVal = (PairReq,PairData {remoteHostName = Just \"Onyx\", remoteUserName = \"me\", remoteDirectory = \"~/annex\", remoteSshPubKey = \"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBT0Y6TTzTg8nWwonmgUPPwJmPIaJzfEoJl8DbuylpgXqGCQ4doJXuvBODHIehPfyMr1xCWqNlNNLkcWg/a/eHFceyt3IlcD9XaZ1aKPzPmpjYKKf5amiYd6mAssw8zFaZUvwaXkNuHZpXVZyg6C6TkT6kdfln+6fOJZpSGQzksy0jka/Rzx0KXjsp3oqO4tQJbC7AX0nvmD0zvLtyCURzfGV+n2IqQxpPf2nP75Evt8jamcuqm6pWoe+hj9zjGytIXpSKe35wzRwUAUrjgmZ9NweuWfi2uMPJlDv8/n+Q3HyjygA+GzixBGuYXDt1CD8ISZvuoygS+9+jeY9uYH8b me@Onyx\\n\", pairUUID = UUID \"834b4f39-ca66-4baf-9323-57ef7058d7d0\"},IPv4Addr 2281744576), verifiableDigest = \"8d5d380542f7377f09a4584a38b0dbcea9ea215c\"})"+[2013-11-01 16:55:58 CDT] PairListener: received "PairMsg (Verifiable {verifiableVal = (PairReq,PairData {remoteHostName = Just \"kubbie\", remoteUserName = \"me\", remoteDirectory = \"~/annex\", remoteSshPubKey = \"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCvBEWT+AiAmehOFyTQWlSdwDs7DDbkw7rfZ4W/IeG5awZjMgT5BefIv9cmar8vGIIEFMZLpf8cL3xIargDz0xE2wuqj5CLkdz+DKp5f2FGs11Ax/62DZr+eCiVtPnwijFw0Cz0wMRzkN93uedrvzP/KkNRcczgWh3aZqn8WxlkCia1fyykm/pP3W80MNkiJYX5vXpu1NCV5KLu+UXQzKhM2njOauJ3W5wsMvSl8faZIpEmKVCD3BMDDruxTIxggA3kt9GCGvIbPawy+fGOpp/j6pHqnX3GB2kkT47RIZKYEv99HuLyvea+oY5R11FsC2yYY3ujIdUU0fXnV8pvrqSv me@kubbie\\n\", pairUUID = UUID \"fd6a6858-76c9-4eea-b733-9359c7313e72\"},IPv4Addr 1879091392), verifiableDigest = \"cbd8197c3d78c8c68bb30f63aa974cd88dd0fb13\"})"+[2013-11-01 16:55:59 CDT] PairListener: received "PairMsg (Verifiable {verifiableVal = (PairReq,PairData {remoteHostName = Just \"Onyx\", remoteUserName = \"me\", remoteDirectory = \"~/annex\", remoteSshPubKey = \"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBT0Y6TTzTg8nWwonmgUPPwJmPIaJzfEoJl8DbuylpgXqGCQ4doJXuvBODHIehPfyMr1xCWqNlNNLkcWg/a/eHFceyt3IlcD9XaZ1aKPzPmpjYKKf5amiYd6mAssw8zFaZUvwaXkNuHZpXVZyg6C6TkT6kdfln+6fOJZpSGQzksy0jka/Rzx0KXjsp3oqO4tQJbC7AX0nvmD0zvLtyCURzfGV+n2IqQxpPf2nP75Evt8jamcuqm6pWoe+hj9zjGytIXpSKe35wzRwUAUrjgmZ9NweuWfi2uMPJlDv8/n+Q3HyjygA+GzixBGuYXDt1CD8ISZvuoygS+9+jeY9uYH8b me@Onyx\\n\", pairUUID = UUID \"834b4f39-ca66-4baf-9323-57ef7058d7d0\"},IPv4Addr 2281744576), verifiableDigest = \"8d5d380542f7377f09a4584a38b0dbcea9ea215c\"})"+[2013-11-01 16:56:00 CDT] PairListener: received "PairMsg (Verifiable {verifiableVal = (PairReq,PairData {remoteHostName = Just \"kubbie\", remoteUserName = \"me\", remoteDirectory = \"~/annex\", remoteSshPubKey = \"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCvBEWT+AiAmehOFyTQWlSdwDs7DDbkw7rfZ4W/IeG5awZjMgT5BefIv9cmar8vGIIEFMZLpf8cL3xIargDz0xE2wuqj5CLkdz+DKp5f2FGs11Ax/62DZr+eCiVtPnwijFw0Cz0wMRzkN93uedrvzP/KkNRcczgWh3aZqn8WxlkCia1fyykm/pP3W80MNkiJYX5vXpu1NCV5KLu+UXQzKhM2njOauJ3W5wsMvSl8faZIpEmKVCD3BMDDruxTIxggA3kt9GCGvIbPawy+fGOpp/j6pHqnX3GB2kkT47RIZKYEv99HuLyvea+oY5R11FsC2yYY3ujIdUU0fXnV8pvrqSv me@kubbie\\n\", pairUUID = UUID \"fd6a6858-76c9-4eea-b733-9359c7313e72\"},IPv4Addr 1879091392), verifiableDigest = \"cbd8197c3d78c8c68bb30f63aa974cd88dd0fb13\"})"+[2013-11-01 16:56:01 CDT] PairListener: received "PairMsg (Verifiable {verifiableVal = (PairReq,PairData {remoteHostName = Just \"Onyx\", remoteUserName = \"me\", remoteDirectory = \"~/annex\", remoteSshPubKey = \"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBT0Y6TTzTg8nWwonmgUPPwJmPIaJzfEoJl8DbuylpgXqGCQ4doJXuvBODHIehPfyMr1xCWqNlNNLkcWg/a/eHFceyt3IlcD9XaZ1aKPzPmpjYKKf5amiYd6mAssw8zFaZUvwaXkNuHZpXVZyg6C6TkT6kdfln+6fOJZpSGQzksy0jka/Rzx0KXjsp3oqO4tQJbC7AX0nvmD0zvLtyCURzfGV+n2IqQxpPf2nP75Evt8jamcuqm6pWoe+hj9zjGytIXpSKe35wzRwUAUrjgmZ9NweuWfi2uMPJlDv8/n+Q3HyjygA+GzixBGuYXDt1CD8ISZvuoygS+9+jeY9uYH8b me@Onyx\\n\", pairUUID = UUID \"834b4f39-ca66-4baf-9323-57ef7058d7d0\"},IPv4Addr 2281744576), verifiableDigest = \"8d5d380542f7377f09a4584a38b0dbcea9ea215c\"})"+...and so on and so on...+# End of transcript or log.+"""]]++> I was able to reproduce something very like this by starting+> pairing separately on both computers under poor network conditions (ie,+> weak wifi on my front porch).+> +> So, I've made a new PairReq message that has not been seen before +> always make the alert pop up, even if the assistant thinks it is+> in the middle of its own pairing process (or even another pairing process+> with a different box on the LAN).+>+> (This shouldn't cause a rogue PairAck to disrupt a pairing process part+> way through.)+> +> [[done]] --[[Joey]]
+ doc/bugs/Transfers_continue_after_daemon_stopped.mdwn view
@@ -0,0 +1,5 @@+After creating a new pairing, I stopped the daemon through the webapp while it was syncing. The webapp shut down and was no longer accessible, but git-annex continued running in the background, along with git-annex-shell, and they continued to run new transfers with new rsync processes. This continued until I killed them all.++I expected that when I stopped the daemon in the webapp, all git-annex processes and all transfers would stop.++Using the 20131101 tarball.
+ doc/bugs/Unnecessary_remote_transfers.mdwn view
@@ -0,0 +1,24 @@+### Please describe the problem.+This is related to [[http://git-annex.branchable.com/bugs/assistant_does_not_always_use_repo_cost_info_when_queueing_downloads/]]++### What steps will reproduce the problem?+1. Make a client repo on two machines on the local network.+2. Pair them.+3. Make a remote transfer repo.+4. Set up Jabber on both local machines.+5. Put a large file into the annex on one of the local machines.+6. Watch as the source client repo copies the file directly to the local paired machine, but also copies it to the remote transfer repo.+7. Wait for the local paired transfer to finish.+8. Manually disable syncing to the remote transfer repo.+9. Manually reenable it.+10. Watch as the remote transfer is not resumed.++### What version of git-annex are you using? On what operating system?+Using the 1 Nov Linux tarball, Ubuntu Raring.++### Please provide any additional information below.+This is a problem because unless I manually disable the remote repo, it will continue uploading the large file until it finishes, which uses the limited upstream bandwidth on my Internet connection--and this could take hours depending on the size of the file.++The remote transfer wasn't even necessary to begin with, because it already had a direct connection to the local paired repo. But even so, it should at least abort the remote transfer when the local transfer finishes.++Thanks for your work on git-annex assistant.
+ doc/bugs/Zombie_processes_and__47__or_stuck_git_processes.mdwn view
@@ -0,0 +1,44 @@+### Please describe the problem.+git-annex assistant is currently running. Here is the output of **ps -A u | grep -i git**:++[[!format sh """+5457 pts/2 Z+ 0:00 [git-annex] <defunct>+5510 ? Sl 0:05 git-annex assistant+5522 ? S 0:00 git --git-dir=/home/me/annex/.git --work-tree=/home/me/annex cat-file --batch+5573 ? S 0:00 git --git-dir=/home/me/annex/.git --work-tree=/home/me/annex cat-file --batch+5679 ? SN 0:00 git --git-dir=/home/me/annex/.git --work-tree=/home/me/annex check-attr -z --stdin annex.backend annex.numcopies --+5680 ? Z 0:03 [git-annex] <defunct>+5710 ? Z 0:00 [git-annex] <defunct>+5732 pts/2 Z+ 0:00 [git-annex] <defunct>+5752 pts/2 Z+ 0:00 [git-annex] <defunct>+5785 ? Ss 0:00 ssh: .git/annex/ssh/example.net [mux] +5905 ? Z 0:00 [git-annex] <defunct>+5923 ? Z 0:00 [git-annex] <defunct>+6513 pts/2 Z+ 0:00 [git-annex] <defunct>+6552 ? Z 0:00 [git-annex] <defunct>+7797 ? Z 0:00 [git-annex] <defunct>+7873 pts/2 Z 0:00 [git-annex] <defunct>+8708 pts/2 Z+ 0:00 [git-annex] <defunct>+9821 ? Z 0:00 [git-annex] <defunct>+9841 pts/2 Z+ 0:00 [git-annex] <defunct>+10462 ? Z 0:00 [git-annex] <defunct>+10522 pts/2 Z 0:00 [git-annex] <defunct>+12777 pts/2 Z+ 0:00 [git-annex] <defunct>+13878 pts/2 Z+ 0:00 [git-annex] <defunct>+14254 ? Z 0:00 [git-annex] <defunct>+14276 pts/2 Z+ 0:00 [git-annex] <defunct>+15932 ? Sl 0:00 git-annex transferkeys --readfd 37 --writefd 20+16022 pts/2 Sl 0:00 git-annex transferkeys --readfd 28 --writefd 22+16079 pts/2 S 0:00 git --git-dir=/mnt/debian/home/me/annex-backup/.git --work-tree=/mnt/debian/home/me/annex-backup cat-file --batch+16081 ? S 0:00 git --git-dir=/home/me/annex/.git --work-tree=/home/me/annex cat-file --batch+31565 pts/2 Sl+ 0:20 git-annex webapp+31580 pts/2 S+ 0:00 git --git-dir=/mnt/debian/home/me/annex-backup/.git --work-tree=/mnt/debian/home/me/annex-backup cat-file --batch+31590 pts/2 S+ 0:00 git --git-dir=/mnt/debian/home/me/annex-backup/.git --work-tree=/mnt/debian/home/me/annex-backup cat-file --batch+31618 pts/2 S+ 0:00 git --git-dir=/mnt/debian/home/me/annex-backup/.git --work-tree=/mnt/debian/home/me/annex-backup cat-file --batch+31635 ? Sl 9:26 /usr/lib/firefox/firefox /mnt/debian/home/me/annex-backup/.git/annex/webapp.html+31689 pts/2 SN+ 0:00 git --git-dir=/mnt/debian/home/me/annex-backup/.git --work-tree=/mnt/debian/home/me/annex-backup check-attr -z --stdin annex.backend annex.numcopies --+31812 pts/2 Z 0:00 [git-annex] <defunct>+31835 ? Ss 0:02 ssh: .git/annex/ssh/example.net [mux]+"""]]++> [[fixed|done]] --[[Joey]]
+ doc/bugs/git-annex-shell:_gcryptsetup_permission_denied.mdwn view
@@ -0,0 +1,48 @@+### Please describe the problem.+I followed the tip on [fully encrypted git repositories with gcrypt](http://git-annex.branchable.com/tips/fully_encrypted_git_repositories_with_gcrypt/) to create encrypted git-annex repository on a ssh server. When I try to checkout the repository, things break as follows:++`git clone gcrypt::ssh://my.server/home/me/encryptedrepo myrepo` ++works as expected but when in the myrepo directory, ++`git annex enableremote encryptedrepo gitrepo=ssh://my.server/home/me/encryptedrepo`++issues the following text (among normal messages):++`git-annex-shell: gcryptsetup permission denied`++Then while the links are there, ++`git annex get --from encryptedrepo`++does nothing (in the sense that the content is not retrieved). ++This seems to have everything to do with git-annex-shell as the exact same manipulations but with a local repository work perfectly. Unfortunately, I don't know haskell so [this code](https://github.com/joeyh/git-annex/blob/master/Command/GCryptSetup.hs) is cryptic to me. I can guess there is a problem getting the uuid of the repository, but as far as I can tell the bare distant repo looks fine. ++### What steps will reproduce the problem?++Create a standard git annex local repository and then follow the [fully encrypted git repositories with gcrypt tip](http://git-annex.branchable.com/tips/fully_encrypted_git_repositories_with_gcrypt/) to create an encrypted git-annex repository on a ssh server. Then follow the instructions in the same tip to clone the remote repository. ++### What version of git-annex are you using? On what operating system?+Both computers run ubuntu 12.04 with all updates and the latest git annex from the ppa, that is:++git-annex version: 4.20131024++build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP Feeds Quvi TDFA++key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SHA256 SHA1 SHA512 SHA224 SHA384 WORM URL++remote types: git gcrypt S3 bup directory rsync web webdav glacier hook+++### Please provide any additional information below.++[[!format sh """+# If you can, paste a complete transcript of the problem occurring here.+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log+++# End of transcript or log.+"""]]++> [[fixed|done]] --[[Joey]]
+ doc/bugs/importfeed_should_allow_pubdate_in_the_template.mdwn view
@@ -0,0 +1,5 @@+importfeed is a great feature, but it doesn't allow templating the filename with the publish date.++I would suggest adding pubdate option, which would fix this problem.++> duplicate of [[todo/importfeed: allow ${itemdate} with --template]] [[done]] --[[Joey]]
+ doc/bugs/internal_server_error:_unknown_UUID_on_webapp.mdwn view
@@ -0,0 +1,147 @@+### Please describe the problem.++I am having trouble using the webapp with a setup I did on the commandline that was working fine.++I have two machines: one, a server called `marcos`, is available on the internetz and I cloned a repo from there into `markov`, a workstation that is hidden behind a NAT connexion (so I can't add it as a remote).++It seems that because the remote is not locally available as a git remote, the webapp is freaking out because it doesn't recognize `markov` as a proper remote.++### What steps will reproduce the problem?++1. setup git annex locally (on `marcos`) in a repository (probably `git annex init; git annex direct; git annex add .` i somewhat followed [[tips/Git_annex_and_Calibre/]])+2. `git clone` that repo on a remote, unaccessible (NAT'd) server (`markov`)+3. start doing some git annex get, get tired, run the web app on `markov`+4. let that run over there, go back to `marcos`+5. be curious about what is going on on `markov`, run the webapp and enter the path to the repository created in step one when prompted (it's the first time i run the webapp)+6. it starts up fine, but doesn't seem to detect `markov`, marking transfers as going to the remote named `unknown`+7. click on the `unknown` link, crash+8. go back to the dashboard, crash++From there on, the webapp is pretty much crashed, starting it from scratch asks me if i want to create a git annex repo.++### What version of git-annex are you using? On what operating system?++4.20130921-gd4739c5 compiled and installed by hand on debian wheezy.++### Please provide any additional information below.++[[!format sh """+# Here's everything that has been logged by the git-annex assistant, as well as by programs it has run.++[2013-11-04 22:42:50 EST] main: starting assistant version 4.20130921-gd4739c5+(merging synced/git-annex into git-annex...)+(Recording state in git...)++ No known network monitor available through dbus; falling back to polling+Already up-to-date.++(scanning...) [2013-11-04 22:42:50 EST] Watcher: Performing startup scan+04/Nov/2013:22:42:51 -0500 [Error#yesod-core] Unknown UUID @(yesod-core-1.2.4.2:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:485:5)+04/Nov/2013:22:42:52 -0500 [Error#yesod-core] Unknown UUID @(yesod-core-1.2.4.2:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:485:5)+04/Nov/2013:22:42:52 -0500 [Error#yesod-core] Unknown UUID @(yesod-core-1.2.4.2:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:485:5)+(Recording state in git...)+(Recording state in git...)+(started...) ++ metadata.db still has writers, not adding+[2013-11-04 22:42:59 EST] Committer: Adding cover.jpg Ars Techn..ibre.epub Cyberpres..ibre.epub cover.jpg cover.jpg Ars Techn..ibre.epub cover.jpg Democracy..ibre.epub cover.jpg and 11 other files+add Calibre/Ars Technica [dim., 03 nov. 2013] (645)/cover.jpg (checksum...) ok+add Calibre/Ars Technica [dim., 03 nov. 2013] (645)/Ars Technica [dim., 03 nov. 2013] - Calibre.epub (checksum...) ok+add Calibre/Cyberpresse [lun., 04 nov. 2013] (647)/Cyberpresse [lun., 04 nov. 2013] - Calibre.epub (checksum...) ok+add Calibre/Cyberpresse [lun., 04 nov. 2013] (647)/cover.jpg (checksum...) ok+add Calibre/Ars Technica [sam., 02 nov. 2013] (642)/cover.jpg (checksum...) ok+add Calibre/Ars Technica [sam., 02 nov. 2013] (642)/Ars Technica [sam., 02 nov. 2013] - Calibre.epub (checksum...) ok+add Calibre/Democracy now! [lun., 04 nov. 2013] (649)/cover.jpg (checksum...) ok+add Calibre/Democracy now! [lun., 04 nov. 2013] (649)/Democracy now! [lun., 04 nov. 2013] - Calibre.epub (checksum...) ok+add Calibre/xkcd [lun., 04 nov. 2013] (646)/cover.jpg (checksum...) ok+add Calibre/xkcd [lun., 04 nov. 2013] (646)/xkcd [lun., 04 nov. 2013] - Calibre.epub (checksum...) ok+add Calibre/Cyberpresse [dim., 03 nov. 2013] (644)/cover.jpg (checksum...) ok+add Calibre/Cyberpresse [dim., 03 nov. 2013] (644)/Cyberpresse [dim., 03 nov. 2013] - Calibre.epub (checksum...) ok+add Calibre/Le Devoir [sam., 02 nov., 2013] (640)/cover.jpg (checksum...) ok+add Calibre/Le Devoir [sam., 02 nov., 2013] (640)/Le Devoir [sam., 02 nov., 2013] - Calibre.epub (checksum...) ok+add Calibre/Le Devoir [lun., 04 nov., 2013] (648)/cover.jpg (checksum...) ok+add Calibre/Le Devoir [lun., 04 nov., 2013] (648)/Le Devoir [lun., 04 nov., 2013] - Calibre.epub (checksum...) ok+add Calibre/Cyberpresse [sam., 02 nov. 2013] (641)/cover.jpg (checksum...) ok+add Calibre/Cyberpresse [sam., 02 nov. 2013] (641)/Cyberpresse [sam., 02 nov. 2013] - Calibre.epub (checksum...) ok+add Calibre/Le Devoir [dim., 03 nov., 2013] (643)/cover.jpg (checksum...) ok+add Calibre/Le Devoir [dim., 03 nov., 2013] (643)/Le Devoir [dim., 03 nov., 2013] - Calibre.epub (checksum...) [2013-11-04 22:43:01 EST] Committer: Committing changes to git+ok+(Recording state in git...)+(Recording state in git...)+04/Nov/2013:22:43:51 -0500 [Error#yesod-core] Unknown UUID @(yesod-core-1.2.4.2:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:485:5)+04/Nov/2013:22:47:24 -0500 [Error#yesod-core] Unknown UUID @(yesod-core-1.2.4.2:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:485:5)+04/Nov/2013:22:47:24 -0500 [Error#yesod-core] Unknown UUID @(yesod-core-1.2.4.2:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:485:5)+04/Nov/2013:22:47:24 -0500 [Error#yesod-core] Unknown UUID @(yesod-core-1.2.4.2:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:485:5)+04/Nov/2013:22:52:29 -0500 [Error#yesod-core] Unknown UUID @(yesod-core-1.2.4.2:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:485:5)+04/Nov/2013:22:52:30 -0500 [Error#yesod-core] Unknown UUID @(yesod-core-1.2.4.2:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:485:5)+04/Nov/2013:22:52:30 -0500 [Error#yesod-core] Unknown UUID @(yesod-core-1.2.4.2:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:485:5)+04/Nov/2013:22:56:47 -0500 [Error#yesod-core] Unknown UUID @(yesod-core-1.2.4.2:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:485:5)+[2013-11-04 22:57:08 EST] Committer: Adding metadata.db-journal+add metadata.db-journal (checksum...) [2013-11-04 22:57:08 EST] Committer: Committing changes to git+[2013-11-04 22:57:09 EST] Committer: Adding metadata.db-journal metadata.db+ok+(Recording state in git...)+(Recording state in git...)+add metadata.db (checksum...) [2013-11-04 22:57:09 EST] Committer: Committing changes to git+ok+(Recording state in git...)+(Recording state in git...)+04/Nov/2013:22:57:12 -0500 [Error#yesod-core] Unknown UUID @(yesod-core-1.2.4.2:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:485:5)+04/Nov/2013:22:57:15 -0500 [Error#yesod-core] Unknown UUID @(yesod-core-1.2.4.2:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:485:5)+04/Nov/2013:22:57:18 -0500 [Error#yesod-core] Unknown UUID @(yesod-core-1.2.4.2:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:485:5)+04/Nov/2013:22:57:20 -0500 [Error#yesod-core] Unknown UUID @(yesod-core-1.2.4.2:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:485:5)+"""]]++> I wonder if this couldn't be related to [[cannot determine uuid for origin]], although in this case the remote is just not added to `.git/config`. --[[anarcat]]++> This was fixed in commit 44e1524be53373ddbf28d643bedf5455433c2b2e+> on Sep 29th. You should update. [[done]]+> +> (It also sounds like your repository on markov is for some reason not+> able to push its git repository to marcos. You might need to fix+> something in your setup to get syncing working) --[[Joey]]+> +> > Humm.. Weird. Upgrading fixes the crash, but `marcos` still sees only+> > one repository. It sees some syncs going on from `unknown`, and when+> > I click on that `unknown` link, I get to edit that repository, and+> > it sees it as `here`. So I am not sure I understand what is going +> > on here.+> >+> > (As for the repo on `markov`, it does sync properly:+> > +> > anarcat@desktop008:books$ git annex sync+> > commit+> > ok+> > pull origin+> > From anarc.at:/srv/books+> > 3b4fa7b..c35b13e git-annex -> origin/git-annex+> > ok+> > +> > Or rather - it doesn't fail. But it doesn't push!+> > +> > anarcat@desktop008:books$ git push+> > Everything up-to-date+> > +> > Note that git on `marcos` is the 1.8.4 backport for some reason.+> > I know that branch tracking changed with that release, maybe +> > that's the problem? --[[anarcat]])+> > +> > > So yep, I confirm that even in 4.20131105-g8efdc1a, the webapp+> > > doesn't find the `markov` remote properly, even though+> > > `git annex status` can:+> > > +> > > $ git annex status+> > > repository mode: direct+> > > trusted repositories: 0+> > > semitrusted repositories: 3+> > > 00000000-0000-0000-0000-000000000001 -- web+> > > a75cbbf7-e055-423e-b375-443e0552c9e2 -- here (anarcat@marcos:/srv/books)+> > > aa500f29-42d9-4777-ae02-4a2c3d47db44 -- anarcat@markov:~/books+> > > +> > > I see transfers happening, but they go to "unknown". The link is:+> > > +> > > http://127.0.0.1:56577/config/repository/edit/UUID%20%22aa500f29-42d9-4777-ae02-4a2c3d47db44%22?auth=...+> > > +> > > -- [[anarcat]]+> > > +> > > > I have filed this as a separate bug to close the discussion properly here, sorry for the noise. :) see [[bugs/remote_not_showing_up_in_webapp]] --[[anarcat]]
+ doc/bugs/remote_not_showing_up_in_webapp.mdwn view
@@ -0,0 +1,88 @@+### Please describe the problem.++This is a followup on [[bugs/internal_server_error:_unknown_UUID_on_webapp]]. In that issue, webapps previous to 20130929 would crash with `internal server error: unknown UUID`. This was fixed at that date, but some problems remain, namely that the remote that is recognized on the commandline doesn't show up in the webapp.++`markov` is able to push to `marcos`, but not the reverse because `markov` is hidden behind a NAT. `git annex sync` seems to do the right thing accordingly on both ends (which is: `marcos` doesn't try to push to `markov` but `markov` pushes to `marcos`).++### What steps will reproduce the problem?++See [[bugs/internal_server_error:_unknown_UUID_on_webapp]]. I didn't do any further changes other than upgrade `git-annex` on both ends.++### What version of git-annex are you using? On what operating system?++`marcos` is now running `Version: 4.20131105-g8efdc1a Build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP DNS Feeds Quvi TDFA CryptoHash`++`markov` is now running the wheezy backport, `4.20131002~bpo70+1`.++### Please provide any additional information below.++#### On `marcos`++Here's the output of `git annex status` on `marcos`:++[[!format sh """+anarcat@marcos:books$ git annex status+repository mode: direct+trusted repositories: 0+semitrusted repositories: 3+ 00000000-0000-0000-0000-000000000001 -- web+ a75cbbf7-e055-423e-b375-443e0552c9e2 -- here (anarcat@marcos:/srv/books)+ aa500f29-42d9-4777-ae02-4a2c3d47db44 -- anarcat@markov:~/books+untrusted repositories: 0+transfers in progress: none+available local disk space: 7.04 gigabytes (+1 megabyte reserved)+local annex keys: 736+local annex size: 3.92 gigabytes+annexed files in working tree: 721+size of annexed files in working tree: 3.92 gigabytes+bloom filter size: 16 mebibytes (0.1% full)+backend usage:+ SHA256E: 1457+# End of transcript or log.+"""]]++Here's a screenshot of the idle webapp on marcos:++<img src="http://i.imgur.com/3HFgj3w.png" />++You can clearly see that the webapp doesn't see the `markov` remote.++When `markov` transfers stuff, `marcos` sees the transfers happening, but marks it as going to the `unknown` remote:++<img src="http://i.imgur.com/YOu9GbA.png" />++Clicking on that link is what was previously triggering [[bugs/internal_server_error:_unknown_UUID_on_webapp]] but now yields a "Unknown remote" error.++<img src="http://i.imgur.com/y7JxULi.png" />++#### On `markov`:++Here is a screenshot from `markov` that shows *it* knows about both repositories and seem to behave properly:++<img src="http://i.imgur.com/fTMslVT.png" />++And here's the output of `git annex status` on markov:++[[!format sh """+anarcat@desktop008:books$ git annex status+repository mode: indirect+trusted repositories: 0+semitrusted repositories: 3+ 00000000-0000-0000-0000-000000000001 -- web+ a75cbbf7-e055-423e-b375-443e0552c9e2 -- origin (anarcat@marcos:/srv/books)+ aa500f29-42d9-4777-ae02-4a2c3d47db44 -- here (anarcat@markov:~/books)+untrusted repositories: 0+transfers in progress:+ downloading Patrick K. O'Brien/Philip's Atlas of World History, Concise Edition (115)/Philip's Atlas of World History, Concise Edition - Patrick K. O'Brien.pdf from origin+available local disk space: 93.25 gigabytes (+1 megabyte reserved)+temporary directory size: 50.07 megabytes (clean up with git-annex unused)+local annex keys: 708+local annex size: 3.81 gigabytes+known annex keys: 721+known annex size: 3.92 gigabytes+bloom filter size: 16 mebibytes (0.1% full)+backend usage:+ SHA256E: 1429+"""]]++Finally, note that you sometimes see `desktop008` above: it turns out I am running `git annex` from my workstation, which NFS-mounts the `/home` directory of `markov` into `/srv/musique`. --[[anarcat]]
+ doc/bugs/unfinished_repository_when_using_annex-ignore_true_.mdwn view
@@ -0,0 +1,23 @@+### Please describe the problem.++When using a git remote which doesn't support git-annex (f.e. gitlab) and is configured with `annex-ignore true` the remote is shown as `unfinished repository` in the webapp.++It would be nice if the webapp would recognize this and show the remote as git-only remote including sync-state and remote name (or even better: the remote details, like the URL to the remote)++### What steps will reproduce the problem?++Add a normal git remote and configure `git config remote.<name>.annex-ignore true`.+Start the webapp.++### What version of git-annex are you using? On what operating system?++ git-annex version: 4.20131101-gf59a6d1+ build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP Feeds Quvi TDFA+ key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SHA256 SHA1 SHA512 SHA224 SHA384 WORM URL+ remote types: git gcrypt S3 bup directory rsync web webdav glacier hook+ local repository version: 3+ default repository version: 3+ supported repository versions: 3 4+ upgrade supported from repository versions: 0 1 2++Kubuntu 13.10 x86_64
+ doc/bugs/web_app_loops_over_a_non-addable_file.mdwn view
@@ -0,0 +1,54 @@+### Please describe the problem.++I started the webapp on a pre-existing repo today, and it started adding all sorts of files which I didn't manually add, which is a little bit surprising, but "okay".++The problem is that it would loop over this one file over and over again. Adding it on the commandline yields a proper error, but this doesn't seem to properly propagate to the frontend.++### What steps will reproduce the problem?++Unclear.++### What version of git-annex are you using? On what operating system?++4.20131105-g8efdc1a++### Please provide any additional information below.++Here's the daemon.log:++[[!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++add clips/A31-05-12_21.22.amr (checksum...) [2013-11-06 10:21:10 EST] Committer: Committing changes to git+[2013-11-06 10:21:11 EST] Committer: Adding A31-05-12_21.22.amr+(Recording state in git...)+(Recording state in git...)+add clips/A31-05-12_21.22.amr (checksum...) [2013-11-06 10:21:11 EST] Committer: Committing changes to git+[2013-11-06 10:21:12 EST] Committer: Adding A31-05-12_21.22.amr+(Recording state in git...)+(Recording state in git...)+add clips/A31-05-12_21.22.amr (checksum...) [2013-11-06 10:21:12 EST] Committer: Committing changes to git+[2013-11-06 10:21:13 EST] Committer: Adding A31-05-12_21.22.amr+(Recording state in git...)+add clips/A31-05-12_21.22.amr (checksum...) [2013-11-06 10:21:13 EST] Committer: Committing changes to git+[2013-11-06 10:21:14 EST] Committer: Adding A31-05-12_21.22.amr+(Recording state in git...)+(Recording state in git...)+add clips/A31-05-12_21.22.amr (checksum...) [2013-11-06 10:21:14 EST] Committer: Committing changes to git+# End of transcript or log.+"""]]++And here's the attempt on the commandline, which is way more informative:++[[!format sh """+anarcat@marcos:video$ git annex add .+add clips/96_257.mp3 ok+add clips/A31-05-12_21.22.amr (checksum...)+git-annex: /srv/video/.git/annex/objects/z3/96/SHA256E-s260070--46f0d657cdd79032d431e2aebb04b63685ab26e7d00963036e0b64c9f86998f8.22.amr/SHA256E-s260070--46f0d657cdd79032d431e2aebb04b63685ab26e7d00963036e0b64c9f86998f8.22.amr: setFileMode: permission denied (Operation not permitted)+failed+"""]]++Turns out that file is owned by root, so it's an expected failure. But the webapp should simply skip this file, not loop over it.++The workaround is obviously to give this file to the proper user. --[[anarcat]]
+ doc/devblog/day_47__fell_off_the_blogging_wagon.mdwn view
@@ -0,0 +1,3 @@+Low activity the past couple of days. Released a new version of git-annex+yesterday. Today fixed three bugs (including a local pairing one that was+pretty compicated) and worked on getting caught up with traffic.
+ doc/devblog/day_48__direct_mode_guard_design.mdwn view
@@ -0,0 +1,29 @@+I've been investigating ways to implement a [[/todo/direct_mode_guard]].+Preventing a stray `git commit -a` or `git add` doing bad things in a+direct mode repository seems increasingly important.++First, considered moving `.git`, so git won't know it's a git repository.+This doesn't seem *too* hard to do, but there will certianly be unexpected+places that assume `.git` is the directory name.++I dislike it more and more as I think about it though, because it moves+direct mode git-annex toward being entirely separate from git, and I don't+want to write my own version control system. Nor do I want to complicate+the git ecosystem with tools needing to know about git-annex to work in+such a repository.++So, I'm happy that one of the other ideas I tried today seems quite+promising. Just set core.bare=true in a direct mode repository. This nicely+blocks all git commands that operate on the working tree from doing+anything, which is just what's needed in direct mode, since they don't know+how to handle the direct mode files. But it lets all git commands and other+tools that don't touch the working tree continue to be used. You can even+run `git log file` in such a repository (surprisingly!)++It also gives an easy out for anyone who really wants to use git commands+that operate on the work tree of their direct mode repository, by just+passing `-c core.bare=false`. And it's really easy to implement in+git-annex too -- it can just notice if a repo has core.bare and+annex.direct both set, and pass that parameter to every git command it+runs. I should be able to get by with only modifying 2 functions to+implement this.
+ doc/devblog/day_49__direct_mode_guard_implementation.mdwn view
@@ -0,0 +1,14 @@+Long, long day coding up the direct mode guard today. About 90% of the fun+is dealing with `receive.denyCurrentBranch` not preventing pushes that+change the current branch, now that core.bare is set in direct mode.+My current solution to this involves using a special branch when using+direct mode, which nothing will ever push to (hopefully). A much nicer+solution would be to use a `update` hook to deny pushes of the current+branch -- but there are filesystems where repos cannot have git hooks.++The test suite is falling over, but the `directguard` branch otherwise+seems usable.++----++Today's work was sponsored by Carlo Matteo Capocasa.
+ doc/devblog/day_50__.mdwn view
@@ -0,0 +1,16 @@+Spent half the day tracking down a strange bug that was apparently+ubuntu-specific and caused git-annex branch changes to get committed to+master. Root cause turned out to failing to recover from an+exception. I'm kicking myself about that, because I remember looking at the+code where the bug was at least twice before and thinking "hmm, should add+exception handling here? nah..".++I made a release with a fix for that and a few minor other accumulated+changes since last Friday's release. The pain point of this release is to+fix building without the webapp (so it will propigate to Debian testing,+etc). This release does not include the direct mode guard, so I'll have a+few weeks until the next release to get that tested.++BTW, Kevin tells me that the machine used to build git-annex for OSX is+going to be upgraded to 10.9 soon. So, hopefully I'll be making autobuilds+of that. I may have to stop the 1.8.
doc/forum/GPG_passphrase_handling.txt view
@@ -1,3 +1,5 @@+[[!meta title="GPG passphrase handling on OSX"]]+ Hello! I'm using OSX 10.9 and have installed gpg (and gpg2, if it matters) through homebrew and git-annex through cabal. I also installed
+ doc/forum/Git_annex___39__corrupting__39___itself.mdwn view
@@ -0,0 +1,34 @@+Hi,++Since the I updated to `2013-10-24` `git annex` has corrupted itself twice on my setup. I'm not claiming causality here and thus I haven't filled it as a bug (probably the mistake is mine).++I use three laptops and one remote ssh server. The motherboard on laptop *T* seems to have broken and I haven't fixed it yet. I have disabled sync to *T* on the webapp dashboard. ++First, one computer, called *W*, broke on Friday. I got the dreaded [serious problem](http://git-annex.branchable.com/devblog/day_41__onward/) screen. `git fsck` reported lots of missing blobs and tree problem, though my data seemed OK. I git cloned the repo from computer *X*. Now, last night both X and W reported the same problem (log below). *W* recovered itself somehow, but *X* is now in a cycle of re-adding all files in the repo and the posting the below error that has to do with computer *T* (IP ending with 107). ++I would appreciate hints on why this suddenly started happen. Computer T has been out of sync for almost 14 days (since the 24th of October I think).++ error: refs/remotes/192.168.1.107_annex/git-annex does not point to a valid object!+ error: refs/remotes/192.168.1.107_annex/master does not point to a valid object!+ error: refs/remotes/192.168.1.107_annex/synced/git-annex does not point to a valid object!+ error: refs/remotes/192.168.1.107_annex/synced/master does not point to a valid object!+ error: refs/synced/2ed58ecf-8e8c-44b8-ad34-d42ddfb35315/cmFzbXVzQGNvZGVyb2xsZXJzLmNvbQ==/git-annex does not point to a valid object!+ error: refs/synced/2ed58ecf-8e8c-44b8-ad34-d42ddfb35315/cmFzbXVzQGNvZGVyb2xsZXJzLmNvbQ==/master does not point to a valid object!+ error: refs/synced/f54b8200-8ec1-43d2-8710-b73ec118addc/cmFzbXVzQGNvZGVyb2xsZXJzLmNvbQ==/git-annex does not point to a valid object!+ error: refs/synced/f54b8200-8ec1-43d2-8710-b73ec118addc/cmFzbXVzQGNvZGVyb2xsZXJzLmNvbQ==/master does not point to a valid object!+ error: refs/synced/f54b8200-8ec1-43d2-8710-b73ec118addc/git-annex does not point to a valid object!+ error: refs/synced/f54b8200-8ec1-43d2-8710-b73ec118addc/master does not point to a valid object!+ error: refs/remotes/192.168.1.107_annex/git-annex does not point to a valid object!+ error: refs/remotes/192.168.1.107_annex/master does not point to a valid object!+ error: refs/remotes/192.168.1.107_annex/synced/git-annex does not point to a valid object!+ error: refs/remotes/192.168.1.107_annex/synced/master does not point to a valid object!+ error: refs/synced/2ed58ecf-8e8c-44b8-ad34-d42ddfb35315/cmFzbXVzQGNvZGVyb2xsZXJzLmNvbQ==/git-annex does not point to a valid object!+ error: refs/synced/2ed58ecf-8e8c-44b8-ad34-d42ddfb35315/cmFzbXVzQGNvZGVyb2xsZXJzLmNvbQ==/master does not point to a valid object!+ error: refs/synced/f54b8200-8ec1-43d2-8710-b73ec118addc/cmFzbXVzQGNvZGVyb2xsZXJzLmNvbQ==/git-annex does not point to a valid object!+ error: refs/synced/f54b8200-8ec1-43d2-8710-b73ec118addc/cmFzbXVzQGNvZGVyb2xsZXJzLmNvbQ==/master does not point to a valid object!+ error: refs/synced/f54b8200-8ec1-43d2-8710-b73ec118addc/git-annex does not point to a valid object!+ error: refs/synced/f54b8200-8ec1-43d2-8710-b73ec118addc/master does not point to a valid object!+ error: invalid object 100644 1ca66de3cdd9c79cde26a7555cf3b8d26d0e371d for '000/147/SHA256E-s347--1ab8084bf9ae06407ce0a7260a83638ea6e9a028dc59b4815fd60aec61dbd747.txt.log.log'+ fatal: git-write-tree: error building trees+ TransferScanner crashed: failed to read sha from git write-tree+ [2013-11-04 09:45:41 CET] TransferScanner: warning TransferScanner crashed: failed to read sha from git write-tree
+ doc/forum/How_to_cancel_an_add__63__.mdwn view
@@ -0,0 +1,5 @@+What is the safest way to cancel a `git annex add` before the first commit?++Say I first added a directory with a lot of small files to the annex and then (while watching the endless list of checksum operations) decide I should actually put them in a tar file and annex that instead.++The problem seems to be that `git annex add` immediately replaces the files with symlinks instead of waiting for a commit, so I can't just `git reset largedir/; tar cvfz largedir.tgz largedir/; git annex add largedir.tgz`.
+ doc/forum/Please_publish_new_releases_not_shorter_than_11_days.mdwn view
@@ -0,0 +1,6 @@+Hi,+i am following debian testing. The latest git-annex publication has manged to replace the former version on the last possible moment. Now another 10 days waiting.+Would be nice if you can coordinate with testing.++Thank you for git-annex. +Jürgen
+ doc/forum/Purge_a_remote.txt view
@@ -0,0 +1,2 @@+How could I delete and purge a remote? I want to remove all traces of it+but I can't find out how to achieve this.
+ doc/forum/Purge_a_remote/comment_1_78b3b77f457c65d31fd8a5abf714905d._comment view
@@ -0,0 +1,8 @@+[[!comment format=mdwn+ username="http://joeyh.name/"+ ip="209.250.56.47"+ subject="comment 1"+ date="2013-11-05T16:17:22Z"+ content="""+In the git-annex webapp, each repository has a settings menu with \"delete repository\".+"""]]
+ doc/forum/Purge_a_remote/comment_2_dc65719157dee63b3979563ed57ee0ce._comment view
@@ -0,0 +1,10 @@+[[!comment format=txt+ username="https://www.google.com/accounts/o8/id?id=AItOawkzwmw_zyMpZC9_J7ey--woeYPoZkAOgGw"+ nickname="dxtrish"+ subject="comment 2"+ date="2013-11-05T17:46:02Z"+ content="""+When I use that Delete button it seems to still have records of it+because when I delete the repo on the other end and create a new bare+one it complains about some UUID mismatch.+"""]]
+ doc/forum/Purge_a_remote/comment_3_63e0280273b816fa4b837724e102f813._comment view
@@ -0,0 +1,8 @@+[[!comment format=mdwn+ username="http://joeyh.name/"+ ip="209.250.56.47"+ subject="comment 3"+ date="2013-11-05T18:03:26Z"+ content="""+Hmm well, it's true that deleting a repository does not clean out any git remotes that other repositories might have configured using it, and the uuid of the old remote is cached in there. This is only a problem if you put back another repository in the same location as the old one. `git remote remove` should clean that up for you.+"""]]
+ doc/forum/Purge_a_remote/comment_4_7fad1c4798ca03a4095ac3241c279f6d._comment view
@@ -0,0 +1,11 @@+[[!comment format=mdwn+ username="https://www.google.com/accounts/o8/id?id=AItOawkzwmw_zyMpZC9_J7ey--woeYPoZkAOgGw"+ nickname="dxtrish"+ subject="comment 4"+ date="2013-11-06T14:24:21Z"+ content="""+That is exactly what I have wanted to do a couple of times now and 'git remote remove' does not seem to remove it all either.+When I try to create a new repository in the same place it still complains about that darn UUID :)++What is working is to manually add the new UUID to .git/config+"""]]
+ doc/forum/Suggestion:_Put_ssh_server_back_into_android_version.mdwn view
@@ -0,0 +1,9 @@+Hi!++Just tried various android ssh servers which do work, but have no access to the command line tools shipped with git annex.++From what I gather from the planning docs, sshd was stripped from the android tools to save space. If this were the case, it (naively) seems to me it would have to be simple to re-enable.++Rationale: It would make it super convenient to use command line git annex on my phone alongside the assistant, through letting me type on my desktop. Not to mention that the command line tools shipped with git annex are by far the best around for android work.++Carlo
+ doc/forum/lost_in_walkthrough....txt view
@@ -0,0 +1,78 @@+I'm trying to follow the steps of the "walkthrough" but I'm experiencing the following issue: when+I sync one repository and do "git annex get ." I don't get the files from the other repository.+Here is the transcript of the steps I followed - I've put them in a script (ga.sh) so I can replay+them and show them on the shell while executing.+Basically I have two repositories, "/tmp/a/annex" and "/tmp/b/annex", the second cloned from+the first. All the other steps are the same as in the walkthrough.+-----------------------------------+> bash -x ga.sh ++ cd /tmp++ mkdir a++ mkdir b++ cd a++ mkdir annex++ cd annex++ git init+Initialized empty Git repository in /tmp/a/annex/.git/++ git annex init a+init a ok+(Recording state in git...)++ cd /tmp/b++ git clone /tmp/a/annex+Cloning into 'annex'...+done.+warning: remote HEAD refers to nonexistent ref, unable to checkout.+++ cd annex++ git annex init b+init b ok+(Recording state in git...)++ git remote add a /tmp/a/annex++ cd /tmp/a/annex++ git remote add b /tmp/b/annex++ dd if=/dev/urandom of=first bs=1024 count=1+1+0 records in+1+0 records out+1024 bytes (1.0 kB) copied, 9.9167e-05 s, 10.3 MB/s++ dd if=/dev/urandom of=second bs=1024 count=1+1+0 records in+1+0 records out+1024 bytes (1.0 kB) copied, 0.000241635 s, 4.2 MB/s++ git annex add .+add first (checksum...) ok+add second (checksum...) ok+(Recording state in git...)++ git commit -am added+[master (root-commit) 5078564] added+ 2 files changed, 2 insertions(+)+ create mode 120000 first+ create mode 120000 second++ git mv first e++ mkdir x++ git mv second x++ git commit -m moved+fix x/second ok+(Recording state in git...)+[master 422492d] moved+ 3 files changed, 1 insertion(+), 1 deletion(-)+ rename first => e (100%)+ delete mode 120000 second+ create mode 120000 x/second++ cd /tmp/b/annex++ git annex sync a+(merging origin/git-annex into git-annex...)+(Recording state in git...)+commit +ok+git-annex: no branch is checked out++ git annex get .+-------------------++The last "git annex get ." does not retrieve the files in /tmp/a/annex ... why?+I guess the issue starts when cloning /tmp/a/annex where no commit was done.++Emanuele++PS: I'm using git v1.7.9.5 (ubuntu 12.04) and the latest git-annex static binary+downloaded a few minutes ago from the git-annex website.+
+ doc/forum/preferred_content.mdwn view
@@ -0,0 +1,11 @@+Hello all,++I'm trying to use "preferred content" with git-annex but I suspect that my version doesn't provide it.++I'm using Debian "wheezy" that packs git-annex 3.20120629.++I appreciate any help you can give.++Thanks.++Zaka.
+ doc/forum/speed_up_assistant_startup_on_large_repositories.mdwn view
@@ -0,0 +1,1 @@+Starting the assistant on a repository with a huge amount of files (f.e. `annexed files in working tree: 22087`) takes a very long time. Is there a way to speed it up? F.e. just checking the file stamps and comparing them with the last assistant run time? Checking if the files are modified could be done with the regular repository check. Thoughts?
doc/install/Debian.mdwn view
@@ -9,6 +9,10 @@ Note: This version does not include support for the [[assistant]]. A backport is available with the assistant and other new features. +Follow the instructions to [enable backports](http://backports.debian.org/Instructions/).++ sudo apt-get -t wheezy-backports install git-annex+ ## Debian 6.0 "squeeze" Follow the instructions to [enable backports](http://backports.debian.org/Instructions/).
+ doc/install/Ubuntu/comment_12_38f69dffe2db0d15e4c4e5cb47f40ef8._comment view
@@ -0,0 +1,8 @@+[[!comment format=mdwn+ username="https://www.google.com/accounts/o8/id?id=AItOawmNu4V5fvpLlBhaCUfXXOB0MI5NXwh8SkU"+ nickname="Adam"+ subject="Raring?"+ date="2013-11-01T20:28:04Z"+ content="""+I'm also on Raring and the latest version available is 3.20121112ubuntu4, nearly a year old. The PPA is only for Precise. The tarball is a daily snapshot, and I would much rather run a released version right now. What can I do? Can't the PPA be built automatically for Raring and Saucy?+"""]]
+ doc/install/cabal/comment_26_bd455c732639728bce2bfc39e32871d2._comment view
@@ -0,0 +1,8 @@+[[!comment format=mdwn+ username="http://joeyh.name/"+ ip="209.250.56.47"+ subject="comment 26"+ date="2013-11-01T16:33:25Z"+ content="""+@RaspberryPie that only affected builds without the webapp, in any case it's fixed now.+"""]]
+ doc/install/cabal/comment_27_c080e9239b6eec88d329c28da7bb4141._comment view
@@ -0,0 +1,17 @@+[[!comment format=mdwn+ username="RaspberryPie"+ ip="37.221.160.203"+ subject="comment 27"+ date="2013-11-02T12:52:18Z"+ content="""+Okay, the error doesn't show up anymore. I didn't even get to Cronner though, because this time I got a different error:++ Assistant/Alert.hs:195:20:+ Couldn't match expected type `Assistant ()' with actual type `()'+ Expected type: Maybe Remote -> Assistant ()+ Actual type: Maybe Remote -> ()+ In the expression: noop+ In an equation for `notFsckedNudge': notFsckedNudge _ = noop++This is from trying to compile 4.20131101 with `-f\"-webapp -webdav\"`+"""]]
+ doc/install/cabal/comment_28_15951dd070a675300420eea137a28ef9._comment view
@@ -0,0 +1,10 @@+[[!comment format=mdwn+ username="http://joeyh.name/"+ ip="209.250.56.47"+ subject="comment 28"+ date="2013-11-02T17:40:18Z"+ content="""+Unfortunate about that. I've fixed it in git.++(It would be best to file bug reports about build failures to avoid cluttering up this page.)+"""]]
doc/internals.mdwn view
@@ -16,7 +16,7 @@ [[key-value_backends|backends]]. The file inside also has the name of the key. This two-level structure is used because it allows the write bit to be removed from the subdirectories as well as from the files. That prevents accidentially-deleting or changing the file contents.+deleting or changing the file contents. See [[permissions]] for details. In [[direct_mode]], file contents are not stored in here, and instead are stored directly in the file. However, the same symlinks are still
+ doc/internals/lockdown.mdwn view
@@ -0,0 +1,44 @@+Object files stored in `.git/annex/objects` are each put in their own directory.+This allows the write bit to be removed from both the file, and its directory,+which prevents accidentially deleting or changing the file contents.++The reasoning for doing this follows:++Normally with git, once you have committed a file, editing the file in the+working tree cannot cause you to lose the committed version. This is an+important property of git. Of course you can `rm -rf .git` and delete+commits if you like (before you've pushed them). But you can't lose a+committed version of the file because of something you do with the working+tree version.++It's easy for git to do this, because committing a file makes a copy of it.+But git-annex does not make a local copy of a file added to it, because+the file could be very large.++So, it's important for git-annex to find another way to preserve the expected+property that once committed, you cannot accidentially lose a file.+The most important protection it makes is just to remove the write bit of+the file. Thus preventing programs from modifying it.++But, that does not prevent any program that might follow the symlink and+delete the symlinked file. This might seem an unlikely thing for a program to+do at first, but consider a command like:+`tar cf foo.tar foo --remove-files --dereference`++When I tested this, I didn't know if it would remove the file foo symlinked+to or not! It turned out that my tar doesn't remove it. But it could+have easily went the other way.++Rather than needing to worry about every possible program that might+decide to do something like this, git-annex removes the write bit from the+directory containing the annexed object, as well as removing the write+bit from the file. (The only bad consequence of this is that `rm -rf .git`+doesn't work unless you first run `chmod -R +w .git`)++----++It's known that this lockdown mechanism is incomplete. The worst hole in+it is that if you explicitly run `chmod +w` on an annexed file in the working+tree, this follows the symlink and allows writing to the file. It would be+better to make the files fully immutable. But most systems either don't+support immutable attributes, or only let root make files immutable.
− doc/news/version_4.20130827.mdwn
@@ -1,27 +0,0 @@-git-annex 4.20130827 released with [[!toggle text="these changes"]]-[[!toggleable text="""- * Youtube support! (And 53 other video hosts). When quvi is installed,- git-annex addurl automatically uses it to detect when an page is- a video, and downloads the video file.- * web special remote: Also support using quvi, for getting files,- or checking if files exist in the web.- * unused: Is now a minimum of 30 times faster, and typically many- more times than that (when a repository has several branches).- (Thanks, guilhem for the patch.)- * unused: Fix bugs in two edge cases involving manually staged changes.- (Thanks, guilhem for the patch.)- * Android: Fix bug in terminal app that caused it to spin using much- CPU and battery. This problem was introduced in version 4.20130601.- * sync, merge: Bug fix: Don't try to merge into master when in a bare repo.- * import: Add options to control handling of duplicate files:- --duplicate, --deduplicate, and --clean-duplicates- * mirror: New command, makes two repositories contain the same set of files.- * Set --clobber when running wget to ensure resuming works properly.- * Unescape characters in 'file://...' URIs. (Thanks, guilhem for the patch.)- * Better error message when trying to use a git remote that has annex.ignore- set.- * Fix bug that caused typechanged symlinks to be assumed to be unlocked- files, so they were added to the annex by the pre-commit hook.- * Debian: Run the builtin test suite as an autopkgtest.- * Debian: Recommend ssh-askpass, which ssh will use when the assistant- is run w/o a tty. Closes: #[719832](http://bugs.debian.org/719832)"""]]
+ doc/news/version_4.20131106.mdwn view
@@ -0,0 +1,18 @@+git-annex 4.20131106 released with [[!toggle text="these changes"]]+[[!toggleable text="""+ * Improve local pairing behavior when two computers both try to start+ the pairing process separately.+ * sync: Work even when the local git repository is new and empty,+ with no master branch.+ * gcrypt, bup: Fix bug that prevented using these special remotes+ with encryption=pubkey.+ * Fix enabling of gcrypt repository accessed over ssh;+ git-annex-shell gcryptsetup had a bug that caused it to fail+ with permission denied.+ * Fix zombie process that occurred when switching between repository+ views in the webapp.+ * map: Work when there are gcrypt remotes.+ * Fix build w/o webapp.+ * Fix exception handling bug that could cause .git/annex/index to be used+ for git commits outside the git-annex branch. Known to affect git-annex+ when used with the git shipped with Ubuntu 13.10."""]]
doc/special_remotes/gcrypt.mdwn view
@@ -1,4 +1,4 @@-[git-remote-gcrypt](https://github.com/blake2-ppc/git-remote-gcrypt/)+[git-remote-gcrypt](https://github.com/joeyh/git-remote-gcrypt/) adds support for encrypted remotes to git. The git-annex gcrypt special remote allows git-annex to also store its files in such repositories. Naturally, git-annex encrypts the files it stores too, so everything
doc/tips/fully_encrypted_git_repositories_with_gcrypt.mdwn view
@@ -1,4 +1,4 @@-[git-remote-gcrypt](https://github.com/blake2-ppc/git-remote-gcrypt/)+[git-remote-gcrypt](https://github.com/joeyh/git-remote-gcrypt/) adds support for encrypted remotes to git. The git-annex [[gcrypt special remote|special_remotes/gcrypt]] allows git-annex to also store its files in such repositories. Naturally, git-annex encrypts@@ -28,12 +28,21 @@ First, you need to set up a gpg key. You might consider generating a special purpose key just for this use case, since you may end up wanting to put the key on multiple machines that you would not trust with your-main gpg key. You need to tell git-annex the keyid of the key.+main gpg key. +You need to tell git-annex the keyid of the key when setting up the+encrypted repository:+ git init --bare /mnt/encryptedbackup git annex initremote encryptedbackup type=gcrypt gitrepo=/mnt/encryptedbackup keyid=$mykey git annex sync encryptedbackup++Now you can copy (or even move) files to the repository. After+sending files to it, you'll probably want to do a sync, which pushes+the git repository changes to it as well.+ git annex copy --to encryptedbackup ...+ git annex sync encryptedbackup Note that if you lose your gpg key, it will be *impossible* to get the data out of your encrypted backup. You need to find a secure way to store a@@ -66,16 +75,22 @@ While this will work without git-annex being installed on the server, it is recommended to have it installed.) -Now, in your existing git-annex repository:+Now, in your existing git-annex repository, set up the encrypted remote: git annex initremote encryptedrepo type=gcrypt gitrepo=ssh://my.server/home/me/encryptedrepo keyid=$mykey git annex sync encryptedrepo- git annex copy --to encryptedrepo ... If you're going to be sharing this repository with others, be sure to also include their keyids, by specifying keyid= repeatedly. -Now that the repo is set up, anyone who has access to it and has one of the keys+Now you can copy (or even move) files to the repository. After+sending files to it, you'll probably want to do a sync, which pushes+the git repository changes to it as well.++ git annex copy --to encryptedrepo ...+ git annex sync encryptedbackup++Anyone who has access to the repo it and has one of the keys used to encrypt it can check it out: git clone gcrypt::ssh://my.server/home/me/encryptedrepo myrepo@@ -91,7 +106,7 @@ only used to store your git repository itself. git remote add encrypted gcrypt::ssh://hostingsite/myrepo.git- git config git push encrypted master git-annex+ git push encrypted master git-annex Now you can carry on using git-annex with your new repository. For example, `git annex sync` will sync with it.
+ doc/todo/Option_for_browser_to_launch_webapp_with.mdwn view
@@ -0,0 +1,7 @@+Firefox is my default browser, but as we all know, it doesn't load quickly. If I don't have Firefox running but I want to access the git-annex webapp, I'd rather launch the webapp in some small, quick browser like QupZilla than wait for Firefox to load.++Could git-annex have a setting, maybe a "webapp --browser" option and/or a setting in the config file, to specify the browser to launch?++> git-annex uses the standard `git config web.browser` if you set it.+> [[done]]+> --[[Joey]]
+ doc/todo/Show_repo_type_in_repo_list.mdwn view
@@ -0,0 +1,1 @@+It would be helpful to show each repo's type in the list.
+ doc/todo/Sync_repo_names__63__.mdwn view
@@ -0,0 +1,10 @@+It's very confusing to me that the same repo viewed from different client systems can have different names and descriptions. This implies that making changes to a remote repo from one system only affects how that system sees the repo, but it seems to affect how the entire git-annex "pair" or "network of repos" sees it.++I think it would be good if the names and descriptions of repos were synced across clients.++> The descriptions of repositories are synced. (They're stored in git-annex:uuid.log)+> +> git allows for the same repository to be referred to using as many different remote names as you want to set up. git-annex inherits this,+> and I can't see this changing; there are very good reasons for remotes to+> have this flexability. [[done]]+> --[[Joey]]
doc/todo/direct_mode_guard.mdwn view
@@ -20,3 +20,63 @@ something like `git annex git add` --[[Joey]]++----++Or, no git wrapper could be provided. Limit the commands to only git-annex+commands. This should be all that is needed to manage a direct mode+repository simply, and if the user is doing something complicated that+needs git access, they can set `GIT_DIR=.git-annex` and be careful not to+shoot off their foot. (Or can just switch to indirect mode!)++This wins on simplicity, and if it's the wrong choice a git wrapper+can be added later. --[[Joey]]++---++Implementation: Pretty simple really. Already did the hard lifting to+support `GIT_DIR`, so only need to override the default git directory+in direct mode when that's not set to `.git-annex`.++A few things hardcode ".git", including Assistant.Threads.Watcher.ignored+and `Seek.withPathContents`, and parts of `Git.Construct`.++---++Transition: git-annex should detect when it's in a direct mode repository+with a .git directory and no .git-annex directory, and transparently+do the move to transition to the new scheme. (And remember that `git annex+indirect` needs to move it back.)++# alternative approach: move index++Rather than moving .git, maybe move .git/index?++This would cause git to think that all files in the tree were deleted.+So git commit -a would make a commit that removes them from git history.+But, the files in the work tree are not touched by this.++Also, git checkout, git merge, and other things that manipulate the work+tree refuse to do anything if they'd change a file that they think is+untracked.++Hmm, this does't solve the user accidentially running git add on an annexed+file; the whole file still gets added.++# alternative approach: fake bare repo++Set core.bare to true. This prevents all work tree operations, +so prevents any foot shooting. It still lets the user run commands like+git log, even on files in the tree, and git fetch, and push, and git+config, etc.++Even better, it integrates with other tools, like `mr`, so they know+it's a git repo.++This seems really promising. But of course, git-annex has its own set of+behaviors in a bare repo, so will need to recognise that this repo is not+really bare, and avoid them.++(Git may also have some bare repo behaviors that are unwanted. One example+is that git allows pushes to the current branch in a bare repo, +even when `receive.denyCurrentBranch` is set.)
+ doc/todo/wishlist:_annex.largefiles_configuration_in_webapp_and_sync.mdwn view
@@ -0,0 +1,1 @@+The `annex.largefiles` feature is very nice to mix annexed files with normal git managed files. I'd like to be able to configure this setting on the webapp and that the configuration directive would be synchronized accross all remotes.
+ doc/todo/wishlist:_encrypted_git_remote_on_hosting_site_from_webapp.mdwn view
@@ -0,0 +1,1 @@+It would be great to be able to do **private encrypted git remote on hosting site** and **multiuser encrypted git remote on hosting site** as explained in [[tips/fully encrypted git repositories with gcrypt]] through the webapp. I think it's a pretty common usecase that can be very useful for people not owning a proper server.
+ doc/todo/wishlist_degraded_files.mdwn view
@@ -0,0 +1,5 @@+This is an idea to have a small placeholder file that is put into+place when the file's actual content is not available in the local+annex.++Details being discussed here: <http://bugs.debian.org/728552>
git-annex.cabal view
@@ -1,5 +1,5 @@ Name: git-annex-Version: 4.20131101+Version: 4.20131106 Cabal-Version: >= 1.8 License: GPL-3 Maintainer: Joey Hess <joey@kitenet.net>
templates/configurators/newrepository.hamlet view
@@ -2,6 +2,11 @@ <h2> Add another local repository <p>+ <i .icon-asterisk></i> Do you want to back your repository up to a #+ removable drive?+ <a .btn .btn-primary href="@{AddDriveR}">+ Make a repository on a Removable Drive+ <p> Where do you want to put this new repository? <form method="post" .form-inline enctype=#{enctype}> ^{form}
templates/documentation/repogroup.hamlet view
@@ -31,8 +31,9 @@ Next we come to the <b>archive repositories</b>. The archive repositories coordinate together, so that each file is # archived in only one place. When you move files into a folder named #- "archive", they'll be moved to an archive repository, and removed from #- all your client repositories. This is handy if you have old files #+ "archive", the content of the files will be removed from all your #+ client repositories (either immediately or as soon as an archive #+ repository gets a copy of the file). This is handy if you have old files # you don't need anymore, but want to keep archived for later. # When you copy or move a file out of an "archive" folder, it'll be # retrieved from the archive repository.@@ -40,7 +41,8 @@ The <b>small archive repositories</b> are like other archive # repositories, but smaller. While archive repositories normally accumulate # every file they can, small archive repositories only accumulate files #- once you put them in an "archive" directory.+ after you've put them in an "archive" directory. They otherwise behave #+ the same <p> Sometimes useful for devices like cameras are the # <b>source repositories</b>. Repositories in this group only retain #