Commit | Line | Data |
---|---|---|
873f6f13 LC |
1 | ;;; GNU Guix --- Functional package management for GNU |
2 | ;;; Copyright © 2019 Ludovic Courtès <ludo@gnu.org> | |
3 | ;;; | |
4 | ;;; This file is part of GNU Guix. | |
5 | ;;; | |
6 | ;;; GNU Guix is free software; you can redistribute it and/or modify it | |
7 | ;;; under the terms of the GNU General Public License as published by | |
8 | ;;; the Free Software Foundation; either version 3 of the License, or (at | |
9 | ;;; your option) any later version. | |
10 | ;;; | |
11 | ;;; GNU Guix is distributed in the hope that it will be useful, but | |
12 | ;;; WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 | ;;; GNU General Public License for more details. | |
15 | ;;; | |
16 | ;;; You should have received a copy of the GNU General Public License | |
17 | ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. | |
18 | ||
19 | (define-module (test-git) | |
20 | #:use-module (git) | |
21 | #:use-module (guix git) | |
22 | #:use-module (guix tests git) | |
23 | #:use-module (guix build utils) | |
24 | #:use-module (srfi srfi-1) | |
25 | #:use-module (srfi srfi-64)) | |
26 | ||
27 | ;; Test the (guix git) tools. | |
28 | ||
29 | (test-begin "git") | |
30 | ||
31 | ;; 'with-temporary-git-repository' relies on the 'git' command. | |
32 | (unless (which (git-command)) (test-skip 1)) | |
33 | (test-assert "commit-difference, linear history" | |
34 | (with-temporary-git-repository directory | |
35 | '((add "a.txt" "A") | |
36 | (commit "first commit") | |
37 | (add "b.txt" "B") | |
38 | (commit "second commit") | |
39 | (add "c.txt" "C") | |
40 | (commit "third commit") | |
41 | (add "d.txt" "D") | |
42 | (commit "fourth commit")) | |
43 | (with-repository directory repository | |
44 | (let ((commit1 (find-commit repository "first")) | |
45 | (commit2 (find-commit repository "second")) | |
46 | (commit3 (find-commit repository "third")) | |
47 | (commit4 (find-commit repository "fourth"))) | |
48 | (and (lset= eq? (commit-difference commit4 commit1) | |
49 | (list commit2 commit3 commit4)) | |
50 | (lset= eq? (commit-difference commit4 commit2) | |
51 | (list commit3 commit4)) | |
52 | (equal? (commit-difference commit3 commit2) | |
53 | (list commit3)) | |
54 | ||
55 | ;; COMMIT4 is not an ancestor of COMMIT1 so we should get the | |
56 | ;; empty list. | |
57 | (null? (commit-difference commit1 commit4))))))) | |
58 | ||
59 | (unless (which (git-command)) (test-skip 1)) | |
60 | (test-assert "commit-difference, fork" | |
61 | (with-temporary-git-repository directory | |
62 | '((add "a.txt" "A") | |
63 | (commit "first commit") | |
64 | (branch "devel") | |
65 | (checkout "devel") | |
66 | (add "devel/1.txt" "1") | |
67 | (commit "first devel commit") | |
68 | (add "devel/2.txt" "2") | |
69 | (commit "second devel commit") | |
70 | (checkout "master") | |
71 | (add "b.txt" "B") | |
72 | (commit "second commit") | |
73 | (add "c.txt" "C") | |
74 | (commit "third commit") | |
75 | (merge "devel" "merge") | |
76 | (add "d.txt" "D") | |
77 | (commit "fourth commit")) | |
78 | (with-repository directory repository | |
79 | (let ((master1 (find-commit repository "first commit")) | |
80 | (master2 (find-commit repository "second commit")) | |
81 | (master3 (find-commit repository "third commit")) | |
82 | (master4 (find-commit repository "fourth commit")) | |
83 | (devel1 (find-commit repository "first devel")) | |
84 | (devel2 (find-commit repository "second devel")) | |
85 | (merge (find-commit repository "merge"))) | |
86 | (and (equal? (commit-difference master4 merge) | |
87 | (list master4)) | |
88 | (lset= eq? (commit-difference master3 master1) | |
89 | (list master3 master2)) | |
90 | (lset= eq? (commit-difference devel2 master1) | |
91 | (list devel2 devel1)) | |
92 | ||
93 | ;; The merge occurred between MASTER2 and MASTER4 so here we | |
94 | ;; expect to see all the commits from the "devel" branch in | |
95 | ;; addition to those on "master". | |
96 | (lset= eq? (commit-difference master4 master2) | |
97 | (list master4 merge master3 devel1 devel2))))))) | |
98 | ||
785af04a LC |
99 | (unless (which (git-command)) (test-skip 1)) |
100 | (test-assert "commit-difference, excluded commits" | |
101 | (with-temporary-git-repository directory | |
102 | '((add "a.txt" "A") | |
103 | (commit "first commit") | |
104 | (add "b.txt" "B") | |
105 | (commit "second commit") | |
106 | (add "c.txt" "C") | |
107 | (commit "third commit") | |
108 | (add "d.txt" "D") | |
109 | (commit "fourth commit") | |
110 | (add "e.txt" "E") | |
111 | (commit "fifth commit")) | |
112 | (with-repository directory repository | |
113 | (let ((commit1 (find-commit repository "first")) | |
114 | (commit2 (find-commit repository "second")) | |
115 | (commit3 (find-commit repository "third")) | |
116 | (commit4 (find-commit repository "fourth")) | |
117 | (commit5 (find-commit repository "fifth"))) | |
118 | (and (lset= eq? (commit-difference commit4 commit1 (list commit2)) | |
119 | (list commit3 commit4)) | |
120 | (lset= eq? (commit-difference commit4 commit1 (list commit3)) | |
121 | (list commit4)) | |
122 | (lset= eq? (commit-difference commit4 commit1 (list commit5)) | |
123 | (list commit2 commit3 commit4))))))) | |
124 | ||
873f6f13 | 125 | (test-end "git") |