#! /usr/bin/env guile !# (use-modules (ice-9 getopt-long) (srfi srfi-26) ((ice-9 regex) #:select (regexp-substitute/global)) ((transform strings) #:select (string-blank?)) ((transform sql) #:select (call-with-target-database sql-for-each))) (define (save-file file result) (when result (let ((dir-name (dirname file))) (unless (file-exists? dir-name) (mkdir dir-name)) (with-output-to-file file (lambda () (format #t "~a" result)))))) (define (infopages/sql->rtf result) (let* ((get (cut assoc-ref result <>)) (get* (compose (lambda (str) (if (string-blank? str) #f str)) get)) (identifier (regexp-substitute/global #f "[^A-Za-z0-9:]" (get "InfoPageName") 'pre "_" 'post)) (dir-name (string-append "/export/data/genenetwork/gn-docs/general/datasets/")) (file-name (cut string-append dir-name <>)) (summary (get* "Summary")) (tissue (get* "AboutTissue")) (specifics (get* "Specifics")) (cases (get* "AboutCases")) (platform (get* "AboutPlatform")) (processing (get* "AboutDataProcessing")) (notes (get* "Notes")) (experiment-design (get* "ExperimentDesign")) (acknowledgment (get* "Acknowledgment"))) (for-each (lambda (x) (save-file (string-append (file-name identifier) "/" (car x)) (cdr x))) `(("summary.rtf" . ,summary) ("tissue.rtf" . ,tissue) ("specifics.rtf" . ,specifics) ("cases.rtf" . ,cases) ("platform.rtf" . ,platform) ("processing.rtf" . ,processing) ("notes.rtf" . ,notes) ("experiment-design.rtf" . ,experiment-design) ("acknowledgment.rtf" . ,acknowledgment))))) (define* (commit-changes directory #:optional (commit-message "Update dataset RTF Files.")) (chdir directory) (system "git reset --hard origin") (system "git pull") (system "git add .") (system (format #f "git commit -m ~s" commit-message)) (system "sudo git push /home/git/public/gn-docs")) (let* ((option-spec '((settings (single-char #\s) (value #t)))) (options (getopt-long (command-line) option-spec)) (settings (option-ref options 'settings #f)) (query "SELECT InfoPageName, Datasets.Summary, Datasets.AboutTissue, InfoFiles.Specifics, Datasets.AboutCases, Datasets.AboutPlatform, Datasets.AboutDataProcessing, Datasets.Notes, Datasets.ExperimentDesign, Datasets.Acknowledgment FROM InfoFiles LEFT JOIN Datasets USING (DatasetId)") (%connection-settings (call-with-input-file settings read))) (call-with-target-database %connection-settings (lambda (db) (sql-for-each infopages/sql->rtf db query) (commit-changes "/export/data/genenetwork/gn-docs/"))))