iterate / mikrobloggeriet

0 stars 0 forks source link

`mblog create`: give sane error messages when config is missing. #37

Closed teodorlu closed 9 months ago

teodorlu commented 9 months ago

I stedet for å kaste en feil når det mangler config, prøver vi å fortelle brukeren hva som har gått galt, og hvordan brukeren kan fikse problemet.

$ # feilhåndtering før når config mangler
$ mblog create --dry-run
----- Error --------------------------------------------------------------------
Type:     java.lang.AssertionError
Message:  Assert failed: dir
Location: /Users/teodorlu/dev/iterate/mikrobloggeriet/src/mikrobloggeriet/cli.clj:259:10

----- Context ------------------------------------------------------------------
255:           :git.user/email (git-user-email ".")
256:           :cohort-id (config-get :cohort)
257:           :draft (or (:draft opts) false)}
258:          create-opts->commands
259:          (map command-transform)
              ^--- Assert failed: dir
260:          execute!))
261:   )
262: 
263: (defn mblog-links
264:   [opts+args]

----- Stack trace --------------------------------------------------------------
clojure.core/map             - <built-in>
mikrobloggeriet.cli/execute! - /Users/teodorlu/dev/iterate/mikrobloggeriet/src/mikrobloggeriet/cli.clj:259:10
mikrobloggeriet.cli/execute! - /Users/teodorlu/dev/iterate/mikrobloggeriet/src/mikrobloggeriet/cli.clj:197:1
mikrobloggeriet.cli          - /Users/teodorlu/dev/iterate/mikrobloggeriet/src/mikrobloggeriet/cli.clj:251:5
mikrobloggeriet.cli          - /Users/teodorlu/dev/iterate/mikrobloggeriet/src/mikrobloggeriet/cli.clj:291:3
clojure.core/apply           - <built-in>
user                         - <expr>:1:44

$ # feilhåndtering etter når config mangler
$ # husk å bytte til rett branch!
$ git switch mblog-create-error-handling 
Switched to branch 'mblog-create-error-handling'
$ mblog create --dry-run                
Property missing: :editor. To learn how to add it, run `mblog config -h`.
Property missing: :cohort. To learn how to add it, run `mblog config -h`.
Property missing: :repo-path. To learn how to add it, run `mblog config -h`.
olavm commented 9 months ago

Jeg fikk aldri tid til å fikse en tilbakemelding dersom brukeren har konfigurert en editor som ikke finnes (eks. konfigurere code uten å ha installert CLIet for det). Her blir det fortsatt ganske omfattende feilmeldinger:

----- Error --------------------------------------------------------------------
Type:     java.io.IOException
Message:  Cannot run program "cude" (in directory "/Users/olavhm/dev/iterate/mikrobloggeriet"): error=2, No such file or directory
Location: /Users/olavhm/dev/iterate/mikrobloggeriet/src/mikrobloggeriet/cli.clj:205:14

----- Context ------------------------------------------------------------------
201:     (case cmd
202:       :create-dirs (apply fs/create-dirs args)
203:       :println (apply println args)
204:       :prn (apply prn args)
205:       :shell (apply shell args)
                  ^--- Cannot run program "cude" (in directory "/Users/olavhm/dev/iterate/mikrobloggeriet"): error=2, No such file or directory
206:       :spit (apply spit args))))
207: 
208: (comment 
209:   (def sample-opts
210:     {:dir "."

----- Stack trace --------------------------------------------------------------
babashka.process/process*    - <built-in>
babashka.process/shell       - <built-in>
clojure.core/apply           - <built-in>
babashka.impl.process/shell  - <built-in>
clojure.core/apply           - <built-in>
... (run with --debug to see elided elements)
mikrobloggeriet.cli/execute! - /Users/olavhm/dev/iterate/mikrobloggeriet/src/mikrobloggeriet/cli.clj:197:1
mikrobloggeriet.cli          - /Users/olavhm/dev/iterate/mikrobloggeriet/src/mikrobloggeriet/cli.clj:279:5
mikrobloggeriet.cli          - /Users/olavhm/dev/iterate/mikrobloggeriet/src/mikrobloggeriet/cli.clj:313:3
clojure.core/apply           - <built-in>
user                         - <expr>:1:44

Kan se på validering av editor i en egen issue. Det holder vel med noe ala where EDITOR?

teodorlu commented 9 months ago

Jaaa, godt poeng. Tror vi kan bruke babashka.fs/which. Nice catch!

teodorlu commented 9 months ago

Nå håndterer vi "brukeren har konfigurert en editor som ikke funker" sånn:

$ mblog config editor loleditor
$ mblog create --no-git        
Error: editor not found.

     loleditor

was not found on your system.
To learn how to configure your editor, run `mblog config -h`.
$ mblog config editor nvim
$ mblog create --no-git   
$ # skriver og greier
$ # alt gikk fint!
teodorlu commented 9 months ago

La til litt mer hjelpetekst for å forklare brukeren hva en gyldig editor er:

$ mblog create --dry-run
Error: editor not found.

    loleditor

was not found on your system. You must be able to use your configured editor to
edit files from a terminal. For example:

    $ loleditor yourfile.txt

If that command crashes, loleditor can't be used as an editor.
To learn how to configure your editor, run `mblog config -h`.
teodorlu commented 9 months ago

💯

Da ruller jeg ut i prod. Tenker at vi er klare for å ta imot JALS og OLORM over på mblog nå!