summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.dir-locals.el1
-rwxr-xr-xbin/tissue86
-rw-r--r--tissue/file-document.scm4
-rw-r--r--tissue/git.scm22
-rw-r--r--tissue/issue.scm2
5 files changed, 48 insertions, 67 deletions
diff --git a/.dir-locals.el b/.dir-locals.el
index 38e25e1..ecfaf0e 100644
--- a/.dir-locals.el
+++ b/.dir-locals.el
@@ -7,7 +7,6 @@
(indent-tabs-mode t))
(scheme-mode
(eval . (put 'call-with-current-directory 'scheme-indent-function 1))
- (eval . (put 'call-with-file-in-git 'scheme-indent-function 2))
(eval . (put 'call-with-temporary-checkout 'scheme-indent-function 1))
(eval . (put 'function-documentation 'scheme-indent-function 2))
(eval . (put 'docstring-function-documentation 'scheme-indent-function 2))
diff --git a/bin/tissue b/bin/tissue
index 7d1c4e9..57ddaee 100755
--- a/bin/tissue
+++ b/bin/tissue
@@ -108,7 +108,7 @@ Show the text of FILE.
"
(command-line-program)))
((file)
- (call-with-file-in-git (current-git-repository) file
+ (call-with-input-file file
(lambda (port)
(port-transduce
(compose
@@ -152,7 +152,7 @@ Show the text of FILE.
(define (load-config)
"Load configuration and return <tissue-configuration> object."
- (call-with-file-in-git (current-git-repository) "tissue.scm"
+ (call-with-input-file "tissue.scm"
(compose eval-string get-string-all)))
(define tissue-repl
@@ -278,7 +278,10 @@ Serve repositories specified in CONFIG-FILE over HTTP.
(parameterize ((%current-git-repository
(repository-open repository-directory)))
(cons name
- `((project . ,(load-config))
+ `((project . ,(call-with-temporary-checkout repository-directory
+ (lambda (temporary-checkout)
+ (call-with-current-directory temporary-checkout
+ load-config))))
(repository-directory . ,repository-directory)
(website-directory . ,(string-append state-directory "/" name "/website"))
(xapian-directory . ,(string-append state-directory "/" name "/xapian"))
@@ -401,44 +404,45 @@ HOSTNAME."
(format (current-error-port)
"Cloned upstream repository.~%")
repository)))))
- (let ((config (load-config)))
- (parameterize ((%aliases (tissue-configuration-aliases config)))
- (call-with-temporary-checkout (git-top-level)
- (lambda (temporary-repository-clone)
- ;; Add the top level of the git repository to the
- ;; load path since there may be user-written
- ;; modules in the repository.
- ;; TODO: Though not strictly required, it would
- ;; be better to remove the added load path once
- ;; done.
- (add-to-load-path temporary-repository-clone)
- ;; Index.
- (unless (file-exists? "xapian")
- (mkdir "xapian"))
- (let ((xapian-directory (canonicalize-path "xapian")))
- (call-with-current-directory temporary-repository-clone
- (cut index
- xapian-directory
- (tissue-configuration-indexed-documents config)))
- (format (current-error-port)
- "Indexed latest changes.~%"))
- ;; Build website.
- (let ((website-directory "website"))
- (guard (c (else (format (current-error-port)
- "Building website failed.~%")
- (raise c)))
- (call-with-temporary-directory
- (lambda (temporary-output-directory)
- (call-with-current-directory temporary-repository-clone
- (cut build-website
- temporary-output-directory
- (tissue-configuration-web-files config)))
- (delete-file-recursively website-directory)
- (rename-file temporary-output-directory
- website-directory)))
- (chmod website-directory #o755)
- (format (current-error-port)
- "Built website.~%"))))))))))))))
+ (call-with-temporary-checkout (git-top-level)
+ (lambda (temporary-repository-clone)
+ (let ((config (call-with-current-directory temporary-repository-clone
+ load-config)))
+ (parameterize ((%aliases (tissue-configuration-aliases config)))
+ ;; Add the top level of the git repository to the
+ ;; load path since there may be user-written
+ ;; modules in the repository.
+ ;; TODO: Though not strictly required, it would
+ ;; be better to remove the added load path once
+ ;; done.
+ (add-to-load-path temporary-repository-clone)
+ ;; Index.
+ (unless (file-exists? "xapian")
+ (mkdir "xapian"))
+ (let ((xapian-directory (canonicalize-path "xapian")))
+ (call-with-current-directory temporary-repository-clone
+ (cut index
+ xapian-directory
+ (tissue-configuration-indexed-documents config)))
+ (format (current-error-port)
+ "Indexed latest changes.~%"))
+ ;; Build website.
+ (let ((website-directory "website"))
+ (guard (c (else (format (current-error-port)
+ "Building website failed.~%")
+ (raise c)))
+ (call-with-temporary-directory
+ (lambda (temporary-output-directory)
+ (call-with-current-directory temporary-repository-clone
+ (cut build-website
+ temporary-output-directory
+ (tissue-configuration-web-files config)))
+ (delete-file-recursively website-directory)
+ (rename-file temporary-output-directory
+ website-directory)))
+ (chmod website-directory #o755)
+ (format (current-error-port)
+ "Built website.~%"))))))))))))))
(define tissue-pull
(match-lambda*
diff --git a/tissue/file-document.scm b/tissue/file-document.scm
index ccd6a48..f389976 100644
--- a/tissue/file-document.scm
+++ b/tissue/file-document.scm
@@ -71,7 +71,7 @@
(define (file-text file)
"Return the contents of text @var{file}."
- (call-with-file-in-git (current-git-repository) file
+ (call-with-input-file file
get-string-all))
(define-method (document-text (document <file-document>))
@@ -139,7 +139,7 @@ MSet object representing a list of search results."
"Read gemtext document from @var{file} and return a
@code{<file-document>} object."
(make <file-document>
- #:title (or (call-with-file-in-git (current-git-repository) file
+ #:title (or (call-with-input-file file
(lambda (port)
(port-transduce (tfilter-map (lambda (line)
;; The first level one
diff --git a/tissue/git.scm b/tissue/git.scm
index 4289d65..70f0de9 100644
--- a/tissue/git.scm
+++ b/tissue/git.scm
@@ -45,7 +45,6 @@
commit-author-date
git-tracked-file?
git-tracked-files
- call-with-file-in-git
file-modification-table
clone-options
call-with-temporary-checkout))
@@ -132,27 +131,6 @@ directory."
directory of @var{repository} and do not have a leading slash."
(tree-list (head-tree repository)))
-(define (call-with-file-in-git repository path proc)
- "Call PROC on an input port reading contents of PATH. PATH may refer
-to a file on the filesystem or in REPOSITORY."
- (let ((file-path (if (absolute-file-name? path)
- ;; Treat absolute paths verbatim.
- path
- ;; Treat relative paths as relative to the
- ;; top-level of the git repository.
- (string-append (dirname (repository-directory repository))
- "/" path))))
- (if (file-exists? file-path)
- ;; If file exists on the filesystem, read it.
- (call-with-input-file file-path proc)
- ;; Else, read the file from the repository.
- (let* ((path-tree-entry (tree-entry-bypath (head-tree repository)
- path))
- (path-object (tree-entry->object repository path-tree-entry))
- (blob (blob-lookup repository (object-id path-object))))
- (call-with-port (open-bytevector-input-port (blob-content blob))
- proc)))))
-
(define (commit-file-changes repository commit)
"Return a list of pairs describing files modified by COMMIT with
respect to its first parent in REPOSITORY. Each pair maps the old
diff --git a/tissue/issue.scm b/tissue/issue.scm
index ebfca52..1953cef 100644
--- a/tissue/issue.scm
+++ b/tissue/issue.scm
@@ -277,7 +277,7 @@ gemtext file."
"Read issue from gemtext @var{file} and return an @code{<issue>}
object."
(let* ((file-document (read-gemtext-document file))
- (file-details (call-with-file-in-git (current-git-repository) file
+ (file-details (call-with-input-file file
file-details))
;; Downcase keywords to make them
;; case-insensitive.