summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua Nichols <nichoj@gentoo.org>2006-08-10 01:00:48 +0000
committerJoshua Nichols <nichoj@gentoo.org>2006-08-10 01:00:48 +0000
commit352d10f53b46e76df6fa7e6b5b6afe624d8120d1 (patch)
tree04696287cb60e97bde346ebd1fdabb5a6e40791d /projects
parentFix for evolution-sharp with new evolution (diff)
downloadnichoj-352d10f53b46e76df6fa7e6b5b6afe624d8120d1.tar.gz
nichoj-352d10f53b46e76df6fa7e6b5b6afe624d8120d1.tar.bz2
nichoj-352d10f53b46e76df6fa7e6b5b6afe624d8120d1.zip
Adding gentoolkit-nichoj
svn path=/; revision=51
Diffstat (limited to 'projects')
-rwxr-xr-xprojects/gentoolkit-nichoj/trunk/changelog.rb26
-rwxr-xr-xprojects/gentoolkit-nichoj/trunk/eshowkw352
-rwxr-xr-xprojects/gentoolkit-nichoj/trunk/repoman.rb13
-rwxr-xr-xprojects/gentoolkit-nichoj/trunk/rubycommit.rb61
4 files changed, 452 insertions, 0 deletions
diff --git a/projects/gentoolkit-nichoj/trunk/changelog.rb b/projects/gentoolkit-nichoj/trunk/changelog.rb
new file mode 100755
index 0000000..4eeb5d3
--- /dev/null
+++ b/projects/gentoolkit-nichoj/trunk/changelog.rb
@@ -0,0 +1,26 @@
+#!/usr/bin/ruby -w
+module ChangeLog
+ def ChangeLog.getLastEntry()
+ f = File.new('ChangeLog')
+ entry=''
+
+ while line = f.gets
+ # TODO parametize this
+ if(line.match(/nichoj@gentoo.org/))
+
+ while ! line.match(/:$/)
+ line = f.gets
+ end
+
+ while (line = f.gets) && line.strip != ''
+ entry += line.strip + ' '
+ end
+
+ break
+ end
+ end
+
+ f.close
+ return entry.rstrip
+ end
+end
diff --git a/projects/gentoolkit-nichoj/trunk/eshowkw b/projects/gentoolkit-nichoj/trunk/eshowkw
new file mode 100755
index 0000000..c174939
--- /dev/null
+++ b/projects/gentoolkit-nichoj/trunk/eshowkw
@@ -0,0 +1,352 @@
+#!/bin/bash
+# vim: set sw=4 sts=4 et tw=80 :
+
+# Author: Ciaran McCreesh <ciaranm@gentoo.org>
+# Purpose: Display ebuild keywords in a graphical form
+# Invocation: eshowkw [ packagename ] (defaults to current directory if no
+# packagename is provided)
+
+shopt -s extglob
+
+PID_TO_KILL=$$
+
+die() {
+ echo "$@" 1>&2
+ kill $PID_TO_KILL
+}
+
+trap 'exit 250' 15
+
+get_portage_dir() {
+ local dir
+ if [[ -z ${portage_dir_cache} ]] ; then
+ for dir in "${HOME}/cvs/gentoo-x86" "/usr/portage" ; do
+ [[ -d ${dir}/profiles ]] && portage_dir_cache=${dir} && break
+ done
+ fi
+ [[ -z ${portage_dir_cache} ]] && portage_dir_cache=$(portageq portdir )
+ export portage_dir_cache
+ echo ${portage_dir_cache}
+}
+
+version_sort() {
+ local items= left=0
+ items=( $@ )
+
+ while [[ ${left} -lt ${#items[@]} ]] ; do
+ local lowest_idx=${left}
+ local idx=$(( ${lowest_idx} + 1 ))
+ while [[ ${idx} -lt ${#items[@]} ]] ; do
+ version_compare "${items[${lowest_idx}]}" "${items[${idx}]}"
+ [[ $? -eq 3 ]] && lowest_idx=${idx}
+ idx=$(( ${idx} + 1 ))
+ done
+ local tmp=${items[${lowest_idx}]}
+ items[${lowest_idx}]=${items[${left}]}
+ items[${left}]=${tmp}
+ left=$(( ${left} + 1 ))
+ done
+ echo ${items[@]}
+}
+
+version_compare() {
+ local ver_a=${1} ver_b=${2} parts_a parts_b cur_idx_a=0 cur_idx_b=0
+ parts_a=( $(get_all_version_components "${ver_a}" ) )
+ parts_b=( $(get_all_version_components "${ver_b}" ) )
+
+ ### compare number parts.
+ local inf_loop=0
+ while true ; do
+ # grab the current number components
+ local cur_tok_a=${parts_a[${cur_idx_a}]}
+ local cur_tok_b=${parts_b[${cur_idx_b}]}
+
+ # number?
+ if [[ -n ${cur_tok_a} ]] && [[ -z ${cur_tok_a//[[:digit:]]} ]] ; then
+ cur_idx_a=$(( ${cur_idx_a} + 1 ))
+ [[ ${parts_a[${cur_idx_a}]} == "." ]] \
+ && cur_idx_a=$(( ${cur_idx_a} + 1 ))
+ else
+ cur_tok_a=""
+ fi
+
+ if [[ -n ${cur_tok_b} ]] && [[ -z ${cur_tok_b//[[:digit:]]} ]] ; then
+ cur_idx_b=$(( ${cur_idx_b} + 1 ))
+ [[ ${parts_b[${cur_idx_b}]} == "." ]] \
+ && cur_idx_b=$(( ${cur_idx_b} + 1 ))
+ else
+ cur_tok_b=""
+ fi
+
+ # done with number components?
+ [[ -z ${cur_tok_a} ]] && [[ -z ${cur_tok_b} ]] && break
+
+ # to avoid going into octal mode, strip any leading zeros. otherwise
+ # bash will throw a hissy fit on versions like 6.3.068.
+ cur_tok_a=${cur_tok_a##+(0)}
+ cur_tok_b=${cur_tok_b##+(0)}
+
+ # if a component is blank, make it zero.
+ [[ -z ${cur_tok_a} ]] && cur_tok_a=0
+ [[ -z ${cur_tok_b} ]] && cur_tok_b=0
+
+ # compare
+ [[ ${cur_tok_a} -lt ${cur_tok_b} ]] && return 1
+ [[ ${cur_tok_a} -gt ${cur_tok_b} ]] && return 3
+ done
+
+ ### number parts equal. compare letter parts.
+ local letter_a=
+ letter_a=${parts_a[${cur_idx_a}]}
+ if [[ ${#letter_a} -eq 1 ]] && [[ -z ${letter_a/[a-z]} ]] ; then
+ cur_idx_a=$(( ${cur_idx_a} + 1 ))
+ else
+ letter_a="@"
+ fi
+
+ local letter_b=
+ letter_b=${parts_b[${cur_idx_b}]}
+ if [[ ${#letter_b} -eq 1 ]] && [[ -z ${letter_b/[a-z]} ]] ; then
+ cur_idx_b=$(( ${cur_idx_b} + 1 ))
+ else
+ letter_b="@"
+ fi
+
+ # compare
+ [[ ${letter_a} < ${letter_b} ]] && return 1
+ [[ ${letter_a} > ${letter_b} ]] && return 3
+
+ ### letter parts equal. compare suffixes in order.
+ local suffix rule part r_lt r_gt
+ for rule in "alpha=1" "beta=1" "pre=1" "rc=1" "p=3" "r=3" ; do
+ suffix=${rule%%=*}
+ r_lt=${rule##*=}
+ [[ ${r_lt} -eq 1 ]] && r_gt=3 || r_gt=1
+
+ local suffix_a=
+ for part in ${parts_a[@]} ; do
+ [[ ${part#${suffix}} != ${part} ]] && \
+ [[ -z ${part##${suffix}*([[:digit:]])} ]] && \
+ suffix_a=${part#${suffix}}0
+ done
+
+ local suffix_b=
+ for part in ${parts_b[@]} ; do
+ [[ ${part#${suffix}} != ${part} ]] && \
+ [[ -z ${part##${suffix}*([[:digit:]])} ]] && \
+ suffix_b=${part#${suffix}}0
+ done
+
+ [[ -z ${suffix_a} ]] && [[ -z ${suffix_b} ]] && continue
+
+ [[ -z ${suffix_a} ]] && return ${r_gt}
+ [[ -z ${suffix_b} ]] && return ${r_lt}
+
+ # avoid octal problems
+ suffix_a=${suffix_a##+(0)} ; suffix_a=${suffix_a:-0}
+ suffix_b=${suffix_b##+(0)} ; suffix_b=${suffix_b:-0}
+
+ [[ ${suffix_a} -lt ${suffix_b} ]] && return 1
+ [[ ${suffix_a} -gt ${suffix_b} ]] && return 3
+ done
+
+ ### no differences.
+ return 2
+}
+
+get_all_version_components() {
+ local ver_str=${1} result result_idx=0
+ result=( )
+
+ while [[ -n "$ver_str" ]] ; do
+ case "${ver_str:0:1}" in
+ # number: parse whilst we have a number
+ [[:digit:]])
+ result[$result_idx]="${ver_str%%[^[:digit:]]*}"
+ ver_str="${ver_str##+([[:digit:]])}"
+ result_idx=$(($result_idx + 1))
+ ;;
+
+ # separator: single character
+ [-_.])
+ result[$result_idx]="${ver_str:0:1}"
+ ver_str="${ver_str:1}"
+ result_idx=$(($result_idx + 1))
+ ;;
+
+ # letter: grab the letters plus any following numbers
+ [[:alpha:]])
+ local not_match="${ver_str##+([[:alpha:]])*([[:digit:]])}"
+ result[$result_idx]=${ver_str:0:$((${#ver_str} - ${#not_match}))}
+ ver_str="${not_match}"
+ result_idx=$(($result_idx + 1))
+ ;;
+
+ # huh?
+ *)
+ result[$result_idx]="${ver_str:0:1}"
+ ver_str="${ver_str:1}"
+ result_idx=$(($result_idx + 1))
+ ;;
+ esac
+ done
+
+ echo ${result[@]}
+}
+
+get_package_dir() {
+ if [[ -z ${1} ]] ; then
+ pwd
+ return 0
+ fi
+
+ if [[ -d ${1} ]] ; then
+ readlink -f ${1}
+ return 0
+ fi
+
+ get_portage_dir 1>/dev/null
+ if [[ ${1/\/} != ${1} ]] ; then
+ local d=$(get_portage_dir )/${1}
+ if [[ -d ${d} ]] ; then
+ echo ${d}
+ return 0
+ fi
+ else
+ local d
+ d=( $(echo $(get_portage_dir )/*-*/${1} ) )
+ if [[ ${#d[@]} -gt 1 ]] ; then
+ die "${1} is ambiguous"
+ elif [[ -d ${d[0]} ]] ; then
+ echo ${d[0]}
+ return 0
+ fi
+ fi
+
+ return 1
+}
+
+repeat() {
+ local i
+ for (( i=0 ; i < ${1} ; i=$(( ${i} + 1 )) )) ; do
+ echo -n "${2}"
+ done
+}
+
+get_keywords() {
+ (
+ inherit() { :; }
+ source ${1} 2>/dev/null
+ echo ${KEYWORDS}
+ )
+}
+
+colorarch() {
+ case "${1}" in
+ amd64)
+ echo -n -e "\033[0;33m${2}\033[0;0m"
+ ;;
+ x86)
+ echo -n -e "\033[0;31m${2}\033[0;0m"
+ ;;
+ *)
+ echo -n "${2}"
+ ;;
+ esac
+}
+
+colourise() {
+ case "${1}" in
+ \*)
+ echo -n -e "\033[0;31m*\033[0;0m"
+ ;;
+ +)
+ echo -n -e "\033[0;32m+\033[0;0m"
+ ;;
+ -)
+ echo -n -e "\033[0;31m-\033[0;0m"
+ ;;
+ \~)
+ echo -n -e "\033[0;33m~\033[0;0m"
+ ;;
+ *)
+ echo -n "${1}"
+ ;;
+ esac
+}
+
+show_keyword_diagram() {
+ echo -n -e "Keywords for \033[1;34m"
+ local title=$(readlink -f $(pwd ) )
+ title=${title#$(readlink -f ../.. )/*( )}
+ echo -n "${title}"
+ echo -e "\033[0;0m:"
+ echo
+
+ local archs= arch_length=0 arch=
+ archs=( $(< $(get_portage_dir )/profiles/arch.list ) )
+ for arch in "${archs[@]}" ; do
+ [[ ${#arch} -gt ${arch_length} ]] && arch_length=${#arch}
+ done
+
+ local versions= pkgname= version_length=0 version=
+ pkgname=$(basename $(readlink -f ./ ) )
+ versions=( $(for e in $(echo *.ebuild ) ; do \
+ [[ -f ${e} ]] && echo ${e} | sed -e 's/\.ebuild$//g' \
+ -e "s/^${pkgname}-//g" ; \
+ done ) )
+ versions=( $(version_sort ${versions[@]} ) )
+ for version in "${versions[@]}" ; do
+ [[ ${#version} -gt ${version_length} ]] && version_length=${#version}
+ done
+
+ local i=0 archletter=
+ for (( i = 0 ; i < ${arch_length} ; i=$(( ${i} + 1 )) )) ; do
+ repeat ${version_length} " "
+ echo -n " | "
+ for arch in "${archs[@]}" ; do
+ archletter="${arch:${i}:1}"
+ echo -n "$(colorarch "${arch}" "${archletter:- }" ) "
+ done
+ echo
+ done
+
+ repeat ${version_length} "-"
+ echo -n "-+"
+ repeat ${#archs[@]} "--"
+ echo
+
+ for version in "${versions[@]}" ; do
+ echo -n "${version}"
+ repeat $(( ${version_length} - ${#version} )) " "
+ echo -n " | "
+
+ local keyword keywords
+ keywords=( $(get_keywords "${pkgname}-${version}.ebuild" ) )
+ for arch in "${archs[@]}" ; do
+ local display=" "
+ [[ ${keywords[@]/-\*} != ${keywords[@]} ]] && display="*"
+ for keyword in "${keywords[@]}" ; do
+ [[ ${arch} == "${keyword#[~-]}" ]] && \
+ display=${keyword:0:1} && \
+ break;
+ done
+ [[ -z ${display#[~ *-]} ]] || display="+"
+ echo -n "$(colourise "${display}" ) "
+ done
+
+ echo
+ done
+}
+
+main() {
+ local dir=$(get_package_dir "${1}" )
+ [[ -z ${dir} ]] && die "Couldn't find '${1}'"
+ cd ${dir}
+ [[ $(echo *.ebuild ) != "*.ebuild" ]] || die "No ebuilds in ${dir}"
+ show_keyword_diagram
+ true
+}
+
+main "$@"
+
diff --git a/projects/gentoolkit-nichoj/trunk/repoman.rb b/projects/gentoolkit-nichoj/trunk/repoman.rb
new file mode 100755
index 0000000..280ba92
--- /dev/null
+++ b/projects/gentoolkit-nichoj/trunk/repoman.rb
@@ -0,0 +1,13 @@
+#!/usr/bin/ruby -w
+
+module Repoman
+ def Repoman.scan()
+ system "repoman scan"
+ end
+ def Repoman.full()
+ system "repoman full"
+ end
+ def Repoman.commit(commitmsg)
+ system "repoman commit --commitmsg \"#{commitmsg}\""
+ end
+end
diff --git a/projects/gentoolkit-nichoj/trunk/rubycommit.rb b/projects/gentoolkit-nichoj/trunk/rubycommit.rb
new file mode 100755
index 0000000..c79c964
--- /dev/null
+++ b/projects/gentoolkit-nichoj/trunk/rubycommit.rb
@@ -0,0 +1,61 @@
+#!/usr/bin/ruby -w
+
+$: << File.dirname(__FILE__)
+require 'changelog'
+require 'repoman'
+
+def isSvn
+ File.directory? '.svn'
+end
+
+def display_heading(message)
+ max = 80
+ filler = '#######################'
+ remaining = max - filler.length * 2
+ leader = (remaining - message.length ) / 2
+ puts filler + ' ' * (leader) + message + ' ' * leader + filler
+end
+
+def hr
+ max = 80
+ puts '#' * max
+end
+
+display_heading('eshowkw')
+system('eshowkw')
+display_heading('diff')
+if isSvn:
+ system('svn diff')
+else
+ system('cvs diff')
+end
+puts 'Exit status: ' + $?.to_s
+$? == 2 && exit()
+
+display_heading 'repoman full'
+Repoman.full()
+puts 'Exit status: ' + $?.to_s
+$? != 0 && exit()
+
+# use log entry from command line
+logentry = ARGV[0]
+# or default to your last ChangeLog entry
+if File.file?('ChangeLog') && logentry.nil? :
+ logentry = ChangeLog.getLastEntry()
+end
+
+# escape the log entry
+escaped = logentry.gsub("'") { "\\'" }
+
+display_heading('ChangeLog')
+puts logentry
+display_heading('Continue? (yes/no)')
+
+if gets.match(/y|yes/i)
+ display_heading('Committing...')
+ if isSvn
+ system("svn commit -m \"#{escaped}\"")
+ else
+ Repoman.commit(escaped)
+ end
+end