absorb: preserve changesets which were already empty
Most commands in Mercurial (commit, rebase, absorb itself) don’t create empty
changesets or drop them if they become empty. If there’s a changeset that’s
empty, it must be a deliberate choice of the user. At least it shouldn’t be
absorb’s responsibility to prune them. The fact that changesets that became
empty during absorb are pruned, is unaffected by this.
This case was found while writing patches which make it possible to configure
absorb and rebase to not drop empty changesets. Even without having such config
set, I think it’s valuable to preserve changesets which were already empty.
$ cat >> $HGRCPATH <<EOF
> [extensions]
> convert=
> EOF
Prepare orig repo
$ hg init orig
$ cd orig
$ echo foo > foo
$ HGUSER='user name' hg ci -qAm 'foo'
$ cd ..
Explicit --authors
$ cat > authormap.txt <<EOF
> user name = Long User Name
>
> # comment
> this line is ignored
> EOF
$ hg convert --authors authormap.txt orig new
initializing destination new repository
ignoring bad line in author map file authormap.txt: this line is ignored
scanning source...
sorting...
converting...
0 foo
writing author map file $TESTTMP/new/.hg/authormap
$ cat new/.hg/authormap
user name=Long User Name
$ hg -Rnew log
changeset: 0:d89716e88087
tag: tip
user: Long User Name
date: Thu Jan 01 00:00:00 1970 +0000
summary: foo
$ rm -rf new
Implicit .hg/authormap
$ hg init new
$ mv authormap.txt new/.hg/authormap
$ hg convert orig new
ignoring bad line in author map file $TESTTMP/new/.hg/authormap: this line is ignored
scanning source...
sorting...
converting...
0 foo
$ hg -Rnew log
changeset: 0:d89716e88087
tag: tip
user: Long User Name
date: Thu Jan 01 00:00:00 1970 +0000
summary: foo