amend: do not traceback on no-ops
If rewrite() generated changeset happened to be an existing one, the
call would traceback when trying to obsolete the changeset with itself.
Instead, leave gracefully, marking any intermediate changeset extinct.
$ cat >> $HGRCPATH <<EOF
> [defaults]
> amend=-d "0 0"
> [extensions]
> hgext.rebase=
> hgext.graphlog=
> EOF
$ echo "obsolete=$(echo $(dirname $TESTDIR))/hgext/obsolete.py" >> $HGRCPATH
$ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> $HGRCPATH
$ glog() {
> hg glog --template '{rev}@{branch}({phase}) {desc|firstline}\n' "$@"
> }
$ hg init repo
$ cd repo
$ echo a > a
$ hg ci -Am adda
adding a
Test amend captures branches
$ hg branch foo
marked working directory as branch foo
(branches are permanent and global, did you want a bookmark?)
$ hg amend
$ hg branch
foo
$ hg branches
foo 2:a34b93d251e4
default 0:07f494440405 (inactive)
$ glog
@ 2@foo(draft) adda
Test no-op
$ hg amend
abort: no updates found
[255]
$ glog
@ 2@foo(draft) adda
Test forcing the message to the same value, no intermediate revision.
$ hg amend -m 'adda'
abort: no updates found
[255]
$ glog
@ 2@foo(draft) adda
Test collapsing into an existing revision, no intermediate revision.
$ echo a >> a
$ hg ci -m changea
$ echo a > a
$ hg ci -m reseta
$ hg amend --change 2
abort: no updates found
[255]
$ hg phase 2
2: draft
$ glog
@ 4@foo(draft) reseta
|
o 3@foo(draft) changea
|
o 2@foo(draft) adda
Test collapsing into an existing rev, with an intermediate revision.
$ hg branch --force default
marked working directory as branch default
(branches are permanent and global, did you want a bookmark?)
$ hg ci -m resetbranch
created new head
$ hg branch --force foo
marked working directory as branch foo
(branches are permanent and global, did you want a bookmark?)
$ hg amend --change 2
abort: no updates found
[255]
$ glog
@ 6@foo(secret) amends a34b93d251e49c93d5685ebacad785c73a7e8605
|
o 5@default(draft) resetbranch
|
o 4@foo(draft) reseta
|
o 3@foo(draft) changea
|
o 2@foo(draft) adda