about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--web/view/markdown.scm2
-rw-r--r--web/webserver.scm53
2 files changed, 31 insertions, 24 deletions
diff --git a/web/view/markdown.scm b/web/view/markdown.scm
index 3236cce..6aa2935 100644
--- a/web/view/markdown.scm
+++ b/web/view/markdown.scm
@@ -16,7 +16,7 @@
   #:use-module (web sxml)
   #:use-module (commonmark)
   #:export (markdown-file->sxml markdown-github->sxml fetch-file
-                                fetch-raw-file commit-file))
+                                fetch-raw-file commit-file git-invoke))
 
 (define (markdown-file->sxml fn)
   "Parse a local file"
diff --git a/web/webserver.scm b/web/webserver.scm
index c4ee6ca..c0fb9a1 100644
--- a/web/webserver.scm
+++ b/web/webserver.scm
@@ -27,8 +27,11 @@
              (web view doc)
              (web view markdown))
 
-(define +global-repo+
-  (getenv "REPO_PATH"))
+(define +current-repo-path+
+  (getenv "CURRENT_REPO_PATH"))
+
+(define +cgit-repo-path+
+  (getenv "CGIT_REPO_PATH"))
 
 (define +info+
   `(("name" . "GeneNetwork REST API") ("version" ,get-version)
@@ -185,25 +188,29 @@ otherwise search for set/group data"
 (define (commit-file-handler repo request body)
   (catch 'system-error
          (lambda ()
-           (let* ((post-data (decode-request-json body))
-                  (_ (for-each (lambda (target)
-                                 (invalid-data? post-data target))
-                               '("filename" "content" "username" "email"
-                                 "prev_commit")))
-                  (file-name (assoc-ref post-data "filename"))
-                  (content (assoc-ref post-data "content"))
-                  (username (assoc-ref post-data "username"))
-                  (email (assoc-ref post-data "email"))
-                  (commit-message (assoc-ref post-data "commit_message"))
-                  (prev-commit (assoc-ref post-data "prev_commit")))
-             (build-json-response 200
-                                  (commit-file repo
-                                               file-name
-                                               content
-                                               commit-message
-                                               username
-                                               email
-                                               prev-commit))))
+	   (let* ((post-data (decode-request-json body))
+		  (_ (for-each (lambda (target)
+				 (invalid-data? post-data target))
+			       '("filename" "content" "username" "email"
+				 "prev_commit")))
+		  (file-name (assoc-ref post-data "filename"))
+		  (content (assoc-ref post-data "content"))
+		  (username (assoc-ref post-data "username"))
+		  (email (assoc-ref post-data "email"))
+		  (commit-message (assoc-ref post-data "commit_message"))
+		  (prev-commit (assoc-ref post-data "prev_commit")))
+	     (build-json-response 200
+				  ((lambda ()
+				     (let ((message
+					    (commit-file +current-repo-path+
+							 file-name
+							 content
+							 commit-message
+							 username
+							 email
+							 prev-commit)))
+				       (git-invoke +current-repo-path+ "push" +cgit-repo-path+)
+				       message))))))
          (lambda (key . args)
            (let ((msg (car args)))
              (build-json-response 400
@@ -247,9 +254,9 @@ otherwise search for set/group data"
     (('GET "species")
      (render-json (get-species-meta)))
     (('GET "edit")
-     (edit-file-handler +global-repo+ request))
+     (edit-file-handler +current-repo-path+ request))
     (('POST "commit")
-     (commit-file-handler +global-repo+ request body))
+     (commit-file-handler +current-repo-path+ request body))
     (('GET id)
      (let ((names (get-species-shortnames (get-expanded-species))))
        (match (string->list id)