# -*- Mode: shell-script -*-
# $Id$

# shell'ные настройки, алиасы, функции 
# как использовать: дописать source /etc/direct/direct_shell_rc в свой .zshrc или .bashrc

#....................................


# Переменные для работы с Директ-репозиторием
export DT='svn+ssh://arcadia.yandex.ru/arc/trunk/arcadia/direct/perl'
export DB='svn+ssh://arcadia.yandex.ru/arc/branches/direct/perl'
### неясно, какой смысл будет нести DRT после переезда, когда у DT и DB общий корень -- вся Аркадия
#export DRT='svn+ssh://svn.yandex.ru/direct'


# автоподстановки, shell-специфично
function what_to_do_with_beta { direct-mk LIST ; return 0; }
#function what_to_do_with_beta { cat /etc/direct/makefile_for_beta |grep '^[a-zA-Z]' |grep -o '[a-zA-Z0-9_-]*'; return 0;}
function what_to_do_with_beta_zsh  {     reply=($(what_to_do_with_beta)); return 0; }
function what_to_do_with_beta_bash { COMPREPLY=($(what_to_do_with_beta | grep -E ^${COMP_WORDS[$COMP_CWORD]})); return 0; }
if [[ -n $ZSH_NAME ]]
then
    # Здесь -- для zsh
    compctl -K what_to_do_with_beta_zsh direct-mk mk
elif [[ -n $BASH ]]
then
    # Здесь -- для bash
    complete -F what_to_do_with_beta_bash direct-mk mk
else
    # Здесь -- для остальных
    true
fi

# direct-mk -- действие частое, поэтому добавляем короткий алиас
alias mk='direct-mk'

# TODO Переход на бету по номеру


# TODO diff от trunk'а подходящей версии до текущего бранча


# Кеширование Джира-пароля
# Если хочется, чтобы в приглашении ком.строки было видно, есть ли пароль в кеше: 
#function message_for_prompt{ ( test -n "$JIRA_PASSWORD" ) && echo "there's cached JIRA_PASSWORD, use clear_jira_pass to unset\n " }
#setopt PROMPT_SUBST # для bash -- shopt promptvars
#export PS1='$(message_for_prompt)'$PS1
# 
alias cache_jira_pass='echo "please type your Jira password:" ; stty -echo ; read pass ; stty echo ; export JIRA_PASSWORD=$pass ; unset pass'
alias clear_jira_pass="unset JIRA_PASSWORD"
alias check_jira_pass='( test -n "$JIRA_PASSWORD" ) && echo "nonempty password" || echo "--"'


# TODO grep, find для Директа

# svndiff
# если хочется смотреть диффы любимым редактором -- надо выставить переменную окружения $SVNDIFF_EDITOR
function svndiff
{
    TMPFILE1=`mktemp svndiff.XXXXXXXXXX` || return 1
    TMPFILE2=$TMPFILE1.patch

    if [[ -z $SVNDIFF_EDITOR ]]
    then
        local SVNDIFF_EDITOR='vim -R -c ":syntax on<CR>" -c ":nmap q :quit!<CR>"'
    fi

    svn diff --diff-cmd=diff -x "-ud -F ^sub" $@  >$TMPFILE2 && eval "$SVNDIFF_EDITOR $TMPFILE2"
    rm -f $TMPFILE1 $TMPFILE2
}


# ищет в /var/www/ каталог, соответствующий номеру Директовской беты
# если захочется -- можно будет добавить параметр "если нашлось несколько -- выводить весь список"
function find_beta
{
    # ищу подходящую директорию беты: прежде всего среди своих, потом среди всех
    local me=`whoami`;
    local d=`\ls /var/www/| \grep "$me" | \grep "$1$"|head -n 1`;
    [ -n "$d" ] && echo /var/www/$d && return;

    local d=`\ls /var/www/| \grep "$me" | \grep "$1"|head -n 1`;
    [ -n "$d" ] && echo /var/www/$d && return;

    local d=`\ls /var/www/| \grep "$1$"|head -n 1`;
    [ -n "$d" ] && echo /var/www/$d && return;

    local d=`\ls /var/www/| \grep "$1"|head -n 1`;
    [ -n "$d" ] && echo /var/www/$d && return;

    echo '.'
    return 1;
}

# b 86 -- переход на бету с указанным номером
#
# для дополнения "своими" бетами:
#
# - zsh (добавить в ~/.zshrc):
#     compctl -k "($(ls -d /var/www/*${USER}* | perl -nle 'print $1 if /\.(\d{4})/'))" b
# - bash (добавить в ~/.bashrc)
#     complete -W "$(ls -d /var/www/*${USER}* | perl -nle 'print $1 if /\.(\d{4})/')" b

function b
{
    [ -z $1 ] && echo "usage: b <str>" && return 1;

    if ! local wc=`find_beta $@`
    then
        echo "can't find suitable beta"
        return 1
    fi

    echo "new path: $wc"

    # если сейчас я нахожусь внутри директории какой-то беты -- запоминаю, в какой именно директории
    [ `pwd -P |grep "/opt/www/beta"` ] && p=`pwd -P|sed "s|^/opt/www/[^/]*||"`

    cd $wc/$p && return;

    return 1;
}

# переход на бету в стиле betas
function cdb {
    [ -z $1 ] && echo "usage: cdb [DIR-RE [BRANCH-RE [FILE-RE]]] [-c]" && return 1;

    local d=`betas -d $*`;
    [ -n "$d" ] && [ -d "$d" ] || return 1

    # логика перехода в поддиректорию из b
    # если сейчас я нахожусь внутри директории какой-то беты -- запоминаю, в какой именно директории
    local p=''
    if [[ -z $CDB_NO_SMART_DIR ]]
    then
        [ `pwd -P |grep "/opt/www/beta"` ] && p=`pwd -P|sed "s|^/opt/www/[^/]*||"`
    fi

    cd $d/$p && direct-mk
}

# запуск db_schema.pl из любого каталога внутри рабочей копии
function db_schema {
    ([ `pwd|grep "beta"` ] && c=`pwd|sed "s/\(beta[^\/]*\)\/.*/\1/"` && cd $c && ./protected/maintenance/db_schema.pl $@)
}

# служебный пользователь, умеющий только постить ревью в ReviewBoard
export RB_USER='ppc-rb'
export RB_PASSWORD='WN5O32RtFCMa2'

# DIRECT-73055: на ppcdev-ах есть общий Chrome, переменные говорят тестам фронта использовать его
export PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
export DEV_CHROME_PATH=/opt/chrome-linux/chrome

