Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

resolve --transitive-dependencies should preserve dependency order #1551

Open
retnuh opened this issue Nov 14, 2019 · 7 comments
Open

resolve --transitive-dependencies should preserve dependency order #1551

retnuh opened this issue Nov 14, 2019 · 7 comments
Labels

Comments

@retnuh
Copy link

@retnuh retnuh commented Nov 14, 2019

It would be nice if running dhall resolve --transitive-dependencies preserved the dependency order, so that when a file/url is printed out, we know that all it's dependencies have already been printed out.

This make it more useful for scripts that perform a freeze as part of a build/release process; we can just use resolve to get a list of files, in the correct freezing order.

@sjakobi

This comment has been minimized.

Copy link
Collaborator

@sjakobi sjakobi commented Nov 14, 2019

Wouldn't it be even nicer if dhall freeze could freeze an entire project out of the box? With a --transitive flag or something like that?

Gabriel439 referenced this issue Nov 14, 2019
Related to https://github.com/dhall-lang/dhall-lang/issues/823

This lists dependencies starting from the leaves and concluding with the root
import, same as how `nix-store --query --requisites` does

Example output:

```bash
$ dhall resolve --no-cache --transitive-dependencies <<< 'https://prelude.dhall-lang.org/package.dhall'
https://prelude.dhall-lang.org/Bool/and
https://prelude.dhall-lang.org/Bool/build
https://prelude.dhall-lang.org/Bool/even
https://prelude.dhall-lang.org/Bool/fold
https://prelude.dhall-lang.org/Bool/not
https://prelude.dhall-lang.org/Bool/odd
https://prelude.dhall-lang.org/Bool/or
https://prelude.dhall-lang.org/Bool/show
https://prelude.dhall-lang.org/Bool/package.dhall
https://prelude.dhall-lang.org/Double/show
https://prelude.dhall-lang.org/Double/package.dhall
https://prelude.dhall-lang.org/Function/compose
https://prelude.dhall-lang.org/Function/package.dhall
https://prelude.dhall-lang.org/Integer/show
https://prelude.dhall-lang.org/Integer/toDouble
https://prelude.dhall-lang.org/Integer/package.dhall
https://prelude.dhall-lang.org/List/all
https://prelude.dhall-lang.org/List/any
https://prelude.dhall-lang.org/List/build
https://prelude.dhall-lang.org/List/concat
https://prelude.dhall-lang.org/List/concatMap
https://prelude.dhall-lang.org/List/default
https://prelude.dhall-lang.org/List/empty
https://prelude.dhall-lang.org/List/filter
https://prelude.dhall-lang.org/List/fold
https://prelude.dhall-lang.org/List/generate
https://prelude.dhall-lang.org/List/head
https://prelude.dhall-lang.org/List/indexed
https://prelude.dhall-lang.org/List/iterate
https://prelude.dhall-lang.org/List/last
https://prelude.dhall-lang.org/List/length
https://prelude.dhall-lang.org/List/map
https://prelude.dhall-lang.org/List/null
https://prelude.dhall-lang.org/List/partition
https://prelude.dhall-lang.org/List/replicate
https://prelude.dhall-lang.org/List/reverse
https://prelude.dhall-lang.org/List/shifted
https://prelude.dhall-lang.org/List/unzip
https://prelude.dhall-lang.org/List/package.dhall
https://prelude.dhall-lang.org/Location/Type
https://prelude.dhall-lang.org/Location/package.dhall
https://prelude.dhall-lang.org/Map/Type
https://prelude.dhall-lang.org/Map/Entry
https://prelude.dhall-lang.org/Map/empty
https://prelude.dhall-lang.org/Map/keyText
https://prelude.dhall-lang.org/Map/keyValue
https://prelude.dhall-lang.org/Map/keys
https://prelude.dhall-lang.org/Map/map
https://prelude.dhall-lang.org/Map/values
https://prelude.dhall-lang.org/Map/package.dhall
https://prelude.dhall-lang.org/Monoid
https://prelude.dhall-lang.org/Natural/build
https://prelude.dhall-lang.org/Natural/enumerate
https://prelude.dhall-lang.org/Natural/even
https://prelude.dhall-lang.org/Natural/fold
https://prelude.dhall-lang.org/Natural/isZero
https://prelude.dhall-lang.org/Natural/odd
https://prelude.dhall-lang.org/Natural/product
https://prelude.dhall-lang.org/Natural/sum
https://prelude.dhall-lang.org/Natural/show
https://prelude.dhall-lang.org/Natural/toDouble
https://prelude.dhall-lang.org/Natural/toInteger
https://prelude.dhall-lang.org/Natural/lessThanEqual
https://prelude.dhall-lang.org/Natural/greaterThanEqual
https://prelude.dhall-lang.org/Natural/lessThan
https://prelude.dhall-lang.org/Natural/equal
https://prelude.dhall-lang.org/Natural/greaterThan
https://prelude.dhall-lang.org/Natural/min
https://prelude.dhall-lang.org/Natural/max
https://prelude.dhall-lang.org/Optional/map
https://prelude.dhall-lang.org/Natural/listMin
https://prelude.dhall-lang.org/Natural/listMax
https://prelude.dhall-lang.org/Natural/sort
https://prelude.dhall-lang.org/Natural/subtract
https://prelude.dhall-lang.org/Natural/package.dhall
https://prelude.dhall-lang.org/Optional/all
https://prelude.dhall-lang.org/Optional/any
https://prelude.dhall-lang.org/Optional/build
https://prelude.dhall-lang.org/Optional/concat
https://prelude.dhall-lang.org/Optional/default
https://prelude.dhall-lang.org/Optional/filter
https://prelude.dhall-lang.org/Optional/fold
https://prelude.dhall-lang.org/Optional/head
https://prelude.dhall-lang.org/Optional/last
https://prelude.dhall-lang.org/Optional/length
https://prelude.dhall-lang.org/Optional/null
https://prelude.dhall-lang.org/Optional/toList
https://prelude.dhall-lang.org/Optional/unzip
https://prelude.dhall-lang.org/Optional/package.dhall
https://prelude.dhall-lang.org/JSON/Type
https://prelude.dhall-lang.org/JSON/Nesting
https://prelude.dhall-lang.org/JSON/Tagged
https://prelude.dhall-lang.org/JSON/keyText
https://prelude.dhall-lang.org/JSON/keyValue
https://prelude.dhall-lang.org/JSON/string
https://prelude.dhall-lang.org/JSON/number
https://prelude.dhall-lang.org/JSON/object
https://prelude.dhall-lang.org/JSON/array
https://prelude.dhall-lang.org/JSON/bool
https://prelude.dhall-lang.org/JSON/null
https://prelude.dhall-lang.org/Text/concatMapSep
https://prelude.dhall-lang.org/JSON/render
https://prelude.dhall-lang.org/JSON/package.dhall
https://prelude.dhall-lang.org/Text/concat
https://prelude.dhall-lang.org/Text/concatMap
https://prelude.dhall-lang.org/Text/concatSep
https://prelude.dhall-lang.org/Text/default
https://prelude.dhall-lang.org/Text/defaultMap
https://prelude.dhall-lang.org/Text/show
https://prelude.dhall-lang.org/Text/package.dhall
https://prelude.dhall-lang.org/XML/Type
https://prelude.dhall-lang.org/XML/attribute
https://prelude.dhall-lang.org/XML/render
https://prelude.dhall-lang.org/XML/element
https://prelude.dhall-lang.org/XML/leaf
https://prelude.dhall-lang.org/XML/text
https://prelude.dhall-lang.org/XML/emptyAttributes
https://prelude.dhall-lang.org/XML/package.dhall
https://prelude.dhall-lang.org/package.dhall
```
@Gabriel439

