mysterious clj -m behavior

66 views
Skip to first unread message

Gregg Reynolds

unread,
Oct 9, 2020, 2:35:31 PM10/9/20
to clo...@googlegroups.com
I'm writing a command line tool, and using `$ clj -m obazl args` to run it.  My deps.edn file contains the path to the sources.  Works great, except when it doesn't.

I copied the deps.edn to the root directory of a project and when I run it it produces no output. It just returns silently.  I injected a bug in the source and it had no effect, so evidently its not even accessing the source.

It works in a variety of other contexts (it analyzes some code).  I  can't see anything different in the directory where it stops working, but there must be something.  I deleted .cpcache, no effect. Tried it in a fresh shell to make sure I had not wrecked the env vars; same result, works everywhere but that one directory.

What should I be looking for?

Related question: I would like to load deps.edn from a subdirectory, something like `$ clj -d bzl/deps.edn -m obazl args`.  The CLI guide says cli takes "Config data - a deps.edn map passed on the command line" - but it does not say how to pass it on the command line.  I've tried every way I can think of with no luck.

Thanks,

Gregg

Gregg Reynolds

unread,
Oct 9, 2020, 3:26:25 PM10/9/20
to clo...@googlegroups.com
On Fri, Oct 9, 2020 at 1:34 PM Gregg Reynolds <d...@mobileink.com> wrote:
I'm writing a command line tool, and using `$ clj -m obazl args` to run it.  My deps.edn file contains the path to the sources.  Works great, except when it doesn't.

I copied the deps.edn to the root directory of a project and when I run it it produces no output. It just returns silently.  I injected a bug in the source and it had no effect, so evidently its not even accessing the source.

It works in a variety of other contexts (it analyzes some code).  I  can't see anything different in the directory where it stops working, but there must be something.  I deleted .cpcache, no effect. Tried it in a fresh shell to make sure I had not wrecked the env vars; same result, works everywhere but that one directory.

What should I be looking for?

Never mind. I was reading a file at initialization time, complete with error checking - but used printf to emit the error message and neglected to (flush) it.

But the other question stands: how can I pass a deps.edn file to the cli command?

alpeware llc

unread,
Oct 9, 2020, 4:16:08 PM10/9/20
to clo...@googlegroups.com
You should be able to specify the deps.edn file using a env variable -

The Clojure tools will use the following deps.edn map sources, in this order:

  • Root - found in the installation of clj (or as a resource in tools.deps)

  • User - cross-project configuration (typically tools)

    • Locations used in this order:

      • If $CLJ_CONFIG is set, then use $CLJ_CONFIG (explicit override)

      • If $XDG_CONFIG_HOME is set, then use $XDG_CONFIG_HOME/clojure (Freedesktop conventions)

      • Else use $HOME/.clojure (most common)

  • Project - the deps.edn in the current directory

  • Config data - a deps.edn map passed on the command line


    Here's an example passing in a map -

    clojure -Sdeps '{:deps {myname/mytemplate {:local/root "mytemplate"}}}'

    Hope this helps.

    --
    You received this message because you are subscribed to the Google
    Groups "Clojure" group.
    To post to this group, send email to clo...@googlegroups.com
    Note that posts from new members are moderated - please be patient with your first post.
    To unsubscribe from this group, send email to
    clojure+u...@googlegroups.com
    For more options, visit this group at
    http://groups.google.com/group/clojure?hl=en
    ---
    You received this message because you are subscribed to the Google Groups "Clojure" group.
    To unsubscribe from this group and stop receiving emails from it, send an email to clojure+u...@googlegroups.com.
    To view this discussion on the web visit https://groups.google.com/d/msgid/clojure/CAO40MimgH2ySee3mOK373PP1OTN7Xdy%2BWFjueYKV3RgZioGGFA%40mail.gmail.com.

    Gregg Reynolds

    unread,
    Oct 9, 2020, 6:10:02 PM10/9/20
    to clo...@googlegroups.com
    On Fri, Oct 9, 2020 at 3:15 PM alpeware llc <alpe...@gmail.com> wrote:
    You should be able to specify the deps.edn file using a env variable -

    The Clojure tools will use the following deps.edn map sources, in this order:

    • Root - found in the installation of clj (or as a resource in tools.deps)

    • User - cross-project configuration (typically tools)

      • Locations used in this order:

        • If $CLJ_CONFIG is set, then use $CLJ_CONFIG (explicit override)

        • If $XDG_CONFIG_HOME is set, then use $XDG_CONFIG_HOME/clojure (Freedesktop conventions)

        • Else use $HOME/.clojure (most common)

    • Project - the deps.edn in the current directory

    • Config data - a deps.edn map passed on the command line


    Here's an example passing in a map -

    clojure -Sdeps '{:deps {myname/mytemplate {:local/root "mytemplate"}}}'

    Hope this helps.

    Thanks. I see what the problem is.  Memo to documentation authors: please use unambiguous terminology, consistently.  E.g. do not use 'deps.edn' sometimes as a file name and sometimes as a type name. In fact I advise against ever using it as anything but a file name.  The last line of the doc should read something like:

    Config data - a configuration map passed on the command line using '-SDeps'.  As opposed to "name of a file ('deps.edn') containing a config map, passed on the command line", which seems like the most natural way to read the current text.

    Cheers,

    Gregg 
    Reply all
    Reply to author
    Forward
    0 new messages