diff options
author | Ludovic Courtès <ludo@gnu.org> | 2021-09-18 19:32:37 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2021-09-18 19:37:45 +0200 |
commit | 778c1fb4eabbb48c05f6c7555c89466d5249ebce (patch) | |
tree | 424272dff742ef12238aa4c9aed869590f6dcf4d /tests | |
parent | 59ee10754eddddb99e4a80b9e18aa12ed1b3d77a (diff) | |
download | guix-778c1fb4eabbb48c05f6c7555c89466d5249ebce.tar guix-778c1fb4eabbb48c05f6c7555c89466d5249ebce.tar.gz |
channels: 'channel-news-entry-commit' correctly resolves annotated tags.
Previously, 'channel-news-entry-commit' would return the tag ID rather
than the commit ID when the news entry was referred to via an annotated
tag.
Reported by Xinglu Chen <public@yoctocell.xyz>.
* guix/channels.scm (resolve-channel-news-entry-tag): Check whether the
reference points to annotated tag; resolve it if it does.
* tests/channels.scm ("channel-news, annotated tag"): New test.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/channels.scm | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/tests/channels.scm b/tests/channels.scm index 0264369d9e..3e82315b0c 100644 --- a/tests/channels.scm +++ b/tests/channels.scm @@ -408,6 +408,53 @@ '(#f "tag-for-first-news-entry"))))))) (unless (which (git-command)) (test-skip 1)) +(test-assert "channel-news, annotated tag" + (with-temporary-git-repository directory + `((add ".guix-channel" + ,(object->string + '(channel (version 0) + (news-file "news.scm")))) + (add "src/a.txt" "A") + (commit "first commit") + (tag "tag-for-first-news-entry" + "This is an annotated tag.") + (add "news.scm" + ,(lambda (repository) + (let ((previous + (reference-name->oid repository "HEAD"))) + (object->string + `(channel-news + (version 0) + (entry (tag "tag-for-first-news-entry") + (title (en "New file!")) + (body (en "Yeah, a.txt.")))))))) + (commit "second commit")) + (with-repository directory repository + (define (find-commit* message) + (oid->string (commit-id (find-commit repository message)))) + + (let ((channel (channel (url (string-append "file://" directory)) + (name 'foo))) + (commit1 (find-commit* "first commit")) + (commit2 (find-commit* "second commit"))) + (and (null? (channel-news-for-commit channel commit1)) + (lset= equal? + (map channel-news-entry-title + (channel-news-for-commit channel commit2)) + '((("en" . "New file!")))) + (lset= string=? + (map channel-news-entry-tag + (channel-news-for-commit channel commit2)) + (list "tag-for-first-news-entry")) + ;; This is an annotated tag, but 'channel-news-entry-commit' + ;; should give us the commit ID, not the ID of the annotated tag + ;; object. + (lset= string=? + (map channel-news-entry-commit + (channel-news-for-commit channel commit2)) + (list commit1))))))) + +(unless (which (git-command)) (test-skip 1)) (test-assert "latest-channel-instances, missing introduction for 'guix'" (with-temporary-git-repository directory '((add "a.txt" "A") |