diff --git a/Makefile.am b/Makefile.am index d210214..108bfe7 100644 --- a/Makefile.am +++ b/Makefile.am @@ -356,6 +356,7 @@ endif # HAVE_GENHTML dist-hook: gen-ChangeLog echo $(VERSION) > $(distdir)/.tarball-version + git ls-tree -r --name-only HEAD > $(distdir)/.tarball-manifest .PHONY: gen-ChangeLog gen-ChangeLog: diff --git a/guix.scm b/guix.scm index 10fe856..59484e5 100644 --- a/guix.scm +++ b/guix.scm @@ -25,15 +25,27 @@ version))) (define (make-select) - (let* ((directory (repository-discover *srcdir*)) - (repository (repository-open directory)) - (oid (reference-target (repository-head repository))) - (commit (commit-lookup repository oid)) - (tree (commit-tree commit)) - (paths (tree-list tree))) - (lambda (file stat) - (let ((relative (substring file (1+ (string-length *srcdir*))))) - (member relative paths))))) + (define paths + (or (false-if-exception + (let* ((directory (repository-discover *srcdir*)) + (repository (repository-open directory)) + (oid (reference-target (repository-head repository))) + (commit (commit-lookup repository oid)) + (tree (commit-tree commit))) + (tree-list tree))) + (false-if-exception + (with-directory-excursion *srcdir* + (call-with-input-file ".tarball-manifest" + (lambda (port) + (let loop ((line (get-line port)) (acc '())) + (if (eof-object? line) + acc + (loop (get-line port) (cons line acc)))))))) + (error "Cannot make file selector"))) + (lambda (file stat) + (let ((relative (substring file (1+ (string-length *srcdir*))))) + (or (eq? (stat:type stat) 'directory) + (member relative paths))))) (package (name "gash")