summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Remote/S3.hs37
-rw-r--r--doc/bugs/show_version_without_having_to_be_in_a_git_repo.mdwn11
2 files changed, 31 insertions, 17 deletions
diff --git a/Remote/S3.hs b/Remote/S3.hs
index 1d23b7d6f..2ef96dbda 100644
--- a/Remote/S3.hs
+++ b/Remote/S3.hs
@@ -272,26 +272,29 @@ s3Connection c = do
{- S3 creds come from the environment if set.
- Otherwise, might be stored encrypted in the remote's config. -}
s3GetCreds :: RemoteConfig -> Annex (Maybe (String, String))
-s3GetCreds c = do
- ak <- getEnvKey s3AccessKey
- sk <- getEnvKey s3SecretKey
- if null ak || null sk
- then do
+s3GetCreds c = maybe fromconfig (return . Just) =<< liftIO getenv
+ where
+ getenv = liftM2 (,)
+ <$> get s3AccessKey
+ <*> get s3SecretKey
+ where
+ get = catchMaybeIO . getEnv
+ setenv (ak, sk) = do
+ setEnv s3AccessKey ak True
+ setEnv s3SecretKey sk True
+ fromconfig = do
mcipher <- remoteCipher c
case (M.lookup "s3creds" c, mcipher) of
- (Just encrypted, Just cipher) -> do
- s <- liftIO $ withDecryptedContent cipher
- (return $ L.pack $ fromB64 encrypted)
- (return . L.unpack)
- let [ak', sk', _rest] = lines s
- liftIO $ do
- setEnv s3AccessKey ak True
- setEnv s3SecretKey sk True
- return $ Just (ak', sk')
+ (Just s3creds, Just cipher) ->
+ liftIO $ decrypt s3creds cipher
_ -> return Nothing
- else return $ Just (ak, sk)
- where
- getEnvKey s = liftIO $ catchDefaultIO (getEnv s) ""
+ decrypt s3creds cipher = do
+ [ak, sk, _rest] <- lines <$>
+ withDecryptedContent cipher
+ (return $ L.pack $ fromB64 s3creds)
+ (return . L.unpack)
+ setenv (ak, sk)
+ return $ Just (ak, sk)
{- Stores S3 creds encrypted in the remote's config if possible. -}
s3SetCreds :: RemoteConfig -> Annex RemoteConfig
diff --git a/doc/bugs/show_version_without_having_to_be_in_a_git_repo.mdwn b/doc/bugs/show_version_without_having_to_be_in_a_git_repo.mdwn
new file mode 100644
index 000000000..98b9ced22
--- /dev/null
+++ b/doc/bugs/show_version_without_having_to_be_in_a_git_repo.mdwn
@@ -0,0 +1,11 @@
+It'd be nice to be able to run "git annex version" -- and maybe some other
+commands, like "git annex" itself for the help text, without having to be
+inside a git repo. Right now it requires you to be in a git repo even if
+it's not a git-annex repo.
+
+> You need a newer verison of git-annex. --[[Joey]]
+
+ joey@gnu:/>git annex version
+ git-annex version: 3.20120124
+
+[[done]]