errors: introduce InputError and use it from commands and cmdutil
This patch introduces a `InputError` class and replaces many uses of
`error.Abort` by it in `commands` and `cmdutil`. This is a part of
https://www.mercurial-scm.org/wiki/ErrorCategoriesPlan. There will
later be a different class for state errors (to raise e.g. when
there's an unfinished operation). It's not always clear when one
should report an input error and when it should be a state error. We
can always adjust later if I got something wrong in this patch (but
feel free to point out any you notice now).
Differential Revision: https://phab.mercurial-scm.org/D9167
$ hg init
$ touch a
$ hg add a
$ hg ci -m "a"
$ echo 123 > b
$ hg add b
$ hg diff --nodates
diff -r 3903775176ed b
--- /dev/null
+++ b/b
@@ -0,0 +1,1 @@
+123
$ hg diff --nodates -r tip
diff -r 3903775176ed b
--- /dev/null
+++ b/b
@@ -0,0 +1,1 @@
+123
$ echo foo > a
$ hg diff --nodates
diff -r 3903775176ed a
--- a/a
+++ b/a
@@ -0,0 +1,1 @@
+foo
diff -r 3903775176ed b
--- /dev/null
+++ b/b
@@ -0,0 +1,1 @@
+123
$ hg diff -r ""
hg: parse error: empty query
[255]
$ hg diff -r tip -r ""
hg: parse error: empty query
[255]
Remove a file that was added via merge. Since the file is not in parent 1,
it should not be in the diff.
$ hg ci -m 'a=foo' a
$ hg co -Cq null
$ echo 123 > b
$ hg add b
$ hg ci -m "b"
created new head
$ hg merge 1
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg rm -f a
$ hg diff --nodates
Rename a file that was added via merge. Since the rename source is not in
parent 1, the diff should be relative to /dev/null
$ hg co -Cq 2
$ hg merge 1
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg mv a a2
$ hg diff --nodates
diff -r cf44b38435e5 a2
--- /dev/null
+++ b/a2
@@ -0,0 +1,1 @@
+foo
$ hg diff --nodates --git
diff --git a/a2 b/a2
new file mode 100644
--- /dev/null
+++ b/a2
@@ -0,0 +1,1 @@
+foo