summary refs log tree commit diff
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")