On Thursday, 4 June 2015 at 08:51:02 UTC, Sönke Ludwig wrote:
Am 01.06.2015 um 17:16 schrieb "Marc =?UTF-8?B?U2Now7x0eiI=?= <schue...@gmx.net>":
Since this thread seems to have turned into a wishlist for dub features,
I'm going to add one:

Undeprecate dependencies on git branches. They are really not different from dependencies with fuzzy "~>" versions. For both, the exact selected
version can be stored in dub.selections.json.

Use case:
Making a fix to a third-party project and sharing that fix with other team members. Having to create a temporary project on code.dlang.org just for that purpose is both a waste of time for developers and a waste
of resources of community infrastructure.

They are only deprecated within dub.json. You can still use them within dub.selections.json.

This is exactly the wrong way round. dub.selections.json must only contain exact versions. That's its purpose after all.

See Ruby's bundler as an example:
http://bundler.io/v1.9/rationale.html
Especially the parts about Gemfile.lock, which is their equivalent of dub.selections.json.

But really, branch based dependencies are simply a broken feature. They are completely different to version ranges, because they are not at all comparable (to other branches or versions) - at least without completely committing to GIT and starting to walk the GIT commit graph.

Why would you even want to compare them, except for equality? There are only the following cases AFAICS, none of which require an order:

1) Package is not yet in dub.selections.json:
=> Clone/update repo, checkout the branch, and put the exact commit id into dub.selections.json.
2) Package is already included in dub.selections.json:
=> All fine, nothing needs to be done.
3) An upgrade of the package has been requested:
=> Same as 1)

There could be situations during dependency resolution where you want to check whether a given commit is part of a branch, but that's a different (and easier) problem.


You can also check out certain branches locally and use "dub add-local" or "dub add-path" to let DUB use it instead of the publicly registered one.

This is not an option in a larger team. Everyone would have to do that manually, or you'd need to write a custom script to do what is actually the package manager's task.

Reply via email to