sync: Work even when the local git repository is new and empty, with no master branch.

This commit is contained in:
Joey Hess 2013-11-02 15:29:38 -04:00
parent 43c47b6dbb
commit bc18cde325
3 changed files with 20 additions and 14 deletions

View file

@ -34,6 +34,5 @@ mergeBranch = do
mergeSynced :: CommandStart
mergeSynced = do
branch <- inRepo Git.Branch.current
prepMerge
maybe stop mergeLocal branch
mergeLocal =<< inRepo Git.Branch.current

View file

@ -45,13 +45,15 @@ seek rs = do
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 @@ commit = next $ next $ ifM isDirect
_ <- 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 @@ mergeLocal branch = go =<< needmerge
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 @@ updateBranch syncbranch g =
, 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 @@ mergeRemote remote b = case b of
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

2
debian/changelog vendored
View file

@ -2,6 +2,8 @@ git-annex (4.20131102) UNRELEASED; 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.
-- Joey Hess <joeyh@debian.org> Sat, 02 Nov 2013 14:54:36 -0400