phabricator: use Phabricator's last node information
This makes it more strict when checking whether or not we should update a
Differential Revision. For example,
a) Alice updates D1 to content 1.
b) Bob updates D1 to content 2.
c) Alice tries to update D1 to content 1.
Previously, `c)` will do nothing because `phabsend` detects the patch is not
changed. A more correct behavior is to override Bob's update here, hence the
patch.
This also makes it possible to return a reaonsable "last node" when there is
no tags but only `Differential Revision` commit messages.
Test Plan:
```
for i in A B C; do echo $i > $i; hg ci -m $i -A $i; done
hg phabsend 0::
# D40: created
# D41: created
# D42: created
echo 3 >> C; hg amend; hg phabsend .
# D42: updated
hg tag --local --hidden -r 2 -f D42
# move tag to the previous version
hg phabsend .
# D42: skipped (previously it would be "updated")
rm -rf .hg; hg init
hg phabread --stack D42 | hg import -
hg phabsend .
# D42: updated
hg tag --local --remove D42
hg commit --amend
hg phabsend .
# D42: updated (no new diff uploaded, previously it will upload a new diff)
```
The old diff object is now returned, which could be useful in the next
patch.
Differential Revision: https://phab.mercurial-scm.org/D121
https://bz.mercurial-scm.org/1175
$ hg init
$ touch a
$ hg ci -Am0
adding a
$ hg mv a a1
$ hg ci -m1
$ hg co 0
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ hg mv a a2
$ hg up
note: possible conflict - a was renamed multiple times to:
a2
a1
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg ci -m2
$ touch a
$ hg ci -Am3
adding a
$ hg mv a b
$ hg ci -Am4 a
$ hg ci --debug --traceback -Am5 b
committing files:
b
warning: can't find ancestor for 'b' copied from 'a'!
committing manifest
committing changelog
updating the branch cache
committed changeset 5:83a687e8a97c80992ba385bbfd766be181bfb1d1
$ hg verify
checking changesets
checking manifests
crosschecking files in changesets and manifests
checking files
4 files, 6 changesets, 4 total revisions
$ hg export --git tip
# HG changeset patch
# User test
# Date 0 0
# Thu Jan 01 00:00:00 1970 +0000
# Node ID 83a687e8a97c80992ba385bbfd766be181bfb1d1
# Parent 1d1625283f71954f21d14c3d44d0ad3c019c597f
5
diff --git a/b b/b
new file mode 100644
https://bz.mercurial-scm.org/show_bug.cgi?id=4476
$ hg init foo
$ cd foo
$ touch a && hg ci -Aqm a
$ hg mv a b
$ echo b1 >> b
$ hg ci -Aqm b1
$ hg up 0
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ hg mv a b
$ echo b2 >> b
$ hg ci -Aqm b2
$ hg graft 1
grafting 1:5974126fad84 "b1"
merging b
warning: conflicts while merging b! (edit, then use 'hg resolve --mark')
abort: unresolved conflicts, can't continue
(use 'hg resolve' and 'hg graft --continue')
[255]
$ echo a > b
$ echo b3 >> b
$ hg resolve --mark b
(no more unresolved files)
continue: hg graft --continue
$ hg graft --continue
grafting 1:5974126fad84 "b1"
warning: can't find ancestor for 'b' copied from 'a'!
$ hg log -f b -T 'changeset: {rev}:{node|short}\nsummary: {desc}\n\n'
changeset: 3:376d30ccffc0
summary: b1
changeset: 2:416baaa2e5e4
summary: b2
changeset: 0:3903775176ed
summary: a