refactor getCurrentBranch
Both Command.Sync and Annex.Ingest had their own versions of this. The one in Annex.Ingest used Git.Branch.currentUnsafe, but does not seem to need it. That is only checking to see if it's in an adjusted unlocked branch, and when in an adjusted branch, the branch does in fact exist, so the added check that Git.Branch.current does is fine. This commit was sponsored by Denis Dzyubenko on Patreon.
This commit is contained in:
parent
c94e62cab5
commit
8be5a7269a
15 changed files with 228 additions and 169 deletions
41
Annex/CurrentBranch.hs
Normal file
41
Annex/CurrentBranch.hs
Normal file
|
@ -0,0 +1,41 @@
|
|||
{- currently checked out branch
|
||||
-
|
||||
- Copyright 2018 Joey Hess <id@joeyh.name>
|
||||
-
|
||||
- Licensed under the GNU AGPL version 3 or higher.
|
||||
-}
|
||||
|
||||
module Annex.CurrentBranch where
|
||||
|
||||
import Annex.Common
|
||||
import Types.AdjustedBranch
|
||||
import Annex.AdjustedBranch.Name
|
||||
import qualified Annex
|
||||
import qualified Git
|
||||
import qualified Git.Branch
|
||||
|
||||
type CurrBranch = (Maybe Git.Branch, Maybe Adjustment)
|
||||
|
||||
{- Gets the currently checked out branch.
|
||||
- When on an adjusted branch, gets the original branch, and the adjustment.
|
||||
-
|
||||
- Cached for speed.
|
||||
-
|
||||
- Until a commit is made in a new repository, no branch is checked out.
|
||||
- Since git-annex may make the first commit, this does not cache
|
||||
- the absence of a branch.
|
||||
-}
|
||||
getCurrentBranch :: Annex CurrBranch
|
||||
getCurrentBranch = maybe cache return
|
||||
=<< Annex.getState Annex.cachedcurrentbranch
|
||||
where
|
||||
cache = inRepo Git.Branch.current >>= \case
|
||||
Just b -> do
|
||||
let v = case adjustedToOriginal b of
|
||||
Nothing -> (Just b, Nothing)
|
||||
Just (adj, origbranch) ->
|
||||
(Just origbranch, Just adj)
|
||||
Annex.changeState $ \s ->
|
||||
s { Annex.cachedcurrentbranch = Just v }
|
||||
return v
|
||||
Nothing -> return (Nothing, Nothing)
|
Loading…
Add table
Add a link
Reference in a new issue