sapling/tests/test-merge-ancestor-mergestate.t
Phil Cohen de12a9e09c merge: add ancestors as transient propeties to mergestate
Summary:
We need a way for mergedrivers to be able to read ancestor data (to properly detect a backwards merge, such as during `hg backout`).

Passing it directly is tricky since passing a new kwarg to functions without `**args` raises a `TypeError`. We'd have to update the hook framework to catch this `TypeError` and re-run the hook without the kwarg, which would be hard to do cleanly.

Rather, we can just add this as a transient property on `mergestate`, which seems like an appropriate place for it. Any callers trying to read this when it hasn't been set will get an exception. But there aren't any other users of this field since it hasn't existed before.

Reviewed By: quark-zju

Differential Revision: D12827614

fbshipit-source-id: 48dc84f1e60232625c8f2a73e81b5bc223c22bb3
2018-10-29 21:04:02 -07:00

63 lines
1.7 KiB
Raku

Verify ancestry data is readable by mergedrivers by looking at mergestate:
$ newrepo
$ enable rebase
$ setconfig experimental.evolution=
$ setconfig rebase.singletransaction=True
$ setconfig rebase.experimental.inmemory=True
$ mkdir driver
$ cat > driver/__init__.py <<EOF
> def preprocess(ui, repo, hooktype, mergestate, wctx, labels=None):
> unresolved_files = list(mergestate.unresolved())
> ui.warn("ancestor nodes = %s\n" % [ctx.hex() for ctx in mergestate.ancestorctxs])
> ui.warn("ancestor revs = %s\n" % [ctx.rev() for ctx in mergestate.ancestorctxs])
> mergestate.commit()
> def conclude(ui, repo, hooktype, mergestate, wctx, labels=None):
> pass
> EOF
$ setconfig experimental.mergedriver=python:driver/
$ hg commit -Aqm "driver"
$ hg debugdrawdag <<'EOS'
> E # E/file = 1\n2\n3\n4\n5
> |
> D
> |
> C F b # F/file = 0\n1\n2\n3\n4
> |/
> B
> |
> A # A/file = 1\n2\n3\n4
> EOS
$ hg rebase -s A -d 0
rebasing 1:19c6d3b0d8fb "A" (A)
rebasing 3:5a83467e1fc3 "B" (B)
rebasing 5:09810f6b52c0 "F" (F)
rebasing 4:3ff755c5931b "C" (C)
rebasing 6:dc7f2675f9ab "D" (D)
rebasing 7:5eb863826611 "E" (E tip)
saved backup bundle to $TESTTMP/repo1/.hg/strip-backup/19c6d3b0d8fb-a2cf1ad8-rebase.hg
$ showgraph
o 7 e71547946f82 E
|
o 6 264c021e8fc6 D
|
o 5 34e41e21cd9d C
|
| o 4 aa431a9572c1 F
|/
o 3 01ba3ad89eb7 B
|
o 2 622e2d864a27 A
|
| o 1 520a9f665f6e b
|
@ 0 9309aa3b805a driver
$ hg rebase -r aa431a9572c1 -d e71547946f82
rebasing 4:aa431a9572c1 "F"
ancestor nodes = ['01ba3ad89eb70070d81f052c0c40a3877c2ba5d8']
ancestor revs = [3]
merging file
saved backup bundle to $TESTTMP/repo1/.hg/strip-backup/aa431a9572c1-13824be1-rebase.hg