Hola a tod@s:
Como comenté hace algún tiempo, estoy trabajando en un reemplazo Open Source para el SCCTEXT de FoxPro, que es un programa que sirve para generar una vista de texto de los binarios (forms, clases, proyectos, etc) generalmente usado con herramientas de control de código fuente como SourceSafe, Subversion, CVS y otras.
El programa parece estable y, a diferencia del SCCTEXT, FOXBIN2PRG permite volver a regenerar los binarios desde la vista de texto generada, lo que lo hace ideal para merge visual (mezcla de cambios a dos o tres paneles con WinMerge o similar).
** Si hay interesados en probarlo, ya que el desarrollo lo acabo de terminar y es para toda la comunidad (adjunto PRG), necesitaría que me reporten cualquier problema que se encuentren, ya que está en fase Beta (pruebas).
Buenas noches!
Qué buena noticia Fernando! Voy a ver si puedo hacer que nuestro equipo de VFP pueda darle una buena prueba!
Desde ya mucha gracias por el aporte!
Saludos,
César
|
Bueno, yo reconozco que estoy perdido en esto. Para que sirve este FOXBIN2PRG??
Disculpa Fernando por la ignorancoa......
Saludos,
Alfonso
-------Mensagem original------- |
No pasa nada chicos, se los explico, ya que en este foro sé que no son muchos los que usan control de código fuente.
Desde los 90 (y puede que bastante antes en algunos países, pero yo lo conocí en esa época) se dejó de usar la técnica de ir guardando copias de los programas a medida que se agregan o modifican cosas, que muchos hacíamos en zip o creando subcarpetas, ya que esa técnica tiene varios problemas que se multiplican cuando el equipo de desarrollo tiene más de 1 o 2 personas, y es que trabajando cada uno sobre su copia es muy difícil saber que cosas modificó cada uno cuando se tocan componentes comunes como forms, clases, programas, etc, y la revisión manual de archivo por archivo era muy costosa.
Por eso se crearon las herramientas de control de código, que permiten centralizar todas las modificaciones en un repositorio, donde cada uno puede integrar sus cambios y ver los cambios anteriores suyos y de los demás, cosa super útil para encontrar fallos o volver a una versión anterior.
Esto en el resto de lenguajes que son orientados a texto es fácil, ya que los cambios se ven a 2 ventanas, en la izquierda la versión anterior de un archivo y en la derecha la versión más nueva, de forma que coincidan las líneas de programa lo más posible y con resaltes de color en los bloques de código nuevo, modificado o eliminado.
El problema es que en FoxPro el 80% o más de los archivos son binarios (vcx, scx, frx, lbx, mnx) y para solucionarlo se creó el SCCTEXT, un programa que viene con FoxPro y que se encarga de generar vistas de texto de esos binarios, pero que sólo permite ver las diferencias y no hacer "merge", que consiste en poder pasar cambios visualmente de un lado al otro de la comparación de código, y es justamente ésta la mayor ventaja del tema, y donde más tiempo se ahorra, ya que tradicionalmente en FoxPro se abre el formulario o clase y se le pasan a mano los métodos o controles que se quieran del formulario o clase a integrar, porque no siempre es posible reemplazarlo entero.
Para suplir esa carencia del SCCTEXT es que hice este programa.
Si todavía no están usando control de código, aunque sean los únicos que modifican sus programas, no tienen idea de lo que se están perdiendo y la productividad que pueden tener en varias situaciones.
Luego busco algunos artículos sobre el tema para que puedan leer más sobre esto, que para desarrolladores individuales es muy bueno, pero para equipos es totalmente indispensable.
Espero haber aclarado un poco el tema, y si no sigan preguntando por lo que no entiendan.
Saludos!
Bien, Fernando.Así es...
|
Ok gracias Hernan, lo que pasa que a mi los años me han caído encima y me cansan la vista, por eso leo poco pero con gente como tu andamos, ya me tiraste un cabo, ves .....
Saludos,
Alfonso
-------Mensagem original------- |
|
Gracias Fernando.....
-------Mensagem original------- |
Gracias Fernando por tu aporte. Creo que el tema es muy muy interesante...Solamente un par de dudas:1ª He hecho unas pequeñas pruebas pero con los formularios obtengo un archivo de texto SC2 que entiendo que no contiene todas las propiedades y métodos del formulario (adjunto archivo).
2ª ¿Que programa recomiendas para hacer el Merge con los archivos generados?
Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________
Muchas gracias por el reporte, en cuanto llegue a casa lo miro.
También detecté un problema con las propiedades que guardan valores con CR/LF (poco común, pero existen) que estoy analizando como solucionar.
Recuerden tener backup siempre, que esto está en pruebas todavía.
Saludos!
Hola,
Estimado Fernando:No sé si debía a esta altura, pero intenté revertir para un form, o sea, pasar de sc2 a scx.El scx se forma aparentemente bien, con igual size que el original.El sct se forma con algún defecto, con size mayor que el original.Con mi analizador casero, pude detectar algún problema, aunque no puedo asegurar que es todo. Si intentás abrir el formulario regenerado en el diseñador, se cuelga todo.De todos modos te adelanto un problema en la conformación de las propiedades array.El showgrid_rec.txt es sobre el regenerado. El showgrid_ori es sobre el original. Y en showgrid_dif te comento los problemas que encontré.No te envío los form por el tema de las clases.Muchas graciasFidel.
&& FoxBin2Prg del original&& línea 2168&&... Continua ... PROCEDURE Aproxim.LostFocus SET CONFIRM OFF" cAproxim = "" This.refresh" With thisform .TxAprox.Value = cAproxim .TxAprox.Visible = .f. .TxActual.Visible=.f. .iM1.Visible=.t. .ThMovim1.Setall("Enabled",.t.) .Grilla.Refresh .Grilla.SetFocus endwith ENDPROC
ENDDEFINE
DEFINE CLASS ficha AS commandgroup *< CLASSDATA: Baseclass="commandgroup" Timestamp="2013/02/15 17:26:16" Scale="Pixels" Uniqueid="_2UF0OFF3Z" /> BackColor = 221,226,222 ButtonCount = 4 Command1.Caption = "" Command1.DisabledPicture = ..\graphics\bgaddn.bmp Command1.Height = 22 Command1.Left = 4 Command1.Name = "Cma" Command1.Picture = ..\graphics\bgadd.bmp Command1.ToolTipText = "Agregar un Registro" Command1.Top = 3 Command1.Width = 26 Command2.Caption = "" Command2.DisabledPicture = ..\graphics\bgmod2n.bmp Command2.Height = 22 Command2.Left = 31 Command2.Name = "Cmm" Command2.Picture = ..\graphics\bgmod2.bmp Command2.ToolTipText = "Modificar el Registro Señalado" Command2.Top = 3 Command2.Width = 26&&... Sigue
** -------------------------------------------------------------&& FoxBin2prg de la bibiloteca reconstruida&& Linea 2168 PROCEDURE Aproxim.LostFocus SET CONFIRM OFF cAproxim = "" This.refresh With thisform .TxAprox.Value = cAproxim .TxAprox.Visible = .f. .TxActual.Visible=.f. .iM1.Visible=.t. .ThMovim1.Setall("Enabled",.t.) .Grilla.Refresh .Grilla.SetFocus endwith Thisform.GesFicha("A") Thisform.FunFormu1.PutRaya(This) Thisform.FunFormu1.PutRaya() Thisform.GesFicha("Q") Thisform.FunFormu1.PutRaya(This) Thisform.FunFormu1.PutRaya() Thisform.GesFicha("C") Thisform.FunFormu1.PutRaya(This) Thisform.FunFormu1.PutRaya() Thisform.GesFicha("M") Thisform.FunFormu1.PutRaya(This) Thisform.FunFormu1.PutRaya() ENDPROC
ENDDEFINE
DEFINE CLASS ficha AS commandgroup *< CLASSDATA: Baseclass="commandgroup" Timestamp="2013/02/15 17:26:16" Scale="Pixels" Uniqueid="_2UF0OFF3Z" /> BackColor = 221,226,222 ButtonCount = 4 Command1.Caption = "" Command1.DisabledPicture = ..\graphics\bgaddn.bmp Command1.Height = 22 Command1.Left = 4 Command1.Name = "Cma" Command1.Picture = ..\graphics\bgadd.bmp Command1.ToolTipText = "Agregar un Registro" Command1.Top = 3 Command1.Width = 26| PROCEDURE Aproxim.LostFocus |
| SET CONFIRM OFF |
| cAproxim = "" |
| This.refresh |
| With thisform |
| .TxAprox.Value = cAproxim |
| .TxAprox.Visible = .f. |
| .TxActual.Visible=.f. |
| .iM1.Visible=.t. |
| .ThMovim1.Setall("Enabled",.t.) |
| .Grilla.Refresh |
| .Grilla.SetFocus |
| endwith |
| ENDPROC |
| ENDDEFINE |
| DEFINE CLASS ficha AS commandgroup |
| *< CLASSDATA: Baseclass="commandgroup" Timestamp="2013/02/15 17:26:16" Scale="Pixels" Uniqueid="_2UF0OFF3Z" /> |
| BackColor = 221,226,222 |
| ButtonCount = 4 |
| Command1.Caption = "" |
| Command1.DisabledPicture = ..\graphics\bgaddn.bmp |
| Command1.Height = 22 |
| Command1.Left = 4 |
| Command1.Name = "Cma" |
| Command1.Picture = ..\graphics\bgadd.bmp |
| Command1.ToolTipText = "Agregar un Registro" |
| Command1.Top = 3 |
| Command1.Width = 26 |
| Command2.Caption = "" |
| Command2.DisabledPicture = ..\graphics\bgmod2n.bmp |
| Command2.Height = 22 |
| Command2.Left = 31 |
| Command2.Name = "Cmm" |
| Command2.Picture = ..\graphics\bgmod2.bmp |
| Command2.ToolTipText = "Modificar el Registro Señalado" |
| Command2.Top = 3 |
| Command2.Width = 26 |
| Command3.Caption = "" |
| Command3.DisabledPicture = ..\graphics\ventana5n.bmp |
| Command3.Height = 22 |
| Command3.Left = 58 |
| Command3.Name = "Cmc" |
| Command3.Picture = ..\graphics\ventana5.bmp |
| Command3.ToolTipText = "Consultar el Registro Señalado" |
| Command3.Top = 3 |
| Command3.Width = 26 |
| Command4.Caption = "" |
| Command4.DisabledPicture = ..\graphics\destroy3bmn.bmp |
| Command4.Height = 22 |
| Command4.Left = 85 |
| Command4.Name = "Cmb" |
| Command4.Picture = ..\graphics\destroy3bm.bmp |
| Command4.ToolTipText = "Eliminar el Registro Señalado" |
| Command4.Top = 3 |
| Command4.Width = 26 |
| Height = 28 |
| Name = "ficha" |
| Value = 1 |
| Width = 115 |
Estimado Fernando:No sé si debía a esta altura, pero intenté revertir para un form, o sea, pasar de sc2 a scx.El scx se forma aparentemente bien, con igual size que el original.El sct se forma con algún defecto, con size mayor que el original.Con mi analizador casero, pude detectar algún problema, aunque no puedo asegurar que es todo. Si intentás abrir el formulario regenerado en el diseñador, se cuelga todo.De todos modos te adelanto un problema en la conformación de las propiedades array.El showgrid_rec.txt es sobre el regenerado. El showgrid_ori es sobre el original. Y en showgrid_dif te comento los problemas que encontré.No te envío los form por el tema de las clases.Muchas graciasFidel.
El miércoles, 27 de noviembre de 2013 06:07:06 UTC-3, Fernando D. Bozzo escribió:
No te preocupes Fidel, ya tengo identificado el problema de los array y estoy trabajando en ello.
Gracias!
De nada Edgar ;-)
* Procedimiento Generado por Utiles.Genstruc * Fecha: 16/05/2003 Hora:00:35 *************************** PROCEDURE FREGFILE(cNameFile) ************************** * Generando Tabla: REGFILE If Vartype(cNameFile)#"C" cNameFile="VARCHI" Endif select 0 CREATE TABLE (DTEMP+"\"+cNameFile) FREE ; ("ARCHIVO" C(12),; "FORMULA" C(16)) ENDPROC
************************** PROCEDURE FCHEQUERA(cNamefile) ************************** * Generando Tabla: CHEQUERA If Vartype(cNameFile)#"C" cNameFile="VARCHI" Endif SELECT 0 CREATE TABLE (DTEMP+"\"+cNameFile) FREE ; ("IDCHERA" N(5,0),; "WB" C(2),; "SUFIJO" N(4,0),; "BANCO" C(20),; "CHEQUERA" C(8),; "WTIPO" C(1),; "CHETIPO" C(1),; "RANGO1" N(12,0),; "RANGO2" N(12,0),; "ACTUAL" N(12,0),; "LUSED" L ,; "PRIORI" L ,; "ACTIVO" L,; "FEGRA" D ,; "HOGRA" C(5),; "TERMINAL" C(10)) ENDPROC
Hola Fidel, lo que tengo pensado para foxbin2prg es todo enfocado al control de código fuente, con lo que intento generar algo que sea lo más sencillo posible para el desarrollador y que permita lo siguiente :
1) poder ver las diferencias fácilmente lado a lado
2) permitir aceptar o rechazar los cambios
3) poder hacer un merge de los cambios visualmente
Teniendo esto en cuenta, pensé en generar los comandos que crean las tablas (CREATE TABLE) con los campos de la tabla elegida, que no van a poder estar en orden alfabético porque eso cambiaría su estructura.
También pensé en generar los comandos de los índices (INDEX ON...) que tenga la tabla elegida, ordenados alfabéticamente por su tag
Finalmente pensé en las bases de datos (CREATE DATABASE) con sus reglas de RI y demás
Al final, viendo cada archivo por separado, lado a lado la versión vieja y la nueva, tiene que ser fácil comprobar los cambios hechos y subirlos al SCM.
Me serviría que me comenten si echan algo en falta en lo que comento, o alguna característica que no se me ocurrió, ya que el scctext no tenia estas opciones.
Ya veo, parece que en ese caso no respeta el ZOrder de ese objeto. ¿podrías adjuntar el SC2?

