Abstract git support
add Mercurial support