[erlang-questions] Rebar dependency recursion
Thu Nov 1 22:02:09 CET 2012
I'd argue that get-deps & compile are the most common functions, and if
this proposal is to make things more consistent, making those commands (and
others that should almost always have recursion) magically recurse without
the '-r' passed in would be bad. So all the "-r +1's" people are saying
should count towards people who really want to write, "rebar -r compile"
everytime they compile. Also, you still won't be able to mix recursive and
non recursive commands in one call.
On Thu, Nov 1, 2012 at 1:10 PM, Fredrik Linder <>wrote:
> -r: +1
> On 1 nov 2012, at 12:00, Tim Watson <> wrote:
> > This is all fine, but it's mighty annoying to have run rebar repeatedly
> because you want to get-deps first then do something else.
> > Modules already have a way to indicate that they want recursion -
> preprocess/2. Can this be extended so that modules can say 'I want
> recursion' or [predirs] or ok/nothing? Then you'd get a nice interplay
> where rebar_deps says [predirs] and rebar_compile says 'yes please' to the
> recursion into those predirs but rebar_templater says 'no thanks' to them
> and you can chain commands cleanly without invoking rebar multiple times.
> > In that scheme, -r means 'override the guys who said no to recrusion'
> > Sent from my iPhone.
> > On 1 Nov 2012, at 17:07, Tuncer Ayaz <> wrote:
> >> On Thu, Nov 1, 2012 at 5:47 PM, Eric Merrit wrote:
> >>> Guys,
> >>> I have been talking with Tuncer and seeing the various bits on going
> >>> on about handling dependency recursion in rebar. That is `skip_deps`
> >>> vs `-r`. When you mix into that things like config inheritance it
> >>> becomes a mess. I thought I would see if I can get some consensus on
> >>> the matter. Just as a short FYI, here are some issues on this topic.
> >>> * https://github.com/basho/rebar/issues/303
> >>> * https://github.com/basho/rebar/issues/275
> >>> * https://github.com/basho/rebar/pull/293 - (this has been merged)
> >>> I think the default case in rebar is that you *do not want it to
> >>> recurse*. Only in the case of a `get-deps` followed by a `compile`
> >>> do you want to do things recursively. This is almost always true in
> >>> my case, other`s experiences may vary.
> >>> That being the case I think the default behavior should be the
> >>> non-recursive option and you explicitly tell rebar to recurse with
> >>> the `-r`. As a variation it will probably be worthwhile to support a
> >>> list of applications to talk about app specific recursion. In this
> >>> model `-r`/`--recursive` would do recursion as it normally does
> >>> while `--recursive=app1,app2,app3` would only recurse into app1,
> >>> app2 and app3 respectively. There is a branch implementing basic
> >>> -r/--recursive linked in rebar/issues/303 (dss-fix-skip-deps).
> >>> This seems to be the most simplest solution to the problem and
> >>> doesn't really introduce new semantics though it does inverse
> >>> semantics. The downside to this is that its backwards incompatible.
> >>> However, we are coming up on a new major version so it's a good
> >>> opportunity to do backwards incompatible changes. I don't see a
> >>> solid way for rebar to automatically decide which tasks to carry out
> >>> recursively and which not considering you can have many variations
> >>> of commands to run in a single rebar invocation.
> >>> In any case, it would be nice to settle the issue, with either
> >>> `skip_deps` is the way going forward or we will be moving to the
> >>> `-r`. Obviously, I would like to see the `-r` option, but settling
> >>> the issue on way or the other is best.
> >> All solutions considered so far, I think introducing an explicit
> >> -r/--recursive as found in dizzy's dss-fix-skip-deps branch is a good
> >> solution.
> >> If someone can come up with a solid way to make rebar aware of what
> >> commands are going to be run and use that as a way to dynamically
> >> enable/disable recursion, I'd be very interested to read that. I hope
> >> there is a better solution which keeps the ease of use for the initial
> >> 'get-deps compile' step while not forcing us to use skip_deps and/or
> >> apps=/skip_apps= afterwards. Config inheritance is a related problem
> >> and discussed in the above ticket #275.
> >> _______________________________________________
> >> erlang-questions mailing list
> >> http://erlang.org/mailman/listinfo/erlang-questions
> > _______________________________________________
> > erlang-questions mailing list
> > http://erlang.org/mailman/listinfo/erlang-questions
> erlang-questions mailing list
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the erlang-questions