On Sun, 24 Nov 2013 13:12:48 GMT, Sönke Ludwig wrote:

Currently, you need to set the dependencies to {"vibe-d": ">=0.7.17", "mysql-native": "~master"}, as "~master" and a versioned release are considered conflicting when required by different packages. This is meant to be changed, but the best semantics are not yet clear (e.g. should ">=0.7.17" && "~master" result in "~master" or in "0.7.17", maybe depending on the hierarchical order?).

I edited package.json in ~/.dub/packages/mysql-native-master so it's working on the dependencies part for me.

So, tell me if I'm wrong, but I see that ATM working with 2 projects depending on each other is not possible if one of them use ~master and not the other.
Of course I understand why project can't depend on each other's master, but as I see it it makes testing a lot harder.

So I would say this should be package-level only, and dependencies should keep the same behaviour. If a conflict appear, the project's package.json should resolve it.

Then if:

  • Project (P) depends on A and B, and B depends on A, the version of A defined in P gets picked, and a warning may be issued;
  • P depends on A and B, which both depends on C on version / ~master, then same error message;
    --> P should depends on A and B and C, and A and B's dependencies gets overloaded (+ warning?);

Then you can say "I know what I'm doing", but you still get a warning.
Would that be a possible solution ?