Skip to content

Commit 34bf416

Browse files
authored
Update to GHC 9.2 and brick 1.5 (#26)
* Refactoring good amount of logic to work with `State` * Introducing some helpers for monadic operations and lenses * Reformat with fourmolu
1 parent dcf70b4 commit 34bf416

File tree

9 files changed

+439
-398
lines changed

9 files changed

+439
-398
lines changed

app/Git.hs

Lines changed: 64 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,61 +1,65 @@
1-
{-# OPTIONS_GHC -fno-warn-incomplete-uni-patterns #-}
2-
module Git
3-
( Branch(..)
4-
, checkout
5-
, deleteBranch
6-
, fetch
7-
, fullBranchName
8-
, isCommonBranch
9-
, isRemoteBranch
10-
, listBranches
11-
, rebaseInteractive
12-
, merge
13-
, toBranches
14-
) where
15-
16-
import Data.Char ( isSpace )
17-
import Data.List
18-
import System.Exit
19-
import System.Process
20-
21-
22-
data Branch = BranchLocal String
23-
| BranchCurrent String
24-
| BranchRemote String String
25-
deriving Eq
26-
27-
instance (Show Branch) where
28-
show (BranchLocal n ) = n
29-
show (BranchCurrent n ) = n <> "*"
1+
module Git (
2+
Branch (..),
3+
checkout,
4+
deleteBranch,
5+
fetch,
6+
fullBranchName,
7+
isCommonBranch,
8+
isRemoteBranch,
9+
listBranches,
10+
rebaseInteractive,
11+
merge,
12+
toBranches,
13+
) where
14+
15+
import Data.Char (isSpace)
16+
import Data.List
17+
import System.Exit
18+
import System.Process
19+
20+
data Branch
21+
= BranchLocal String
22+
| BranchCurrent String
23+
| BranchRemote String String
24+
deriving (Eq)
25+
26+
instance Show Branch where
27+
show (BranchLocal n) = n
28+
show (BranchCurrent n) = n <> "*"
3029
show (BranchRemote o n) = o <> "/" <> n
3130

3231
fetch :: IO String
3332
fetch = readGit ["fetch", "--all", "--prune"]
3433

3534
listBranches :: IO [Branch]
36-
listBranches = toBranches <$> readGit
37-
[ "branch"
38-
, "--list"
39-
, "--all"
40-
, "--sort=-committerdate"
41-
, "--no-column"
42-
, "--no-color"
43-
]
35+
listBranches =
36+
toBranches
37+
<$> readGit
38+
[ "branch"
39+
, "--list"
40+
, "--all"
41+
, "--sort=-committerdate"
42+
, "--no-column"
43+
, "--no-color"
44+
]
4445

4546
toBranches :: String -> [Branch]
4647
toBranches input = toBranch <$> filter validBranch (lines input)
47-
where validBranch b = not $ isHead b || isDetachedHead b || isNoBranch b
48+
where
49+
validBranch b = not $ isHead b || isDetachedHead b || isNoBranch b
4850

4951
toBranch :: String -> Branch
5052
toBranch line = mkBranch $ words $ dropWhile isSpace line
5153
where
5254
mkBranch ("*" : name : _) = BranchCurrent name
53-
mkBranch (name : _) = case stripPrefix "remotes/" name of
55+
mkBranch (name : _) = case stripPrefix "remotes/" name of
5456
Just rest -> parseRemoteBranch rest
55-
Nothing -> BranchLocal name
57+
Nothing -> BranchLocal name
5658
mkBranch [] = error "empty branch name"
5759
parseRemoteBranch str = BranchRemote remote name
58-
where (remote, _ : name) = span ('/' /=) str
60+
where
61+
(remote, rest) = span ('/' /=) str
62+
name = drop 1 rest
5963

6064
checkout :: Branch -> IO ExitCode
6165
checkout branch = spawnGit ["checkout", branchName branch]
@@ -71,8 +75,8 @@ merge branch = do
7175
spawnGit ["merge", fullBranchName branch]
7276

7377
deleteBranch :: Branch -> IO ExitCode
74-
deleteBranch (BranchCurrent _ ) = error "Cannot delete current branch"
75-
deleteBranch (BranchLocal n ) = spawnGit ["branch", "-D", n]
78+
deleteBranch (BranchCurrent _) = error "Cannot delete current branch"
79+
deleteBranch (BranchLocal n) = spawnGit ["branch", "-D", n]
7680
deleteBranch (BranchRemote o n) = spawnGit ["push", o, "--delete", n]
7781

7882
spawnGit :: [String] -> IO ExitCode
@@ -82,33 +86,33 @@ readGit :: [String] -> IO String
8286
readGit args = readProcess "git" args []
8387

8488
isCommonBranch :: Branch -> Bool
85-
isCommonBranch b =
86-
branchName b
87-
`elem` [ "master"
88-
, "main"
89-
, "dev"
90-
, "devel"
91-
, "develop"
92-
, "development"
93-
, "staging"
94-
, "trunk"
95-
]
96-
89+
isCommonBranch b = branchName b `elem` commonBranchNames
90+
where
91+
commonBranchNames =
92+
[ "master"
93+
, "main"
94+
, "dev"
95+
, "devel"
96+
, "develop"
97+
, "development"
98+
, "staging"
99+
, "trunk"
100+
]
97101

98102
isRemoteBranch :: Branch -> Bool
99103
isRemoteBranch (BranchRemote _ _) = True
100-
isRemoteBranch _ = False
104+
isRemoteBranch _ = False
101105

102106
--- Helper
103107

104108
branchName :: Branch -> String
105-
branchName (BranchCurrent n ) = n
106-
branchName (BranchLocal n ) = n
109+
branchName (BranchCurrent n) = n
110+
branchName (BranchLocal n) = n
107111
branchName (BranchRemote _ n) = n
108112

109113
fullBranchName :: Branch -> String
110-
fullBranchName (BranchCurrent n ) = n
111-
fullBranchName (BranchLocal n ) = n
114+
fullBranchName (BranchCurrent n) = n
115+
fullBranchName (BranchLocal n) = n
112116
fullBranchName (BranchRemote r n) = r <> "/" <> n
113117

114118
isHead :: String -> Bool

0 commit comments

Comments
 (0)