Skip to content

Commit 03554fa

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 47954ba commit 03554fa

File tree

5 files changed

+56
-3
lines changed

5 files changed

+56
-3
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.21)*
3133

3234
Examples:
3335

src/dune_lang/source_kind.ml

Lines changed: 14 additions & 2 deletions
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,8 +48,11 @@ 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 ->
50-
dyn_of_user_repo kind user_repo
51+
| Github user_repo
52+
| Bitbucket user_repo
53+
| Sourcehut user_repo
54+
| Codeberg user_repo
55+
| Tangled user_repo -> dyn_of_user_repo kind user_repo
5156
;;
5257

5358
let host_of_repo = function
@@ -56,6 +61,7 @@ module Host = struct
5661
| Gitlab _ -> "gitlab.com"
5762
| Sourcehut _ -> "sr.ht"
5863
| Codeberg _ -> "codeberg.org"
64+
| Tangled _ -> "tangled.sh"
5965
;;
6066

6167
let base_uri repo =
@@ -65,6 +71,7 @@ module Host = struct
6571
| Sourcehut { user; repo } -> sprintf "%s/~%s/%s" host user repo
6672
| Github { user; repo }
6773
| Bitbucket { user; repo }
74+
| Tangled { user; repo }
6875
| Gitlab (User_repo { user; repo })
6976
| Codeberg { user; repo } -> sprintf "%s/%s/%s" host user repo
7077
;;
@@ -78,6 +85,7 @@ module Host = struct
7885
| Gitlab _ as repo -> homepage repo ^ "/-/issues"
7986
| Sourcehut _ as repo -> add_https ("todo." ^ base_uri repo)
8087
| Codeberg _ as repo -> homepage repo ^ "/issues"
88+
| Tangled _ as repo -> homepage repo ^ "/issues"
8189
;;
8290

8391
let enum k =
@@ -88,6 +96,7 @@ module Host = struct
8896
; Bitbucket stub_user_repo
8997
; Sourcehut stub_user_repo
9098
; Codeberg stub_user_repo
99+
; Tangled stub_user_repo
91100
; Gitlab (User_repo stub_user_repo)
92101
; Gitlab stub_org_repo
93102
]
@@ -99,6 +108,7 @@ module Host = struct
99108
| Bitbucket _, [ user; repo ] -> Bitbucket { user; repo }, Some ((2, 8), name)
100109
| Sourcehut _, [ user; repo ] -> Sourcehut { user; repo }, Some ((3, 1), name)
101110
| Codeberg _, [ user; repo ] -> Codeberg { user; repo }, Some ((3, 17), name)
111+
| Tangled _, [ user; repo ] -> Tangled { user; repo }, Some ((3, 21), name)
102112
| Gitlab _, [ user; repo ] ->
103113
Gitlab (User_repo { user; repo }), Some ((2, 8), name)
104114
| Gitlab _, [ org; proj; repo ] ->
@@ -139,6 +149,7 @@ module Host = struct
139149
| Bitbucket { user; repo }
140150
| Gitlab (User_repo { user; repo })
141151
| Sourcehut { user; repo }
152+
| Tangled { user; repo }
142153
| Codeberg { user; repo } -> sprintf "%s/%s" user repo
143154
in
144155
let open Encoder in
@@ -151,6 +162,7 @@ module Host = struct
151162
let base = base_uri repo in
152163
match repo with
153164
| Sourcehut _ -> "git." ^ base
165+
| Tangled _ -> base
154166
| _ -> base ^ ".git"
155167
in
156168
"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.21)
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.21)
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.21; 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.21 of the dune language.
28+
Please update your dune-project file to have (lang dune 3.21).
29+
[1]

0 commit comments

Comments
 (0)