aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2011-06-24 11:59:34 -0400
committerGravatar Joey Hess <joey@kitenet.net>2011-06-24 11:59:34 -0400
commitad38c0dfadc0fc68ed6213c75541fe06c7caca2f (patch)
tree6bf8b56573d27fa3dff49fc088b2a7873009146d
parent50354a49163b8841af2024876a62e78b6caaa2b2 (diff)
better setup of git-annex branch pushing on upgrade
-rw-r--r--Branch.hs34
-rw-r--r--Upgrade/V2.hs41
-rw-r--r--doc/upgrades.mdwn1
3 files changed, 55 insertions, 21 deletions
diff --git a/Branch.hs b/Branch.hs
index fad024550..3f5e0ee1e 100644
--- a/Branch.hs
+++ b/Branch.hs
@@ -11,7 +11,10 @@ module Branch (
get,
change,
commit,
- files
+ files,
+ refExists,
+ hasOrigin,
+ name
) where
import Control.Monad (unless, when, liftM)
@@ -44,6 +47,10 @@ name = "git-annex"
fullname :: String
fullname = "refs/heads/" ++ name
+{- Branch's name in origin. -}
+originname :: String
+originname = "origin/" ++ name
+
{- Converts a fully qualified git ref into a short version for human
- consumptiom. -}
shortref :: String -> String
@@ -114,20 +121,14 @@ getCache file = getState >>= handle
{- Creates the branch, if it does not already exist. -}
create :: Annex ()
create = do
- exists <- refexists fullname
+ exists <- refExists fullname
unless exists $ do
g <- Annex.gitRepo
- inorigin <- refexists origin
- if inorigin
- then liftIO $ Git.run g "branch" [Param name, Param origin]
+ e <- hasOrigin
+ if e
+ then liftIO $ Git.run g "branch" [Param name, Param originname]
else withIndex' True $
liftIO $ GitUnionMerge.commit g "branch created" fullname []
- where
- origin = "origin/" ++ name
- refexists ref = do
- g <- Annex.gitRepo
- liftIO $ Git.runBool g "show-ref"
- [Param "--verify", Param "-q", Param ref]
{- Stages the journal, and commits staged changes to the branch. -}
commit :: String -> Annex ()
@@ -164,6 +165,17 @@ update = do
Annex.changeState $ \s -> s { Annex.branchstate = state { branchUpdated = True } }
invalidateCache
+{- Does origin/git-annex exist? -}
+hasOrigin :: Annex Bool
+hasOrigin = refExists originname
+
+{- Checks if a git ref exists. -}
+refExists :: String -> Annex Bool
+refExists ref = do
+ g <- Annex.gitRepo
+ liftIO $ Git.runBool g "show-ref"
+ [Param "--verify", Param "-q", Param ref]
+
{- Ensures that a given ref has been merged into the index. -}
updateRef :: String -> Annex (Maybe String)
updateRef ref
diff --git a/Upgrade/V2.hs b/Upgrade/V2.hs
index 2372edb3d..8eab236ff 100644
--- a/Upgrade/V2.hs
+++ b/Upgrade/V2.hs
@@ -9,8 +9,7 @@ module Upgrade.V2 where
import System.Directory
import System.FilePath
-import Control.Monad.State (liftIO)
-import Control.Monad.State (unless)
+import Control.Monad.State (unless, liftIO)
import List
import Data.Maybe
@@ -58,12 +57,7 @@ upgrade = do
unless bare $ gitAttributesUnWrite g
saveState
-
- unless bare $ do
- showLongNote $
- "git-annex branch created\n" ++
- "Now you should push the new branch: git push origin git-annex\n"
- showProgress
+ unless bare $ push
return True
@@ -90,6 +84,36 @@ logFiles :: FilePath -> Annex [FilePath]
logFiles dir = return . filter (".log" `isSuffixOf`)
=<< liftIO (getDirectoryContents dir)
+push :: Annex ()
+push = do
+ origin_master <- Branch.refExists "origin/master"
+ origin_gitannex <- Branch.hasOrigin
+ case (origin_master, origin_gitannex) of
+ (_, True) -> do
+ -- Merge in the origin's git-annex branch,
+ -- so that pushing the git-annex branch
+ -- will immediately work. Not pushed here,
+ -- because it's less obnoxious to let the user
+ -- push.
+ Branch.update
+ (True, False) -> do
+ -- push git-annex to origin, so that
+ -- "git push" will from then on
+ -- automatically push it
+ Branch.update -- just in case
+ showNote "pushing new git-annex branch to origin"
+ showProgress
+ g <- Annex.gitRepo
+ liftIO $ Git.run g "push" [Param "origin", Param Branch.name]
+ _ -> do
+ -- no origin exists, so just let the user
+ -- know about the new branch
+ Branch.update
+ showLongNote $
+ "git-annex branch created\n" ++
+ "Be sure to push this branch when pushing to remotes.\n"
+ showProgress
+
{- Old .gitattributes contents, not needed anymore. -}
attrLines :: [String]
attrLines =
@@ -110,4 +134,3 @@ stateDir :: FilePath
stateDir = addTrailingPathSeparator $ ".git-annex"
gitStateDir :: Git.Repo -> FilePath
gitStateDir repo = addTrailingPathSeparator $ Git.workTree repo </> stateDir
-
diff --git a/doc/upgrades.mdwn b/doc/upgrades.mdwn
index f83a8c947..337c65767 100644
--- a/doc/upgrades.mdwn
+++ b/doc/upgrades.mdwn
@@ -34,7 +34,6 @@ Example upgrade process:
git pull
git annex upgrade
git commit -m "upgrade v2 to v3"
- git push origin git-annex master
git gc
### v1 -> v2 (git-annex version 0.20110316)