{-# LANGUAGE ExtendedDefaultRules #-} {-# LANGUAGE OverloadedStrings #-} {-# OPTIONS_GHC -fno-warn-type-defaults #-} module DeleteMerged ( deleteMerged , deleteDone ) where import Control.Monad (forM_) import Data.Function ((&)) import Data.Maybe (mapMaybe) import Data.Semigroup ((<>)) import qualified Data.Text as T import qualified Data.Text.IO as T import qualified Git import qualified GH import Shelly import Utils (Options, ourShell, setupNixpkgs) import qualified Data.Vector as V default (T.Text) -- | Delete the already merged branches both from local and remote repository deleteMerged :: Options -> IO () deleteMerged o = ourShell o $ do setupNixpkgs Git.fetch Git.cleanAndResetToMaster mergedRemoteBranches <- T.lines <$> cmd "git" "branch" "-ra" "--merged" let mergedRemoteAutoUpdateBranches = mergedRemoteBranches & filter ("origin/auto-update/" `T.isInfixOf`) & mapMaybe (T.stripPrefix "remotes/origin/" . T.strip) forM_ mergedRemoteAutoUpdateBranches $ \branch -> cmd "git" "push" "origin" (":" <> branch) mergedBranches <- T.lines <$> cmd "git" "branch" "-a" "--merged" let mergedAutoUpdateBranches = mergedBranches & filter ("auto-update/" `T.isInfixOf`) & map T.strip forM_ mergedAutoUpdateBranches $ \branch -> cmd "git" "branch" "-d" branch deleteDone :: Options -> IO () deleteDone o = ourShell o $ do setupNixpkgs Git.fetch Git.cleanAndResetToMaster result <- liftIO $ GH.closedAutoUpdateRefs o case result of Left error -> liftIO $ T.putStrLn error Right refs -> V.sequence_ (fmap (\r -> Git.deleteBranch ("auto-update/" <> r)) refs)