| 1 | |
| 2 | |
| 3 | |
| 4 | |
| 5 | |
| 6 | |
| 7 | |
| 8 | |
| 9 | |
| 10 | |
| 11 | |
| 12 | |
| 13 | |
| 14 | |
| 15 | |
| 16 | |
| 17 | |
| 18 |
|
| 19 | (define-module (test-import-git)
|
| 20 | #:use-module (git)
|
| 21 | #:use-module (guix git)
|
| 22 | #:use-module (guix tests)
|
| 23 | #:use-module (guix packages)
|
| 24 | #:use-module (guix import git)
|
| 25 | #:use-module ((guix import utils) #:select (find-version))
|
| 26 | #:use-module (guix git-download)
|
| 27 | #:use-module (guix tests git)
|
| 28 | #:use-module (srfi srfi-1)
|
| 29 | #:use-module (srfi srfi-64))
|
| 30 |
|
| 31 | |
| 32 |
|
| 33 | (test-begin "git")
|
| 34 |
|
| 35 | (define* (make-package directory version #:optional (properties '()))
|
| 36 | (dummy-package "test-package"
|
| 37 | (version version)
|
| 38 | (properties properties)
|
| 39 | (source
|
| 40 | (origin
|
| 41 | (method git-fetch)
|
| 42 | (uri (git-reference
|
| 43 | (url (string-append "file://" directory))
|
| 44 | (commit version)))
|
| 45 | (sha256
|
| 46 | (base32
|
| 47 | "0000000000000000000000000000000000000000000000000000"))))))
|
| 48 |
|
| 49 | (define (latest-git-tag-version package)
|
| 50 | (find-version (map car ((@@ (guix import git) get-package-tags) package))))
|
| 51 |
|
| 52 | (test-equal "latest-git-tag-version: no custom prefix, suffix, and delimiter"
|
| 53 | "1.0.1"
|
| 54 | (with-temporary-git-repository directory
|
| 55 | '((add "a.txt" "A")
|
| 56 | (commit "First commit")
|
| 57 | (tag "1.0.1" "Release 1.0.1"))
|
| 58 | (let ((package (make-package directory "1.0.0")))
|
| 59 | (latest-git-tag-version package))))
|
| 60 |
|
| 61 | (test-equal "latest-git-tag-version: custom prefix, no suffix and delimiter"
|
| 62 | "1.0.1"
|
| 63 | (with-temporary-git-repository directory
|
| 64 | '((add "a.txt" "A")
|
| 65 | (commit "First commit")
|
| 66 | (tag "prefix-1.0.1" "Release 1.0.1"))
|
| 67 | (let ((package (make-package directory "1.0.0"
|
| 68 | '((release-tag-prefix . "prefix-")))))
|
| 69 | (latest-git-tag-version package))))
|
| 70 |
|
| 71 | (test-equal "latest-git-tag-version: custom suffix, no prefix and delimiter"
|
| 72 | "1.0.1"
|
| 73 | (with-temporary-git-repository directory
|
| 74 | '((add "a.txt" "A")
|
| 75 | (commit "First commit")
|
| 76 | (tag "1.0.1-suffix-123" "Release 1.0.1"))
|
| 77 | (let ((package (make-package directory "1.0.0"
|
| 78 | '((release-tag-suffix . "-suffix-[0-9]*")))))
|
| 79 | (latest-git-tag-version package))))
|
| 80 |
|
| 81 | (test-equal "latest-git-tag-version: custom delimiter, no prefix and suffix"
|
| 82 | "2021.09.07"
|
| 83 | (with-temporary-git-repository directory
|
| 84 | '((add "a.txt" "A")
|
| 85 | (commit "First commit")
|
| 86 | (tag "2021-09-07" "Release 2021-09-07"))
|
| 87 | (let ((package (make-package directory "2021-09-06"
|
| 88 | '((release-tag-version-delimiter . "-")))))
|
| 89 | (latest-git-tag-version package))))
|
| 90 |
|
| 91 | (test-equal "latest-git-tag-version: empty delimiter, no prefix and suffix"
|
| 92 | "20210907"
|
| 93 | (with-temporary-git-repository directory
|
| 94 | '((add "a.txt" "A")
|
| 95 | (commit "First commit")
|
| 96 | (tag "20210907" "Release 20210907"))
|
| 97 | (let ((package (make-package directory "20210906"
|
| 98 | '((release-tag-version-delimiter . "")))))
|
| 99 | (latest-git-tag-version package))))
|
| 100 |
|
| 101 | (test-equal "latest-git-tag-version: custom prefix and suffix, no delimiter"
|
| 102 | "2.0.0"
|
| 103 | (with-temporary-git-repository directory
|
| 104 | '((add "a.txt" "A")
|
| 105 | (commit "First commit")
|
| 106 | (tag "Release-2.0.0suffix-1" "Release 2.0.0"))
|
| 107 | (let ((package (make-package directory "1.0.0"
|
| 108 | '((release-tag-prefix . "Release-")
|
| 109 | (release-tag-suffix . "suffix-[0-9]")))))
|
| 110 | (latest-git-tag-version package))))
|
| 111 |
|
| 112 | (test-equal "latest-git-tag-version: custom prefix, suffix, and delimiter"
|
| 113 | "2.0.0"
|
| 114 | (with-temporary-git-repository directory
|
| 115 | '((add "a.txt" "A")
|
| 116 | (commit "First commit")
|
| 117 | (tag "Release-2_0_0suffix-1" "Release 2.0.0"))
|
| 118 | (let ((package (make-package directory "1.0.0"
|
| 119 | '((release-tag-prefix . "Release-")
|
| 120 | (release-tag-suffix . "suffix-[0-9]")
|
| 121 | (release-tag-version-delimiter . "_")))))
|
| 122 | (latest-git-tag-version package))))
|
| 123 |
|
| 124 | (test-equal "latest-git-tag-version: only pre-releases available"
|
| 125 | #f
|
| 126 | (with-temporary-git-repository directory
|
| 127 | '((add "a.txt" "A")
|
| 128 | (commit "First commit")
|
| 129 | (tag "2.0.0-rc1" "Release candidate for 2.0.0"))
|
| 130 | (let ((package (make-package directory "1.0.0")))
|
| 131 | (latest-git-tag-version package))))
|
| 132 |
|
| 133 | (test-equal "latest-git-tag-version: accept pre-releases"
|
| 134 | "2.0.0-rc1"
|
| 135 | (with-temporary-git-repository directory
|
| 136 | '((add "a.txt" "A")
|
| 137 | (commit "First commit")
|
| 138 | (tag "2.0.0-rc1" "Release candidate for 2.0.0"))
|
| 139 | (let ((package (make-package directory "1.0.0"
|
| 140 | '((accept-pre-releases? . #t)))))
|
| 141 | (latest-git-tag-version package))))
|
| 142 |
|
| 143 | (test-equal "latest-git-tag-version: accept pre-releases, and custom prefix"
|
| 144 | "2.0.0-rc1"
|
| 145 | (with-temporary-git-repository directory
|
| 146 | '((add "a.txt" "A")
|
| 147 | (commit "First commit")
|
| 148 | (tag "version-2.0.0-rc1" "Release candidate for 2.0.0"))
|
| 149 | (let ((package (make-package directory "1.0.0"
|
| 150 | '((accept-pre-releases? . #t)
|
| 151 | (release-tag-prefix . "version-")))))
|
| 152 | (latest-git-tag-version package))))
|
| 153 |
|
| 154 | (test-equal "latest-git-tag-version: accept pre-releases, and custom suffix"
|
| 155 | "2.0.0-rc1"
|
| 156 | (with-temporary-git-repository directory
|
| 157 | '((add "a.txt" "A")
|
| 158 | (commit "First commit")
|
| 159 | (tag "2.0.0-rc1-suffix" "Release candidate for 2.0.0"))
|
| 160 | (let ((package (make-package directory "1.0.0"
|
| 161 | '((accept-pre-releases? . #t)
|
| 162 | (release-tag-suffix . "-suffix")))))
|
| 163 | (latest-git-tag-version package))))
|
| 164 |
|
| 165 | (test-equal "latest-git-tag-version: accept pre-releases, delimiter conflicts with pre-release part"
|
| 166 | "2.0.0_alpha"
|
| 167 | (with-temporary-git-repository directory
|
| 168 | '((add "a.txt" "A")
|
| 169 | (commit "First commit")
|
| 170 | (tag "2_0_0_alpha" "Alpha release for 2.0.0"))
|
| 171 | (let ((package (make-package directory "1.0.0"
|
| 172 | '((accept-pre-releases? . #t)
|
| 173 | (release-tag-version-delimiter . "_")))))
|
| 174 | (latest-git-tag-version package))))
|
| 175 |
|
| 176 | (test-equal "latest-git-tag-version: accept pre-releases, and custom suffix and prefix"
|
| 177 | "2.0.0-alpha"
|
| 178 | (with-temporary-git-repository directory
|
| 179 | '((add "a.txt" "A")
|
| 180 | (commit "First commit")
|
| 181 | (tag "prefix123-2.0.0-alpha-suffix" "Alpha release for 2.0.0"))
|
| 182 | (let ((package (make-package directory "1.0.0"
|
| 183 | '((accept-pre-releases? . #t)
|
| 184 | (release-tag-prefix . "prefix[0-9]{3}-")
|
| 185 | (release-tag-suffix . "-suffix")))))
|
| 186 | (latest-git-tag-version package))))
|
| 187 |
|
| 188 | (test-equal "latest-git-tag-version: accept pre-releases, and custom suffix, prefix, and delimiter"
|
| 189 | "2.0.0-alpha"
|
| 190 | (with-temporary-git-repository directory
|
| 191 | '((add "a.txt" "A")
|
| 192 | (commit "First commit")
|
| 193 | (tag "prefix123-2-0-0-alpha-suffix" "Alpha release for 2.0.0"))
|
| 194 | (let ((package (make-package directory "1.0.0"
|
| 195 | '((accept-pre-releases? . #t)
|
| 196 | (release-tag-prefix . "prefix[0-9]{3}-")
|
| 197 | (release-tag-suffix . "-suffix")
|
| 198 | (release-tag-version-delimiter . "-")))))
|
| 199 | (latest-git-tag-version package))))
|
| 200 |
|
| 201 | (test-equal "latest-git-tag-version: accept pre-releases, no delimiter, and custom suffix, prefix"
|
| 202 | "2alpha"
|
| 203 | (with-temporary-git-repository directory
|
| 204 | '((add "a.txt" "A")
|
| 205 | (commit "First commit")
|
| 206 | (tag "prefix123-2alpha-suffix" "Alpha release for version 2"))
|
| 207 | (let ((package (make-package directory "1.0.0"
|
| 208 | '((accept-pre-releases? . #t)
|
| 209 | (release-tag-prefix . "prefix[0-9]{3}-")
|
| 210 | (release-tag-suffix . "-suffix")
|
| 211 | (release-tag-version-delimiter . "")))))
|
| 212 | (latest-git-tag-version package))))
|
| 213 |
|
| 214 | (test-equal "latest-git-tag-version: no tags found"
|
| 215 | #f
|
| 216 | (with-temporary-git-repository directory
|
| 217 | '((add "a.txt" "A")
|
| 218 | (commit "First commit"))
|
| 219 | (let ((package (make-package directory "1.0.0")))
|
| 220 | (latest-git-tag-version package))))
|
| 221 |
|
| 222 | (test-equal "latest-git-tag-version: no valid tags found"
|
| 223 | #f
|
| 224 | (with-temporary-git-repository directory
|
| 225 | '((add "a.txt" "A")
|
| 226 | (commit "First commit")
|
| 227 | (tag "Test" "Test tag"))
|
| 228 | (let ((package (make-package directory "1.0.0")))
|
| 229 | (latest-git-tag-version package))))
|
| 230 |
|
| 231 | (test-equal "latest-git-tag-version: prefix contains pre-release words"
|
| 232 | "1.0.1"
|
| 233 | (with-temporary-git-repository directory
|
| 234 | '((add "a.txt" "A")
|
| 235 | (commit "First commit")
|
| 236 | (tag "libdevx-1.0.1" "Release 1.0.1"))
|
| 237 | (let ((package (make-package directory "1.0.0")))
|
| 238 | (latest-git-tag-version package))))
|
| 239 |
|
| 240 | (test-end "git")
|