examples/git-commands.lisp @ 37d2a6b3aaf0
Remove failed ing attempt
| author | Steve Losh <steve@stevelosh.com> |
|---|---|
| date | Thu, 12 Jan 2017 22:39:04 +0000 |
| parents | b42ffb104159 |
| children | 9a223fdf9928 |
(in-package :chancery) (named-readtables:in-readtable :chancery) (define-rule noun "binary blob" "packfile" "refspec" "blob" "branch" "changeset" "commit" "conflicted merge" "current HEAD" "file" "head" "merge" "remote" "object" "patch" "ref" "repository" "symlink" "tag" "tip" ) (define-rule git-location% "repository" "index" "working tree" "content-addressable filesystem" "object store" "reflog" "current directory" "current repository" "current branch" "checked-out branch" "upstream repository" "DAG") (define-rule git-folder% "" "refs" "logs" "objects" "hooks" "HEAD" "COMMIT_EDITMSG") (define-rule git-folder (".git/" :. git-folder%)) (define-rule git-location ("the" git-location%) git-folder) (define-rule external-location "Hacker News" "Stack Overflow" "Twitter" "Reddit" "Github" "Gitlab" "Github's status page" "/dev/random" "/dev/urandom" "your .gitconfig" "the git man pages" "the git source code" "your home directory") (define-rule location git-location external-location) (define-rule action (list "bisect" "bisecting") (list "clone" "cloning") (list "commit" "committing") (list "delete" "deleting") (list "display" "displaying") (list "fast-forward" "fast-forwarding") (list "fetch" "fetching") (list "merge" "merging") (list "move" "moving") (list "print" "printing") (list "prune" "pruning") (list "pull" "pulling") (list "push" "pushing") (list "record" "recording") (list "revert" "reverting") (list "remove" "removing") (list "rename" "renaming") (list "reset" "resetting") (list "resolve" "resolving") (list "show" "showing") (list "sign" "signing") (list "simplify" "simplifying") (list "update" "updating") (list "verify" "verifying") ) (defun action-verb () (first (action))) (define-rule refresh "update" "reset") (define-rule refreshing "updating" "resetting") (define-rule extremum "newest" "oldest" "largest" "smallest" "sparsest" "first" "last" "worst" "simplest" "best") (define-rule adjective "merged" "unmerged" "symbolic" "uncommitted" "signed" "unsigned" "big-endian" "little-endian" "childless" "binary" ) (define-rule age "newest" "oldest" "first" "last") (define-rule look-for "search" "grep" "bisect" "filter") (define-rule temporal-adverb "before" "after" "without") (defun letter () (random-elt "abcdefghijklmnopqrstuvwxyz")) (defun shellify (str) (string-downcase (substitute #\- #\space str))) (define-rule short-option% ("-" :. letter) ("-" :. letter [noun shellify string-upcase])) (define-rule long-option% (bind ((noun [noun shellify])) ("--" :. noun :. "=<" :. noun :. ">")) ("--" :. action-verb) ("--" :. extremum) ("--only-" :. adjective) ("--only-" :. [noun shellify s]) ("--" :. action-verb :. "=<" :. [noun shellify] :. ">")) (define-rule short-option short-option% ("[" :. short-option% :. "]")) (define-rule long-option long-option% ("[" :. long-option% :. "]")) (define-rule short-options short-option (short-option short-option)) (define-rule options long-option short-options (short-options long-option) (long-option short-options)) (define-rule description (look-for location "for the" age noun "and" command "it") ("read" (eval (+ 2 (random 2000))) "bytes from" location "and" command "them") (command "the" extremum noun "in" git-location) (command [noun a] temporal-adverb refreshing git-location) (command "and push all" adjective [noun s] "to" location) (command "all" adjective [noun s] "in" git-location) (command "the" extremum "and merge it into" git-location) (command "some" [noun s] "from a remote") (command "two or more" [noun s] "and save them to" location) ("move or" command [noun a] "in" git-location) ("rebase" [noun a] "onto" location "after" commanding "it") (command "and" refresh git-location) ("list," command :. ", or delete" [noun s])) (define-rule entry (bind (((command commanding) action)) ("git" command options #\newline :. [description cap])))