Merge pull request #5146 from unisonweb/24-06-26-port-old-merge-transcripts

This commit is contained in:
Arya Irani 2024-06-28 03:45:57 -04:00 committed by GitHub
commit 71eed210ce
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 155 additions and 379 deletions

View File

@ -32,28 +32,18 @@ How about an ambiguous term?
```unison:hide
foo = 1
bar = 2
```
```ucm
.a> add
```
```unison:hide
foo = 2
```
```ucm
.b> add
.a> merge.old .b
.a> debug.alias.term.force bar foo
```
A delete should remove both versions of the term.
```ucm
.> delete.verbose a.foo
```
```ucm:error
.a> ls
```
@ -61,26 +51,13 @@ Let's repeat all that on a type, for completeness.
```unison:hide
structural type Foo = Foo ()
structural type Bar = Bar
```
```ucm
.a> add
```
```unison:hide
structural type Foo = Foo
```
```ucm
.b> add
.a> merge.old .b
```
```ucm
.a> debug.alias.type.force Bar Foo
.> delete.verbose a.Foo
```
```ucm
.> delete.verbose a.Foo.Foo
```
@ -93,9 +70,6 @@ structural type foo = Foo ()
```ucm
.> add
```
```ucm
.> delete.verbose foo
```

View File

@ -59,6 +59,7 @@ How about an ambiguous term?
```unison
foo = 1
bar = 2
```
```ucm
@ -68,40 +69,12 @@ foo = 1
⍟ I've added these definitions:
bar : ##Nat
foo : ##Nat
```
```unison
foo = 2
```
.a> debug.alias.term.force bar foo
```ucm
☝️ The namespace .b is empty.
.b> add
⍟ I've added these definitions:
foo : ##Nat
.a> merge.old .b
Here's what's changed in the current namespace after the
merge:
New name conflicts:
1. foo#gjmq673r1v : ##Nat
2. ┌ foo#dcgdua2lj6 : ##Nat
3. └ foo#gjmq673r1v : ##Nat
Tip: You can use `todo` to see if this generated any work to
do in this namespace and `test` to run the tests. Or you
can use `undo` or `reflog` to undo the results of this
merge.
Applying changes from patch...
Done.
```
A delete should remove both versions of the term.
@ -116,24 +89,21 @@ A delete should remove both versions of the term.
Name changes:
Original Changes
2. b.foo ┐ 3. a.foo#dcgdua2lj6 (removed)
2. a.bar ┐ 3. a.foo#dcgdua2lj6 (removed)
4. a.foo#dcgdua2lj6 ┘
Tip: You can use `undo` or `reflog` to undo this change.
```
```ucm
☝️ The namespace .a is empty.
.a> ls
nothing to show
1. bar (##Nat)
```
Let's repeat all that on a type, for completeness.
```unison
structural type Foo = Foo ()
structural type Bar = Bar
```
```ucm
@ -141,46 +111,13 @@ structural type Foo = Foo ()
⍟ I've added these definitions:
structural type Bar
structural type Foo
```
```unison
structural type Foo = Foo
```
.a> debug.alias.type.force Bar Foo
```ucm
.b> add
Done.
⍟ I've added these definitions:
structural type Foo
.a> merge.old .b
Here's what's changed in the current namespace after the
merge:
New name conflicts:
1. structural type Foo#089vmor9c5
2. ┌ structural type Foo#00nv2kob8f
3. └ structural type Foo#089vmor9c5
4. Foo.Foo#089vmor9c5#0 : 'Foo#089vmor9c5
5. ┌ Foo.Foo#00nv2kob8f#0 : ()
6. └ Foo.Foo#089vmor9c5#0 : 'Foo#089vmor9c5
Tip: You can use `todo` to see if this generated any work to
do in this namespace and `test` to run the tests. Or you
can use `undo` or `reflog` to undo the results of this
merge.
Applying changes from patch...
```
```ucm
.> delete.verbose a.Foo
Removed definitions:
@ -190,26 +127,17 @@ structural type Foo = Foo
Name changes:
Original Changes
2. b.Foo ┐ 3. a.Foo#00nv2kob8f (removed)
2. a.Bar ┐ 3. a.Foo#00nv2kob8f (removed)
4. builtin.Unit │
5. a.Foo#00nv2kob8f ┘
Tip: You can use `undo` or `reflog` to undo this change.
```
```ucm
.> delete.verbose a.Foo.Foo
Removed definitions:
1. a.Foo.Foo#089vmor9c5#0 : '#089vmor9c5
Name changes:
Original Changes
2. b.Foo.Foo ┐ 3. a.Foo.Foo#00nv2kob8f#0 (removed)
4. builtin.Unit.Unit │
5. a.Foo.Foo#00nv2kob8f#0 ┘
1. a.Foo.Foo : '#089vmor9c5
Tip: You can use `undo` or `reflog` to undo this change.
@ -229,8 +157,6 @@ structural type foo = Foo ()
structural type foo
foo : Nat
```
```ucm
.> delete.verbose foo
Removed definitions:
@ -354,7 +280,7 @@ d = a + b + c
a : Nat
b : Nat
(also named b.foo)
(also named a.bar)
c : Nat
d : Nat

View File

@ -3,23 +3,19 @@
```
```unison:hide
x = 23
b1.x = 23
b1.fslkdjflskdjflksjdf = 663
b2.x = 23
b2.fslkdjflskdjflksjdf = 23
b2.abc = 23
```
```ucm
.b1> add
.b1> alias.term x fslkdjflskdjflksjdf
.> fork b1 b2
.b2> alias.term x abc
```
```unison:hide
fslkdjflskdjflksjdf = 663
.> add
.> debug.alias.term.force b1.x b1.fslkdjflskdjflksjdf
```
```ucm
.b0> add
.> merge.old b0 b1
.> diff.namespace b1 b2
.b2> diff.namespace .b1
```
@ -63,12 +59,13 @@ Here's what we've done so far:
```
```unison:hide
fromJust = "asldkfjasldkfj"
junk = "asldkfjasldkfj"
```
```ucm
.ns1b> add
.> merge.old ns1b ns1
.ns1> add
.ns1> debug.alias.term.force junk fromJust
.ns1> delete.term junk
```
```unison:hide
@ -104,33 +101,40 @@ bdependent = "banana"
## Two different auto-propagated changes creating a name conflict
Currently, the auto-propagated name-conflicted definitions are not explicitly
shown, only their also-conflicted dependency is shown.
```unison:hide
a = 333
b = a + 1
```
```ucm
.nsx> add
.> fork nsx nsy
.> fork nsx nsz
```
```unison:hide
a = 444
```
```ucm
.nsy> update.old
```
```unison:hide
a = 555
```
```ucm
.nsz> update.old
.> merge.old nsy nsw
```
```ucm:error
.> merge.old nsz nsw
.> fork nsy nsw
.> debug.alias.term.force nsz.a nsw.a
.> debug.alias.term.force nsz.b nsw.b
```
```ucm
.> diff.namespace nsx nsw
.nsw> view a b

View File

@ -1,60 +1,28 @@
```unison
x = 23
b1.x = 23
b1.fslkdjflskdjflksjdf = 663
b2.x = 23
b2.fslkdjflskdjflksjdf = 23
b2.abc = 23
```
```ucm
☝️ The namespace .b1 is empty.
.b1> add
.> add
⍟ I've added these definitions:
x : ##Nat
b1.fslkdjflskdjflksjdf : Nat
b1.x : Nat
b2.abc : Nat
b2.fslkdjflskdjflksjdf : Nat
b2.x : Nat
.b1> alias.term x fslkdjflskdjflksjdf
Done.
.> fork b1 b2
Done.
.b2> alias.term x abc
.> debug.alias.term.force b1.x b1.fslkdjflskdjflksjdf
Done.
```
```unison
fslkdjflskdjflksjdf = 663
```
```ucm
☝️ The namespace .b0 is empty.
.b0> add
⍟ I've added these definitions:
fslkdjflskdjflksjdf : ##Nat
.> merge.old b0 b1
Here's what's changed in b1 after the merge:
New name conflicts:
1. fslkdjflskdjflksjdf#u520d1t9kc : Nat
2. ┌ fslkdjflskdjflksjdf#sekb3fdsvb : Nat
3. └ fslkdjflskdjflksjdf#u520d1t9kc : Nat
Tip: You can use `todo` to see if this generated any work to
do in this namespace and `test` to run the tests. Or you
can use `undo` or `reflog` to undo the results of this
merge.
Applying changes from patch...
.> diff.namespace b1 b2
Resolved name conflicts:
@ -155,35 +123,23 @@ Here's what we've done so far:
```
```unison
fromJust = "asldkfjasldkfj"
junk = "asldkfjasldkfj"
```
```ucm
☝️ The namespace .ns1b is empty.
.ns1b> add
.ns1> add
⍟ I've added these definitions:
fromJust : ##Text
junk : ##Text
.> merge.old ns1b ns1
.ns1> debug.alias.term.force junk fromJust
Here's what's changed in ns1 after the merge:
New name conflicts:
1. fromJust#gjmq673r1v : Nat
2. ┌ fromJust#gjmq673r1v : Nat
3. └ fromJust#rnbo52q2sh : Text
Tip: You can use `todo` to see if this generated any work to
do in this namespace and `test` to run the tests. Or you
can use `undo` or `reflog` to undo the results of this
merge.
Done.
Applying changes from patch...
.ns1> delete.term junk
Done.
```
```unison
@ -356,8 +312,10 @@ bdependent = "banana"
```
## Two different auto-propagated changes creating a name conflict
Currently, the auto-propagated name-conflicted definitions are not explicitly
shown, only their also-conflicted dependency is shown.
```unison
a = 333
b = a + 1
@ -405,55 +363,17 @@ a = 555
a : ##Nat
.> merge.old nsy nsw
.> fork nsy nsw
Here's what's changed in nsw after the merge:
Added definitions:
1. a : Nat
2. b : Nat
3. patch patch (added 1 updates)
Tip: You can use `todo` to see if this generated any work to
do in this namespace and `test` to run the tests. Or you
can use `undo` or `reflog` to undo the results of this
merge.
Done.
Applying changes from patch...
.> debug.alias.term.force nsz.a nsw.a
```
```ucm
.> merge.old nsz nsw
Done.
Here's what's changed in nsw after the merge:
New name conflicts:
1. a#mdl4vqtu00 : Nat
2. ┌ a#mdl4vqtu00 : Nat
3. └ a#vrs8gtkl2t : Nat
4. b#unkqhuu66p : Nat
5. ┌ b#aapqletas7 : Nat
6. └ b#unkqhuu66p : Nat
Updates:
7. patch patch (added 1 updates)
Tip: You can use `todo` to see if this generated any work to
do in this namespace and `test` to run the tests. Or you
can use `undo` or `reflog` to undo the results of this
merge.
.> debug.alias.term.force nsz.b nsw.b
Applying changes from patch...
I tried to auto-apply the patch, but couldn't because it
contained contradictory entries.
Done.
```
```ucm
@ -473,7 +393,7 @@ a = 555
Added definitions:
7. patch patch (added 2 updates)
7. patch patch (added 1 updates)
.nsw> view a b

View File

@ -12,46 +12,40 @@ This transcript shows how the pretty-printer picks names for a hash when multipl
```
```unison:hide
a = b + 1
b = 0 + 1
a.a = a.b + 1
a.b = 0 + 1
a.aaa.but.more.segments = 0 + 1
```
Will add `a` and `b` to the codebase and give `b` a longer (in terms of segment length alias), and show that it isn't used when viewing `a`:
```ucm
.a> add
.a> alias.term b aaa.but.more.segments
.> add
.a> view a
```
Next let's introduce a conflicting symbol and show that its hash qualified name isn't used when it has an unconflicted name:
```
.> fork a a2
.> fork a a3
```
```unison:hide
c = 1
d = c + 10
```
a2.a = a2.b + 1
a2.b = 0 + 1
a2.aaa.but.more.segments = 0 + 1
a2.c = 1
a2.d = a2.c + 10
a2.long.name.but.shortest.suffixification = 1
```ucm:hide
.a2> builtins.merge
```
```ucm
.a2> add
.a2> alias.term c long.name.but.shortest.suffixification
```
```unison:hide
c = 2
d = c + 10
a3.a = a3.b + 1
a3.b = 0 + 1
a3.aaa.but.more.segments = 0 + 1
a3.c = 2
a3.d = a3.c + 10
a3.long.name.but.shortest.suffixification = 1
```
```ucm
.a3> add
.a3> merge.old .a2 .a3
.> add
.> debug.alias.term.force a2.c a3.c
.> debug.alias.term.force a2.d a3.d
```
At this point, `a3` is conflicted for symbols `c` and `d`, so those are deprioritized.

View File

@ -5,23 +5,21 @@ This transcript shows how the pretty-printer picks names for a hash when multipl
3. Otherwise if there are multiple names with a minimal number of segments, compare the names alphabetically.
```unison
a = b + 1
b = 0 + 1
a.a = a.b + 1
a.b = 0 + 1
a.aaa.but.more.segments = 0 + 1
```
Will add `a` and `b` to the codebase and give `b` a longer (in terms of segment length alias), and show that it isn't used when viewing `a`:
```ucm
.a> add
.> add
⍟ I've added these definitions:
a : Nat
b : Nat
.a> alias.term b aaa.but.more.segments
Done.
a.a : Nat
a.aaa.but.more.segments : Nat
a.b : Nat
.a> view a
@ -33,70 +31,53 @@ Will add `a` and `b` to the codebase and give `b` a longer (in terms of segment
```
Next let's introduce a conflicting symbol and show that its hash qualified name isn't used when it has an unconflicted name:
```
.> fork a a2
.> fork a a3
```
```unison
c = 1
d = c + 10
a2.a = a2.b + 1
a2.b = 0 + 1
a2.aaa.but.more.segments = 0 + 1
a2.c = 1
a2.d = a2.c + 10
a2.long.name.but.shortest.suffixification = 1
a3.a = a3.b + 1
a3.b = 0 + 1
a3.aaa.but.more.segments = 0 + 1
a3.c = 2
a3.d = a3.c + 10
a3.long.name.but.shortest.suffixification = 1
```
```ucm
.a2> add
.> add
⍟ I've added these definitions:
c : Nat
d : Nat
a2.a : Nat
(also named a.a)
a2.aaa.but.more.segments : Nat
(also named a.b and a.aaa.but.more.segments)
a2.b : Nat
(also named a.b and a.aaa.but.more.segments)
a2.c : Nat
a2.d : Nat
a2.long.name.but.shortest.suffixification : Nat
a3.a : Nat
(also named a.a)
a3.aaa.but.more.segments : Nat
(also named a.b and a.aaa.but.more.segments)
a3.b : Nat
(also named a.b and a.aaa.but.more.segments)
a3.c : Nat
a3.d : Nat
a3.long.name.but.shortest.suffixification : Nat
.a2> alias.term c long.name.but.shortest.suffixification
.> debug.alias.term.force a2.c a3.c
Done.
```
```unison
c = 2
d = c + 10
```
.> debug.alias.term.force a2.d a3.d
```ucm
.a3> add
⍟ I've added these definitions:
c : Nat
d : Nat
.a3> merge.old .a2 .a3
Here's what's changed in .a3 after the merge:
New name conflicts:
1. c#dcgdua2lj6 : Nat
2. ┌ c#dcgdua2lj6 : Nat
3. └ c#gjmq673r1v : Nat
4. d#9ivhgvhthc : Nat
5. ┌ d#9ivhgvhthc : Nat
6. └ d#ve16e6jmf6 : Nat
Added definitions:
7. ┌ c#gjmq673r1v : Nat
8. └ long.name.but.shortest.suffixification : Nat
Tip: You can use `todo` to see if this generated any work to
do in this namespace and `test` to run the tests. Or you
can use `undo` or `reflog` to undo the results of this
merge.
Applying changes from patch...
Done.
```
At this point, `a3` is conflicted for symbols `c` and `d`, so those are deprioritized.

View File

@ -1,28 +1,28 @@
# Update on conflict
Updating conflicted definitions works fine.
```ucm:hide
.> builtins.merge
.merged> builtins.merge
```
```unison
a.x = 1
b.x = 2
x = 1
temp = 2
```
Cause a conflict:
```ucm
.> add
.merged> merge.old .a
.merged> merge.old .b
.> debug.alias.term.force temp x
.> delete.term temp
```
Updating conflicted definitions works fine.
```unison
x = 3
```
```ucm
.merged> update
.> update
.> view x
```

View File

@ -1,8 +1,10 @@
# Update on conflict
Updating conflicted definitions works fine.
```unison
a.x = 1
b.x = 2
x = 1
temp = 2
```
```ucm
@ -15,57 +17,27 @@ b.x = 2
⍟ These new definitions are ok to `add`:
a.x : Nat
b.x : Nat
temp : Nat
x : Nat
```
Cause a conflict:
```ucm
.> add
⍟ I've added these definitions:
a.x : Nat
b.x : Nat
temp : Nat
x : Nat
.merged> merge.old .a
.> debug.alias.term.force temp x
Here's what's changed in the current namespace after the
merge:
Added definitions:
1. x : Nat
Tip: You can use `todo` to see if this generated any work to
do in this namespace and `test` to run the tests. Or you
can use `undo` or `reflog` to undo the results of this
merge.
Done.
Applying changes from patch...
.> delete.term temp
.merged> merge.old .b
Here's what's changed in the current namespace after the
merge:
New name conflicts:
1. x#gjmq673r1v : Nat
2. ┌ x#dcgdua2lj6 : Nat
3. └ x#gjmq673r1v : Nat
Tip: You can use `todo` to see if this generated any work to
do in this namespace and `test` to run the tests. Or you
can use `undo` or `reflog` to undo the results of this
merge.
Applying changes from patch...
Done.
```
Updating conflicted definitions works fine.
```unison
x = 3
```
@ -85,11 +57,16 @@ x = 3
```
```ucm
.merged> update
.> update
Okay, I'm searching the branch for code that needs to be
updated...
Done.
.> view x
x : Nat
x = 3
```