Defect #30723 xbump over gitlab doesn't fail if asked revision is not present

    1. Improving xutils.xerror.XUtilsError class:

        a) __str__ must be more informative; especially the traceback uses str().

        This (after modifications):

Traceback (most recent call last):
  File "tests/test_gitcmd.py", line 127, in testResolve_abracadabra
    self.cmd.get_hash(URI_LOCAL, 'abracadabra'),
  File "/root/genbox_xutils/tests/../xutils/scm/gitcmd.py", line 111, in get_hash
    num=cmd_ret, error_log=err)
XUtilsError: Git command error (num=128): fatal: Needed a single revision

        is better than (before modifications):

Traceback (most recent call last):
  File "tests/test_gitcmd.py", line 127, in testResolve_abracadabra
    self.cmd.get_hash(URI_LOCAL, 'abracadabra'),
  File "/root/genbox_xutils/tests/../xutils/scm/gitcmd.py", line 110, in get_hash
    raise XUtilsError(error='Git command error', error_log=err)
XUtilsError: Git command error

        b) adding __repr__() implementation

    2. Rewriting the corresponding unittests - tests/test_xerror.py:

        a) adding more tests (with and wihtout num, error_log, repr)

        b) deprecated names have been replaced (failUnlessEqual -> assertEqual)
        https://docs.python.org/3.3/library/unittest.html#deprecated-aliases
﻿Defect #30723 xbump over gitlab doesn't fail if asked revision is not present

    1. xutils/scm/gitcmd.py has been rewritten:

        a) One Base class and two concrete classes Local and Remote - instead
    of one GitCmd.

        b) Module functions were introduced: is_hash(v), is_remote(uri) and
    create_cmd(uri).

        c) warnings if in the remote mode we cannot be sure that revision
    belongs to the branch and that resolution was got not with initial version.

        d) xutils/scm/__init__.py: create_git_cmd() function instaed of
    GitCmd class is used.

    2. Syncing changes in xutils/ebuild/ebuild*.py:

        a) ebuild_ov.py: the hand-written in-place code has been replaced
    with cmd.get_hash(version).

        b) ebuild_git.py: git command is created on-demand, it keeps uri

        c) ebuild_git.py: trying to dereference the version with the help
    of ^{} prefix

    3. unittests:

        a) Deprecated alias in unittests have been replaced
    failUnlessEqual -> assertEqual(), etc.

        b) More tests (51 -> 99), corrections, improvements, ...
setup.py: updated version to 2.3.0