summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorArun Isaac2023-01-26 21:32:50 +0000
committerArun Isaac2023-01-26 21:50:22 +0000
commit22d71881e5fae4a530249fb4f0d63203b3f3a462 (patch)
tree3b412100ca6a6f5ef2ac44b521dc913f4cd192f7 /tests
parent2fc4700fbfd659197773a7e6d971563eb6ccfc3a (diff)
downloadtissue-22d71881e5fae4a530249fb4f0d63203b3f3a462.tar.gz
tissue-22d71881e5fae4a530249fb4f0d63203b3f3a462.tar.lz
tissue-22d71881e5fae4a530249fb4f0d63203b3f3a462.zip
git: Infer changes by root commit correctly.
* tissue/git.scm (commit-deltas): Rename to ... (commit-file-changes): ... this. Return list of pairs mapping old files to new files. (file-modification-table): Use commit-file-changes instead of commit-deltas. Adapt to new return value. * tests/git.scm: New file. * .dir-locals.el (scheme-mode): Set scheme-indent-function for with-variable and with-variables.
Diffstat (limited to 'tests')
-rw-r--r--tests/git.scm60
1 files changed, 60 insertions, 0 deletions
diff --git a/tests/git.scm b/tests/git.scm
new file mode 100644
index 0000000..bf2d9eb
--- /dev/null
+++ b/tests/git.scm
@@ -0,0 +1,60 @@
+;;; tissue --- Text based issue tracker
+;;; Copyright © 2023 Arun Isaac <arunisaac@systemreboot.net>
+;;;
+;;; This file is part of tissue.
+;;;
+;;; tissue is free software: you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation, either version 3 of the License, or
+;;; (at your option) any later version.
+;;;
+;;; tissue is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+;;; General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with tissue. If not, see <https://www.gnu.org/licenses/>.
+
+(import (srfi srfi-26)
+ (srfi srfi-64)
+ (ice-9 match))
+
+(define (with-variable variable value thunk)
+ "Set VARIABLE to VALUE, run THUNK and restore the old value of
+VARIABLE. Return the value returned by THUNK."
+ (let ((old-value (variable-ref variable)))
+ (dynamic-wind
+ (cut variable-set! variable value)
+ thunk
+ (cut variable-set! variable old-value))))
+
+(define (with-variables variable-bindings thunk)
+ "Set VARIABLE-BINDINGS, run THUNK and restore the old values of the
+variables. Return the value returned by THUNK. VARIABLE-BINDINGS is a
+list of pairs mapping variables to their values."
+ (match variable-bindings
+ (((variable . value) tail ...)
+ (with-variable variable value
+ (cut with-variables tail thunk)))
+ (() (thunk))))
+
+(define-syntax-rule (var@@ module-name variable-name)
+ (module-variable (resolve-module 'module-name)
+ 'variable-name))
+
+(test-begin "git")
+
+(test-equal "Infer changes by root commit"
+ '(("foo" . "foo")
+ ("bar" . "bar"))
+ (with-variables (list (cons (var@@ (git) commit-parents)
+ (const (list)))
+ (cons (var@@ (git) commit-tree)
+ (const #t))
+ (cons (var@@ (git) tree-list)
+ (const (list "foo" "bar"))))
+ (cut (@@ (tissue git) commit-file-changes)
+ #f #f)))
+
+(test-end "git")