fbrnch-1.8.1: src/Cmd/Pull.hs
module Cmd.Pull (
pullPkgs,
PullOpt(..)
)
where
import Control.Exception.Extra (retry)
import Branches
import Common
--import Common.System (error')
import Git
import Package
data PullOpt =
PullLenient | PullNoFetch | PullStash | PullRebase
deriving Eq
-- FIXME pulling more than one branch
-- FIXME print nvr after pulling or old -> new
pullPkgs :: Maybe PullOpt -> (BranchesReq, [String]) -> IO ()
pullPkgs pullopt (breq,args) =
withPackagesByBranches
(if length args > 1 then HeaderMust else HeaderMay)
False
(case pullopt of
Just PullLenient -> Nothing
Just PullRebase -> Nothing -- FIXME
Just PullNoFetch -> cleanGit
Just PullStash -> stashGitFetch
Nothing -> cleanGitFetch)
AnyNumber pullPkg (breq,args)
where
pullPkg :: Package -> AnyBranch -> IO ()
pullPkg pkg br =
if pullopt == Just PullLenient
then do
haveGit <- isPkgGitRepo
if haveGit
then gitFetchSilent True
else putStrLn $ "ignoring" +-+ unPackage pkg
else doPullPkg
where
-- FIXME using rebase for branched may be risky
doPullPkg :: IO ()
doPullPkg = do
current <- getReleaseBranchWarn
unless (breq == Branches [] || RelBranch current == br) $
gitSwitchBranch br
retry 2 $
if pullopt == Just PullRebase
then git_ "pull" ["origin"]
else gitMergeOrigin current