8be5a7269a
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.
41 lines
1.2 KiB
Haskell
41 lines
1.2 KiB
Haskell
{- 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)
|