Pular para o conteúdo principal

desempenho_svn_x_hg_x_git.sh (Código)

#!/bin/bash
# Teste de desempenho entre Subversion, Git e Mercurial

# Real, User, Sys
TIMEFORMAT=" %R, %U, %S"

function mede {
    echo $1 | cut -f 2 -d ' ' | tr '\n' ','
    time $1 1> /dev/null 2>&1
}

function alteracoes {
    case "$1" in
        1)
            for comando in 'add' 'commit' 'merge' 'log' 'rebase' 'diff' 'pull'; do
                # texto do git foi escolhido por ser mais extenso
                (git help $comando) > $comando.txt
            done
            ;;

        2)
            sed -i 's/edit hello.c/nano ola_mundo.py/g' commit.txt
            sed -i 's/log/nhem-nhem-nhem/g' log.txt
            sed -i 's/pull/nhem-nhem-nhem/g' pull.txt
            ;;

        3)
            git help rebase >> log.txt
            sed -i 's/commit/blablabla/g' commit.txt
            sed -i 's/diff/blablabla/g' diff.txt
            ;;
    esac
}


#
# Subversion
#

echo '-----------------------------'
svn --version | grep '\bversion'
echo '-----------------------------'
echo 'comando, real, user, sys'

cd /tmp
if [ -d "svn-repos" ]; then
    rm -rf svn-repos
fi
if [ -d "svn-1" ]; then
    rm -rf svn-1
fi
if [ -d "svn-2" ]; then
    rm -rf svn-2
fi

mede 'svnadmin create svn-repos'
mede 'svn mkdir file:///tmp/svn-repos/trunk file:///tmp/svn-repos/branches file:///tmp/svn-repos/tags -m estrutura_inicial'
mede 'svn checkout file:///tmp/svn-repos/trunk svn-1'

cd /tmp/svn-1
alteracoes 1

mede 'svn add *'
mede 'svn commit -m adicao'

cd /tmp
mede 'svn checkout file:///tmp/svn-repos/trunk svn-2'

cd /tmp/svn-1
alteracoes 2

mede 'svn diff'
mede 'svn status'
mede 'svn commit -m blablabla'

cd /tmp/svn-2
alteracoes 3

mede 'svn diff'
mede 'svn status'
mede 'svn update'
mede 'svn commit -m ola_mundo_nhem-nhem-nhem'
mede 'svn log'



#
# Mercurial
#

echo
echo '-----------------------------------------'
hg version | grep vers
echo '-----------------------------------------'
echo 'comando, real, user, sys'

cd /tmp
if [ -d "hg-1" ]; then
    rm -rf hg-1
fi
if [ -d "hg-2" ]; then
    rm -rf hg-2
fi

mede 'hg init hg-1'

cd /tmp/hg-1
alteracoes 1
mede 'hg add'
mede 'hg commit -m adicao -u teste'

cd /tmp
mede 'hg clone hg-1 hg-2'

cd /tmp/hg-1
alteracoes 2

mede 'hg diff'
mede 'hg status'
mede 'hg commit -m blablabla -u teste'

cd /tmp/hg-2
alteracoes 3

mede 'hg diff'
mede 'hg status'
mede 'hg commit -m ola_mundo_nhem-nhem-nhem -u teste'
mede 'hg pull'
# Na instalação do TortoiseHg, o arquivo /etc/mercurial/hgrc.d/thgmergetools.rc
# desconfigura o padrão original de premerge=True das ferramentas e isto atrasa o merge.
# Uma forma de desfazer isto é sobrescrever a configuração durante o comando:
mede 'hg merge --config merge-tools.kdiff3.premerge=True --config ui.merge=kdiff3'
mede 'hg commit -m merge -u teste'
mede 'hg log'
mede 'hg push'


#
# Mercurial com chg
#

echo
echo '-----------------------------------------'
chg version | grep vers
echo 'usando chg'
echo '-----------------------------------------'
echo 'comando, real, user, sys'

cd /tmp
if [ -d "chg-1" ]; then
    rm -rf chg-1
fi
if [ -d "chg-2" ]; then
    rm -rf chg-2
fi

mede 'chg init chg-1'

cd /tmp/chg-1
alteracoes 1
mede 'chg add'
mede 'chg commit -m adicao -u teste'

cd /tmp
mede 'chg clone chg-1 chg-2'

cd /tmp/chg-1
alteracoes 2

mede 'chg diff'
mede 'chg status'
mede 'chg commit -m blablabla -u teste'

cd /tmp/chg-2
alteracoes 3

mede 'chg diff'
mede 'chg status'
mede 'chg commit -m ola_mundo_nhem-nhem-nhem -u teste'
mede 'chg pull'
# Na instalação do Tortoisechg, o arquivo /etc/mercurial/chgrc.d/tchgmergetools.rc
# desconfigura o padrão original de premerge=True das ferramentas e isto atrasa o merge.
# Uma forma de desfazer isto é sobrescrever a configuração durante o comando:
mede 'chg merge --config merge-tools.kdiff3.premerge=True --config ui.merge=kdiff3'
mede 'chg commit -m merge -u teste'
mede 'chg log'
mede 'chg push'


#
# Git
#

echo -e '\n-------------------'
git version
echo '-------------------'
echo 'comando, real, user, sys'

cd /tmp
if [ -d "git-1" ]; then
    rm -rf git-1
fi
if [ -d "git-2" ]; then
    rm -rf git-2
fi


mede 'git init git-1'

cd /tmp/git-1
alteracoes 1

mede 'git add .'
mede 'git commit -m adicao'

cd /tmp
mede 'git clone git-1 git-2'

cd /tmp/git-1
alteracoes 2

mede 'git diff'
mede 'git status'
mede 'git commit -a -m blablabla'

cd /tmp/git-2
mede 'git checkout -b ola_mundo'
alteracoes 3

mede 'git diff'
mede 'git status'
mede 'git commit -a -m ola_mundo_nhem-nhem-nhem'
mede 'git fetch'
mede 'git merge origin/master --no-commit'
mede 'git commit -a -m merge'
mede 'git log'
mede 'git push origin HEAD'

LANGUAGE=$old_language