summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJérémy Zurcher <jeremy@asynk.ch>2012-01-09 10:24:33 +0100
committerJérémy Zurcher <jeremy@asynk.ch>2012-01-09 10:24:33 +0100
commit78ee762b597a6774407160235e019222e94ffb93 (patch)
tree83a4b008a1488fe33201703469d6adc7a2fcf692
parent4a59765ad8f696f9cf7719b354c2d1be0741289f (diff)
parent7172b548b7571c55e0d705761c0a09b33b2256cc (diff)
downloadbin-78ee762b597a6774407160235e019222e94ffb93.zip
bin-78ee762b597a6774407160235e019222e94ffb93.tar.gz
Merge branch 'master' of asynk.ch:bin
-rwxr-xr-xeasy_e17.sh2
-rwxr-xr-xgit-synk2
-rwxr-xr-xpg2rb.rb153
3 files changed, 155 insertions, 2 deletions
diff --git a/easy_e17.sh b/easy_e17.sh
index 7b540c4..faf7b3b 100755
--- a/easy_e17.sh
+++ b/easy_e17.sh
@@ -43,7 +43,7 @@ cmd_svn_update_conflicts_ask="svn update -r"
efl_basic="eina eet evas ecore efreet eio eeze e_dbus embryo edje"
efl_extra="imlib2 azy emotion ethumb libeweather emap elementary elev8 enlil ensure libast \
- python-evas python-ecore python-e_dbus python-edje python-ethumb python-emotion python-elementary shellementary vala"
+ python-evas python-ecore python-e_dbus python-edje python-emotion python-elementary shellementary vala"
bin_basic="exchange e"
e_modules_bin="emprint exalt"
e_modules_extra="alarm calendar comp-scale cpu deskshow diskio drawer eenvader.fractal empris engage eooorg e-tiling \
diff --git a/git-synk b/git-synk
index 554b162..61490e2 100755
--- a/git-synk
+++ b/git-synk
@@ -75,7 +75,7 @@ for gitdir in ${GIT_DIR}; do
STASH=1
echo -e "${RED}head is not clean, ${CYAN}git stash save${RESET}" && git stash save -q
else
- fail "head is not clean, USE_STASH=0 ... " && continue
+ fail "head is not clean, use -s flag to use stash ... " && continue
fi
fi
# PULL
diff --git a/pg2rb.rb b/pg2rb.rb
new file mode 100755
index 0000000..764c94e
--- /dev/null
+++ b/pg2rb.rb
@@ -0,0 +1,153 @@
+#! /usr/bin/env ruby
+# -*- coding: UTF-8 -*-
+
+#----------------------------------------------------------------------------
+#
+# File : dia2pg.rb
+# Author : Jérémy Zurcher <jeremy@asynk.ch>
+# Date : 24/08/10
+# License :
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+#----------------------------------------------------------------------------
+#
+require 'ostruct'
+require 'optparse'
+#
+class OpenStruct
+ def to_h; @table end
+end
+#
+options = OpenStruct.new
+#
+options.verbose = false
+options.input = nil
+options.database = nil
+options.indent=4
+#
+opts = OptionParser.new do |opts|
+ opts.banner = "Usage: #{$0} [options]"
+ opts.on( "-i", "--input FILENAME", "input file" ) { |n| options.input = n }
+ opts.on( "-V", "--verbose", "produce verbose output" ) { options.verbose = true }
+ opts.on( "-d", "--database DATABASE", "set default database" ) { |n| options.database = n }
+ opts.on( "-n", "--indent N", "set number of indentation spaces" ) { |n| options.indent = n.to_i }
+end
+#
+options.tbl_prefix+='_' if not options.tbl_prefix.nil? and options.tbl_prefix[-1]!='_'
+#
+opts.parse!(ARGV)
+#
+if options.input.nil?
+ $stderr << "missing input file argument\n"
+ exit 1
+end
+#
+INDENT="\n"+" "*options.indent
+#
+class Table
+ #
+ def initialize n, t, a, d
+ @name = n
+ @tbl_prefix = t
+ @attr_prefix = a
+ @db = d
+ @ids = []
+ @bools = []
+ @floats = []
+ @integers = []
+ @texts = []
+ @times = []
+ end
+ attr_reader :ids, :bools, :floats, :integers, :texts, :times
+ #
+ def name
+ (@tbl_prefix.nil? ? @name : @name[@tbl_prefix.length..-1]).capitalize # TODO replace _(.) by $1.capitalize
+ end
+ #
+ def to_s
+ r="class #{name}"
+ r << INDENT+'#'
+ r << INDENT+'include Hmsa_lib::PgsqlModel'
+ r << INDENT+'#'
+ r << INDENT+"db '#{@db}'.freeze" unless @db.nil?
+ r << INDENT+"prefix '#{@attr_prefix}'.freeze" unless @attr_prefix.nil?
+ r << INDENT+'#' unless @db.nil? and @attr_prefix.nil?
+ r << INDENT+"ids " + @ids.collect { |i| ":#{i}" }.join(', ') unless @ids.empty?
+ [ :bools, :floats, :integers, :texts, :times].each do |sym|
+ attrs = send sym
+ next if attrs.empty?
+ r << INDENT+"#{sym} " + attrs.collect { |a| ":#{@attr_prefix.nil? ? a : a[@attr_prefix.length..-1]}" }.join(', ')
+ end
+ r << INDENT+'#'
+ r << INDENT+'sql_stmts( {'
+ r << INDENT+" # :exists => [ 'select count(*) from #{@name} where #{@ids[0]}=$1::int', :#{@ids[0]} ]," unless @ids.empty?
+ r << INDENT+'} )'
+ r << INDENT+'#'
+ r << "\nend"
+ end
+end
+#
+TABLES=[]
+#
+tbl=nil
+tbl_prefix=nil
+attr_prefix=nil
+File.open(options.input).readlines.each do |l|
+# puts l
+ if l=~/dia2pg/
+ l.split.each do |s|
+ k,v = s.split '='
+ if k=~/tbl_prefix/
+ tbl_prefix=v
+ elsif k=~/attr_prefix/
+ attr_prefix=v
+ end
+ end
+ elsif l=~/CREATE TABLE (\S+)/
+ tbl = Table.new $1, tbl_prefix, attr_prefix, options.database
+ tbl_prefix=nil
+ attr_prefix=nil
+ TABLES << tbl
+ elsif l=~/PRIMARY\s+KEY\s+\((\w*)\)/
+ $1.split(/,/).reverse.each do |i|
+ tbl.ids.insert 0, i
+ end
+ elsif l=~/(\w+)\s+integer\s+REFERENCES/
+ tbl.ids << $1
+ elsif l=~/(\w+)\s+boolean/
+ tbl.bools << $1
+ elsif l=~/(\w+)\s+double/
+ tbl.floats << $1
+ elsif l=~/(\w+)\s+integer/
+ tbl.integers << $1
+ elsif l=~/(\w+)\s+text/
+ tbl.texts << $1
+ elsif l=~/(\w+)\s+char/
+ tbl.texts << $1
+ elsif l=~/(\w+)\s+timestamp/
+ tbl.times << $1
+ end
+end
+#
+TABLES.each do |t|
+ puts "#"
+ puts t
+end