Qué bueno, hoy duermo tranquilo :-P
* Version del original<OBJETO_80> <CLASS>commandgroup</CLASS> <USER_PROPERTIES> Thisform.Objgrid </USER_PROPERTIES> <BASECLASS>commandgroup</BASECLASS> <OBJNAME>thmovmin</OBJNAME> <METHODS> <PROCEDURE> PROCEDURE Click SELECT (This.objGrid.RecordSource ) do case case this.value=1 go top case this.value=2 go bott case this.value=3 IF !BOF() SKIP -1 ENDIF case this.value=4 IF !EOF() SKIP ENDIF case this.value=5 This.ObjGrid.REfresh endcase This.ObjGrid.SetFocus ENDPROC </PROCEDURE
</METHODS></OBJETO_80>
* Versión del reconstruido con Foxbin2prg
<OBJETO_124> <CLASS>commandgroup</CLASS> <BASECLASS>commandgroup</BASECLASS> <OBJNAME>thmovim</OBJNAME> <METHODS> <PROCEDURE> PROCEDURE Click SELECT (This.objGrid.RecordSource ) do case case this.value=1 go top case this.value=2 go bott case this.value=3 IF !BOF() SKIP -1 ENDIF case this.value=4 IF !EOF() SKIP ENDIF case this.value=5 This.objGrid.REfresh endcase This.objGrid.SetFocus ENDPROC </PROCEDURE </METHODS></OBJETO_124>Gracias por tu ayuda Fidel. Voy a tener que mejorar los tests unitarios para comprobar estas cosas mejor :-(
Muchas gracias Arturo por tu ayuda.
Actualmente estoy haciendo un amplio juego de pruebas automatizadas con FoxUnit, ya que Fidel detectó un fallo que se repite e intento dar con él, y de paso para tener pruebas de regresión.
Saludos! ;-)
Gracias Fidel, en cuanto llegue a casa reviso esto a ver si puedo reproducirlo y así agrego el caso de prueba a los tests automatizados que estoy haciendo.
Estoy creando los casos de prueba con FoxUnit, pero para este desarrollo lleva bastante tiempo hacerlos.
Espero poder terminarlos para esta noche o como mucho para mañana, así puedo comprobar las incidencias que me reportaron.
no estoy de acuerdo con la nueva versión. debería ser b1.2
(:<{)