#!/bin/bash
# (kgit), (mux and demux for kgit* tools)
# Copyright (c) 2008-2012 Wind River Systems, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
mydir=`dirname $0`
PATH=$mydir:$PATH
# For consistent behaviour with "grep -w"
LC_ALL=C
export LC_ALL
usage()
{
cat <<EOF
kgit -h --version <command>
-h : this message
-v : version
EOF
}
_commands()
{
find "`dirname $0`" -maxdepth 1 -name "kgit-*" -type f \
-perm -111 | sed -e "s/.*\\/`basename $0`-//"
}
# based off guilt's demux and other references
if [ "`basename $0`" = "kgit" ]; then
cmd=
if [ $# -ne 0 ]; then
# take first arg, and try to execute it
arg="$1"
dir=`dirname $0`
if [ -x "$dir/kgit-$arg" ]; then
cmd=$arg
else
# might be a short handed
for command in $(_commands); do
case $command in
$arg*)
if [ -x "$dir/kgit-$command" ]; then
cmd=$command
fi
;;
esac
done
fi
if [ -n "$cmd" ]; then
shift
exec "$dir/kgit-$cmd" "$@"
# this is not reached because of the exec
die "Exec failed! Something is terribly wrong!"
fi
fi
# no args passed or invalid command entered, just output help summary
usage
echo " Available commands: "
echo ""
echo -n " "
count=0
for c in $(_commands); do
if [ $count -lt 7 ]; then
echo -n "$c "
else
echo "$c"
count=0
echo -n " "
fi
let count=$count+1
done
echo ""; echo ""
# now, let's exit
exit 1
fi
get_current_git_branch()
{
git branch --no-color | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'
}
strlen () # echo ${#string} ...
{
for i in "$@"; do
echo ${#i}
done
}
# arg1: length limit
# arg2: string
length_limited_string()
{
limit=$1
input_string=$2
mid_point=`expr length $input_string / 2`
mid_point=`expr $mid_point - 5`
# limit_point=`expr length $limit / 2`
# len=`expr length $input_string`
# if [ `expr $limit_point+$limit_point < $len` ]; then
# echo "why bother ?"
# fi
x=${input_string:0:$mid_point}
y=${input_string: -$mid_point}
echo "$x..$y"
}
find_dir()
{
start_dir=`pwd`
done=0
count=0
tgt_dir="$1"
max_depth=$2
if [ -z "$max_depth" ]; then
max_depth=4
fi
cdir=".";
while [ $done -eq 0 ]; do
# echo "testing: $start_dir/$cdir/tgt_dir"
if [ -d "$start_dir/$cdir/$tgt_dir" ]; then
done=1;
else
# echo "not found, heading back one ...";
cdir="../$cdir";
let count=$count+1;
# echo "count: $count";
fi;
if [ $count -gt $max_depth ]; then
cdir="";
done=1;
fi;
done
if [ "$cdir" != "" ]; then\
cdir=`echo $cdir | sed "s/\.\///"`;
echo "$cdir/$tgt_dir";
fi
}
read_answer()
{
prompt=$1
default_answer=$2
answer="$default_answer"
echo -n " $prompt [$default_answer]: "
read answer
echo $answer
}
clean_path()
{
_p=$1
_p=`echo $_p | sed 's%//%/%g' | sed 's%\\.\/%%g'`
# double check our efforts
while :
do
case $_p in
# disable the check for trailing slash and removal. We want this
# to be present, and we really only care about double //
#*/) _p=${_p%/}
# ;;
*//*) _p=`echo $_p | sed s%//%/%g`
;;
*) break
;;
esac
done
echo $_p
}