Skip to content

Commit aecc67a

Browse files
committed
Add support for Tangled ATproto-based code repositories
First OCaml package using this service is up in opam-repo at: ocaml/opam-repository#28338 Signed-off-by: Anil Madhavapeddy <[email protected]>
1 parent baef4c1 commit aecc67a

File tree

5 files changed

+53
-2
lines changed

5 files changed

+53
-2
lines changed

doc/reference/dune-project/source.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ source
2828
- ``(sourcehut user/repo)``
2929
* - `Codeberg <https://codeberg.org>`_
3030
- ``(codeberg user/repo)`` *(New in 3.17)*
31+
* - `Tangled <https://tangled.sh>`_
32+
- ``(tangled @user.domain/repo)`` *(New in 3.20)*
3133

3234
Examples:
3335

src/dune_lang/source_kind.ml

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,15 @@ module Host = struct
2020
| Gitlab of gitlab_repo
2121
| Sourcehut of user_repo
2222
| Codeberg of user_repo
23+
| Tangled of user_repo
2324

2425
let kind_string = function
2526
| Github _ -> "github"
2627
| Bitbucket _ -> "bitbucket"
2728
| Gitlab _ -> "gitlab"
2829
| Sourcehut _ -> "sourcehut"
2930
| Codeberg _ -> "codeberg"
31+
| Tangled _ -> "tangled"
3032
;;
3133

3234
let dyn_of_user_repo kind { user; repo } =
@@ -46,7 +48,8 @@ module Host = struct
4648
let kind = Dyn.string (kind_string repo) in
4749
match repo with
4850
| Gitlab gitlab_repo -> dyn_of_gitlab_repo kind gitlab_repo
49-
| Github user_repo | Bitbucket user_repo | Sourcehut user_repo | Codeberg user_repo ->
51+
| Github user_repo | Bitbucket user_repo | Sourcehut user_repo
52+
| Codeberg user_repo | Tangled user_repo ->
5053
dyn_of_user_repo kind user_repo
5154
;;
5255

@@ -56,6 +59,7 @@ module Host = struct
5659
| Gitlab _ -> "gitlab.com"
5760
| Sourcehut _ -> "sr.ht"
5861
| Codeberg _ -> "codeberg.org"
62+
| Tangled _ -> "tangled.sh"
5963
;;
6064

6165
let base_uri repo =
@@ -65,6 +69,7 @@ module Host = struct
6569
| Sourcehut { user; repo } -> sprintf "%s/~%s/%s" host user repo
6670
| Github { user; repo }
6771
| Bitbucket { user; repo }
72+
| Tangled { user; repo }
6873
| Gitlab (User_repo { user; repo })
6974
| Codeberg { user; repo } -> sprintf "%s/%s/%s" host user repo
7075
;;
@@ -78,6 +83,7 @@ module Host = struct
7883
| Gitlab _ as repo -> homepage repo ^ "/-/issues"
7984
| Sourcehut _ as repo -> add_https ("todo." ^ base_uri repo)
8085
| Codeberg _ as repo -> homepage repo ^ "/issues"
86+
| Tangled _ as repo -> homepage repo ^ "/issues"
8187
;;
8288

