unison/unison-src/transcripts/deep-names.output.md
2024-07-31 16:41:00 -07:00

1.9 KiB

First we'll set up two libraries, and then we'll use them in some projects and show what names are deep-loaded for them.

Our two "libraries":

text.a = 1
text.b = 2
text.c = 3

http.x = 6
http.y = 7
http.z = 8

Our app1 project includes the text library twice and the http library twice as direct dependencies.

scratch/app1> fork text lib.text_v1

  Done.

scratch/app1> fork text lib.text_v2

  Done.

scratch/app1> delete.namespace text

  Done.

scratch/app1> fork http lib.http_v3

  Done.

scratch/app1> fork http lib.http_v4

  Done.

scratch/app1> delete.namespace http

  Done.

As such, we see two copies of a and two copies of x via these direct dependencies.

scratch/app1> names a

  Term
  Hash:   #gjmq673r1v
  Names:  lib.text_v1.a lib.text_v2.a

scratch/app1> names x

  Term
  Hash:   #nsmc4p1ra4
  Names:  lib.http_v3.x lib.http_v4.x

Our app2 project includes the http library twice as direct dependencies, and once as an indirect dependency via webutil. It also includes the text library twice as indirect dependencies via webutil

scratch/app2> fork http lib.http_v1

  Done.

scratch/app2> fork http lib.http_v2

  Done.

scratch/app2> fork text lib.webutil.lib.text_v1

  Done.

scratch/app2> fork text lib.webutil.lib.text_v2

  Done.

scratch/app2> fork http lib.webutil.lib.http

  Done.

scratch/app2> delete.namespace http

  Done.

scratch/app2> delete.namespace text

  Done.

Now we see two copies of x via direct dependencies on http, and one copy of a via indirect dependency on text via webutil. We see neither the second indirect copy of a nor the indirect copy of x via webutil because we already have names for them.

scratch/app2> names a

  Term
  Hash:   #gjmq673r1v
  Names:  lib.webutil.lib.text_v1.a

scratch/app2> names x

  Term
  Hash:   #nsmc4p1ra4
  Names:  lib.http_v1.x lib.http_v2.x