miércoles, 17 de octubre de 2007


script ruby para la busqueda de codigo en un archivo de un repositorio svn

El objetivo del programa es vericar la presencia de codigo en branches de un repositorio.
El codigo a detectar se especifica en un archivo plano con pares: path, expresion-regular
En donde la expresion-regular es la expresion regular a buscar en el path especificado
El programa recibe como parametro la url del repositorio y los branches dentro de esa url sobre
los cuales se iterara para detectar el codigo especificado en el archivo.

ruby check_codigo http://svn.ar.empresa/Proyecto/branches/bugs 0012812 0012813 archivo

Busca en el repositorio http://svn.ar.empresa/Proyecto/branches/bugs, en los branches que comiencen identificados por 0012812 y0012813 lo especificado en archivo.

El archivo archivo debe contener algo como lo siguiente
path expresion-regular
path expresion-regular
... 

#!/usr/bin/ruby -w
# Created by Martin Baspineiro 9/10/2007

# Lectura del archivo
#Obtiene una estructura de datos Hash con pares: archivo en el cual buscar, patron de #busqueda.
def leer_archivo(nombreArchivo)
  busqueda = Hash.new
  IO.readlines(nombreArchivo).each do |line|
     k, v = line.split
     busqueda[k] = v
  end
  busqueda
end

#Busca un conjunto de cadenas descriptas por un patron en un archivo determinado
def buscar_en_archivo(url_branches, branch, archivo, patron)
  out = `svn cat #{url_branches}/#{branch}/#{archivo} | grep --count --regexp=#{patron}`
  cantidad_ocurrencias = out.chomp.to_i
  if cantidad_ocurrencias > 0
     puts "Se encontraron #{cantidad_ocurrencias} ocurrencias"
  else
     puts "No se encontraron ocurrencias"
  end
end

#Verificacion de parametros del script
ids = ARGV
if ids.empty? || ids.length < 3
  puts "uso: #{$0} url_branches bug1_id [bug2_id [bug3_id [...]]] search_file"
  exit 1
end

#Inicializacion de variables
url_branches = ids[0];
branches = ids[1..-2];
puts "#{branches}"
file_name = ids.last;
busqueda = leer_archivo(file_name);

#Busco en los branches, en los archivos especificados un patron determinado
branches.each do |branch|
  puts "========================================================"
  puts "Analizando branch #{branch}..."
  busqueda.each_pair do |key, value|
    puts "========================================================"
    puts "Buscando..."
    puts "En el archivo: #{key}"
    puts "El patron: #{value}"
    puts"========================================================"
    buscar_en_archivo(url_branches, branch, key, value);
  end
end






viernes, 21 de septiembre de 2007

Sistemas web para la gestion de proyectos

basecamp

goplan

lunes, 10 de septiembre de 2007

Merges y Conflictos

En el desarrollo de Software utilizamos Sistemas de Control de Versiones , como por ejemplo CVS o Subversion, para controlar las versiones o revisiones de nuestro codigo fuente. Una practica comun consiste en crear branches o ramas a partir de una linea base o tronco para el desarrollo de una funcionalidad en particular.
Cuando mergeamos los branches creados con la linea base a partir de la cual fue creada solemos encontrarnos con conflictos.

Se puede tener una gran cantidad de conflitos debido a diferentes razones:

- La introduccion de gran cantidad de cambios en el branch.
- La introduccion de cambios en los archivos de la linea base que tambien son modificados en el branch.

Para evitar este tipo de conflictos lo recomendable es:

- Evitar que pase mucho tiempo entre la resolucion del branch y el merge con la linea base.
- Evitar crear branches si la arquitectura de la aplicacion no esta totalmente o en gran porcentaje definida.
- Evitar introducir cambios grandes no necesarios en los branches.
- Evitar crear branches durante un refactory de clases, realizar la creacion de branches una vez finalizado el refactory.

jueves, 23 de agosto de 2007

Creacion del blog

Hola, el objetivo de este blog es transmitir mis experiencias con las tecnologias de las comunicaciones e informacion. Sin duda durante este proceso tambien transmitire mi humilde manera de ver las cosas. Espero que lo posteado aqui sea de utilidad.