8389
let enum k =
@@ -88,6 +94,7 @@ module Host = struct
8894
; Bitbucket stub_user_repo
8995
; Sourcehut stub_user_repo
9096
; Codeberg stub_user_repo
97+
; Tangled stub_user_repo
9198
; Gitlab (User_repo stub_user_repo)
9299
; Gitlab stub_org_repo
93100
]
@@ -99,6 +106,7 @@ module Host = struct
99106
| Bitbucket _, [ user; repo ] -> Bitbucket { user; repo }, Some ((2, 8), name)
100107
| Sourcehut _, [ user; repo ] -> Sourcehut { user; repo }, Some ((3, 1), name)
101108
| Codeberg _, [ user; repo ] -> Codeberg { user; repo }, Some ((3, 17), name)
109+
| Tangled _, [ user; repo ] -> Tangled { user; repo }, Some ((3, 20), name)
102110
| Gitlab _, [ user; repo ] ->
103111
Gitlab (User_repo { user; repo }), Some ((2, 8), name)
104112
| Gitlab _, [ org; proj; repo ] ->
@@ -139,6 +147,7 @@ module Host = struct
139147
| Bitbucket { user; repo }
140148
| Gitlab (User_repo { user; repo })
141149
| Sourcehut { user; repo }
150+
| Tangled { user; repo }
142151
| Codeberg { user; repo } -> sprintf "%s/%s" user repo
143152
in
144153
let open Encoder in
@@ -151,6 +160,7 @@ module Host = struct
151160
let base = base_uri repo in
152161
match repo with
153162
| Sourcehut _ -> "git." ^ base
163+
| Tangled _ -> base
154164
| _ -> base ^ ".git"
155165
in
156166
"git+https://" ^ base_uri

src/dune_lang/source_kind.mli

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ module Host : sig
2020
| Gitlab of gitlab_repo
2121
| Sourcehut of user_repo
2222
| Codeberg of user_repo
23+
| Tangled of user_repo
2324

2425
val homepage : t -> string
2526
val bug_reports : t -> string

test/blackbox-tests/test-cases/project-source/source-stanza.t

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ the supported 'github', 'gitlab', 'sourcehut', and 'bitbucket'.
44
Test a generated 'github' user repo
55

66
$ cat > dune-project <<EOF
7-
> (lang dune 3.17)
7+
> (lang dune 3.20)
88
> (name foo)
99
> (generate_opam_files true)
1010
> (source (github user/repo))
@@ -64,6 +64,15 @@ Test a generated 'codeberg' user repo
6464
bug-reports: "https://codeberg.org/user/repo/issues"
6565
dev-repo: "git+https://codeberg.org/user/repo.git"
6666

67+
Test a generated 'tangled' user repo
68+
69+
$ sed -i -e '4s|.*|(source (tangled @user.domain/repo))|' dune-project
70+
$ dune build
71+
$ cat foo.opam | grep -i tangled.sh
72+
homepage: "https://tangled.sh/@user.domain/repo"
73+
bug-reports: "https://tangled.sh/@user.domain/repo/issues"
74+
dev-repo: "git+https://tangled.sh/@user.domain/repo"
75+
6776
Test that the creation of a source stanza of the form 'org/project/repo' is
6877
disallowed by any forge type other than gitlab and that associated error
6978
messages are provided
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
Test the tangled source type in project files.
2+
3+
$ cat >dune-project <<EOF
4+
> (lang dune 3.20)
5+
> (name foo)
6+
> (generate_opam_files true)
7+
> (source (tangled @anil.recoil.org/foo))
8+
> (package
9+
> (allow_empty)
10+
> (name foo))
11+
> EOF
12+
13+
$ dune build
14+
$ cat foo.opam | grep -i tangled.sh
15+
homepage: "https://tangled.sh/@anil.recoil.org/foo"
16+
bug-reports: "https://tangled.sh/@anil.recoil.org/foo/issues"
17+
dev-repo: "git+https://tangled.sh/@anil.recoil.org/foo"
18+
19+
The 'tangled' source kind is only supported in Dune lang >=3.20; check that
20+
Dune errors as expected with earlier Dune lang versions.
21+
22+
$ sed -i -e '1s|.*|(lang dune 3.16)|' dune-project
23+
$ dune build
24+
File "dune-project", line 4, characters 8-38:
25+
4 | (source (tangled @anil.recoil.org/foo))
26+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
27+
Error: Tangled is only available since version 3.20 of the dune language.
28+
Please update your dune-project file to have (lang dune 3.20).
29+
[1]

0 commit comments

Comments
 (0)