This comment has been minimized.

Copy link
Collaborator

@Gabriel439 Gabriel439 commented Nov 14, 2019

@sjakobi: I think we should do both. Nix does something similar and having dependencies in post-order really helps when debugging dependency trees.

I have a change for just ordering the dependencies as requested up here: #1539

@Gabriel439

This comment has been minimized.

Copy link
Collaborator

@Gabriel439 Gabriel439 commented Nov 14, 2019

Actually, adding dhall freeze support for transitively following imports could present UX challenges

For example:

  • attempting to freeze transitive dependencies that you don't have permission to modify
  • freezing dependencies outside of your current project by mistake
@retnuh

This comment has been minimized.

Copy link
Author

@retnuh retnuh commented Nov 14, 2019

maybe an option for following local file based dependencies, but not network dependencies?

@Gabriel439

This comment has been minimized.

Copy link
Collaborator

@Gabriel439 Gabriel439 commented Nov 14, 2019

@retnuh: Those issues still apply to only file-based dependencies

@retnuh

This comment has been minimized.

Copy link
Author

@retnuh retnuh commented Nov 14, 2019

Yes it does start to become tricky UX wise - maybe specify a list of allowed root paths? I dunno, I'm no UX expert. But now we've got resolve to help with our own tools at least 😉 🎉

@sjakobi

This comment has been minimized.

Copy link
Collaborator

@sjakobi sjakobi commented Nov 16, 2019

I'll move this to the dhall-haskell repo, where the relevant code lives.

@sjakobi sjakobi transferred this issue from dhall-lang/dhall-lang Nov 16, 2019
@sjakobi sjakobi added the enhancement label Nov 16, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
3 participants
You can’t perform that action at this time.