Don't fail if the duplicate is the last element
This commit is contained in:
parent
f575dcdad6
commit
9c464ec9fc
@ -159,6 +159,9 @@ updateSettings usl usr =
|
|||||||
--[ Entrypoint ]--
|
--[ Entrypoint ]--
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
|
data Duplicate = Duplicate -- ^ there is a duplicate somewhere in the middle
|
||||||
|
| NoDuplicate -- ^ there is no duplicate
|
||||||
|
| DuplicateLast -- ^ there's a duplicate, but it's the last element
|
||||||
|
|
||||||
|
|
||||||
config :: forall m. ( Monad m
|
config :: forall m. ( Monad m
|
||||||
@ -207,16 +210,20 @@ config configCommand settings userConf keybindings runLogger = case configComman
|
|||||||
r <- runE @'[DuplicateReleaseChannel] $ do
|
r <- runE @'[DuplicateReleaseChannel] $ do
|
||||||
case urlSource settings of
|
case urlSource settings of
|
||||||
AddSource xs -> do
|
AddSource xs -> do
|
||||||
when (not force && Right uri `elem` xs) $ throwE (DuplicateReleaseChannel uri)
|
case checkDuplicate xs (Right uri) of
|
||||||
lift $ doConfig (defaultUserSettings { uUrlSource = Just $ AddSource (appendUnique xs (Right uri)) })
|
Duplicate
|
||||||
pure ()
|
| not force -> throwE (DuplicateReleaseChannel uri)
|
||||||
|
DuplicateLast -> pure ()
|
||||||
|
_ -> lift $ doConfig (defaultUserSettings { uUrlSource = Just $ AddSource (appendUnique xs (Right uri)) })
|
||||||
GHCupURL -> do
|
GHCupURL -> do
|
||||||
lift $ doConfig (defaultUserSettings { uUrlSource = Just $ AddSource [Right uri] })
|
lift $ doConfig (defaultUserSettings { uUrlSource = Just $ AddSource [Right uri] })
|
||||||
pure ()
|
pure ()
|
||||||
OwnSource xs -> do
|
OwnSource xs -> do
|
||||||
when (not force && Right uri `elem` xs) $ throwE (DuplicateReleaseChannel uri)
|
case checkDuplicate xs (Right uri) of
|
||||||
lift $ doConfig (defaultUserSettings { uUrlSource = Just $ OwnSource (appendUnique xs (Right uri)) })
|
Duplicate
|
||||||
pure ()
|
| not force -> throwE (DuplicateReleaseChannel uri)
|
||||||
|
DuplicateLast -> pure ()
|
||||||
|
_ -> lift $ doConfig (defaultUserSettings { uUrlSource = Just $ OwnSource (appendUnique xs (Right uri)) })
|
||||||
OwnSpec spec -> do
|
OwnSpec spec -> do
|
||||||
lift $ doConfig (defaultUserSettings { uUrlSource = Just $ OwnSource [Left spec, Right uri] })
|
lift $ doConfig (defaultUserSettings { uUrlSource = Just $ OwnSource [Left spec, Right uri] })
|
||||||
pure ()
|
pure ()
|
||||||
@ -228,6 +235,12 @@ config configCommand settings userConf keybindings runLogger = case configComman
|
|||||||
pure $ ExitFailure 15
|
pure $ ExitFailure 15
|
||||||
|
|
||||||
where
|
where
|
||||||
|
checkDuplicate :: Eq a => [a] -> a -> Duplicate
|
||||||
|
checkDuplicate xs a
|
||||||
|
| last xs == a = DuplicateLast
|
||||||
|
| a `elem` xs = Duplicate
|
||||||
|
| otherwise = NoDuplicate
|
||||||
|
|
||||||
-- appends the element to the end of the list, but also removes it from the existing list
|
-- appends the element to the end of the list, but also removes it from the existing list
|
||||||
appendUnique :: Eq a => [a] -> a -> [a]
|
appendUnique :: Eq a => [a] -> a -> [a]
|
||||||
appendUnique xs' e = go xs'
|
appendUnique xs' e = go xs'
|
||||||
|
Loading…
Reference in New Issue
Block a user