Previous: , Up: Create New Project   [Index]


B.1.1.2 Create New Project Code

(defun create-new-project (project title author &optional bucket)
  "Create a new project in a new directory.

- Depends on env var SYNC_ORG_TEMPLATE existing and pointing to this file.
- Require a title, author, and AWS S3 bucket name
- Create new directory structure: resources, and subdirs tools, images, etc
- Copy template file into a new directory.
- Update its title, author, and S3 bucket entries.
- Tangle the bootstrap makefile and Readme.
- Create a new git repo and add an initial commit.
- Upload the git repo into GitHub, add a description to the GitHub repo."
  (message "NEW PROJECT=%s TITLE=%s AUTHOR=%s BUCKET=%s" project title author bucket)

  (setq SOT (getenv "SYNC_ORG_TEMPLATE"))
  (access-file SOT "Cannot access SYNC_ORG_TEMPLATE")

  ;; Project directory structure
  (setq project-dir (file-name-as-directory project))
  (setq project-file (concat project-dir project ".org"))
  (setq resources-dir "resources/")
  (setq projrsc-dir (concat project-dir resources-dir))
  (setq resources-subdirs (list "tools/" "images/"))

  ;; make the directories
  (mkdir project-dir t)
  (mkdir projrsc-dir)
  (dolist (subdir resources-subdirs)
    (mkdir (concat projrsc-dir subdir)))
  ;; create the project file from the template
  (copy-file SOT project-file)

  (with-current-buffer (find-file-noselect project-file)
    (let* ((cur-buf (current-buffer))
           (proj-tree (project-tree cur-buf))
           (delete-hl-list (list "build-scripts" "todos" "README")))

      ;; Remove some sections
      (message "Deleting %s..." delete-hl-list)
      (seq-do (lambda (cid)
                (message "...Deleting %s in %s..." cid cur-buf)
                (let* ((beg-end (find-hl-cid proj-tree cid))
                       (beg (car beg-end))
                       (end (cdr beg-end)))
                  (message "   ...%s: %s" cid beg-end)
                  (delete-region beg end)
                  (message "   ...done")))
              delete-hl-list))
    (message "Done deleting.")

    ;; update title, author, version, bucket
    ;; with values provided by the user
    (goto-char (point-min))
    (re-search-forward "^#[+]title:\s*\\(TITLE\\)$")
    (replace-match title t nil nil 1)
    (re-search-forward "^#[+]author:\s*\\(AUTHOR\\)$")
    (replace-match author t nil nil 1)
    (re-search-forward "^#[+]macro:\s*version Version \\(.*\\)$")
    (replace-match "0.0.0" t nil nil 1)
    (when bucket
      (re-search-forward "^#[+]bucket:\s*\\(.*\\)$")
      (replace-match bucket t nil nil 1))
    (re-search-forward "^#[+]texinfo_printed_title:\\(PRINTED TITLE\\)$")
    (replace-match (concat project "---" title) t nil nil 1)
    (save-buffer)

    ;; tangle the project readme and boot makefile
    (goto-char (point-min))
    (org-babel-goto-named-src-block "project-readme")
    (org-babel-tangle (quote (4)))
    (org-babel-goto-named-src-block "boot-template")
    (org-babel-tangle (quote (4)))
    (kill-buffer)))

Listing B.1: Create New Project Code


Previous: , Up: Create New Project   [Index]