Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
## Changes in 0.34.5
- Support deeper subdirectory for github

## Changes in 0.34.4
- Render `default-extensions` / `other-extensions` line-separated
- Compatibility with `Cabal-3.4.0.0`
Expand Down
2 changes: 1 addition & 1 deletion hpack.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ cabal-version: 1.12
-- see: https://github.com/sol/hpack

name: hpack
version: 0.34.4
version: 0.34.5
synopsis: A modern format for Haskell packages
description: See README at <https://github.com/sol/hpack#readme>
category: Development
Expand Down
2 changes: 1 addition & 1 deletion package.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: hpack
version: 0.34.4
version: 0.34.5
synopsis: A modern format for Haskell packages
description: See README at <https://github.com/sol/hpack#readme>
maintainer: Simon Hengel <sol@typeful.net>
Expand Down
35 changes: 31 additions & 4 deletions src/Hpack/Config.hs
Original file line number Diff line number Diff line change
Expand Up @@ -583,10 +583,37 @@ data GitHub = GitHub {
instance FromValue GitHub where
fromValue v = do
input <- fromValue v
case map T.unpack $ T.splitOn "/" input of
[owner, repo, subdir] -> return $ GitHub owner repo (Just subdir)
[owner, repo] -> return $ GitHub owner repo Nothing
_ -> fail $ "expected owner/repo or owner/repo/subdir, but encountered " ++ show input
let parsed = case map T.unpack $ T.splitOn "/" input of
-- Bad: empty: ""
[] ->
Nothing

-- Bad: starts with a slash: "/..."
"" : _rest ->
Nothing

-- Bad: starts with an URL-like protocol: "https:...", "git:..."
proto : _rest | last proto == ':' ->
Nothing

-- Bad: single path piece: "sol"
[_owner] ->
Nothing

-- Good: "sol/hpack"
[owner, repo] ->

Just $ GitHub owner repo Nothing

-- Good: "sol/hpack/subdir", "sol/hpack/deep/subdir/..."
owner : repo : subdirs ->
Just $ GitHub owner repo (Just $ intercalate "/" subdirs)

case parsed of
Nothing ->
fail $ "expected \"owner/repo\" or \"owner/repo/subdir\", but encountered " ++ show input
Just ok ->
return ok

data DefaultsConfig = DefaultsConfig {
defaultsConfigDefaults :: Maybe (List Defaults)
Expand Down