Aquí está la solución que he establecido. Está lejos de ser ideal, pero mejor que las otras alternativas que he considerado.
creé un script de AutoHotkey que hace lo siguiente:
- revierte archivos de MS Access en un repositorio con los cambios detectados (a .orig archivos)
- lee en el archivo .orig (el que tiene el cambios)
- lee en el archivo existente (del que ya está en el repositorio)
- convierte el texto de ambos ficheros a minúsculas
- compara el contenido minúsculas de los archivos
- si los archivos aún difieren, el archivo .orig se restaura para que se pueda enviar al repositorio
- si los archivos son los mismos (es decir, se diferencian solo en el caso, el archivo .orig se elimina porque no lo hacemos 't se preocupan por esos cambios)
Para los archivos que tienen cambios reales que nos importan, aún veo los cambios de casos que se realizaron. Si eso resulta en mucho ruido, abro el archivo en una herramienta de comparación que permite comparaciones insensibles a mayúsculas y minúsculas (por ejemplo, kdiff).
No es una solución perfecta, pero elimina aproximadamente el 90% de la frustración para mí.
Aquí está mi script. Tenga en cuenta que el script incluye otro script de Autohotkey, ConsoleApp.ahk, que proporciona una función llamada, ConsoleApp_RunWait()
. Este es un script de terceros que ya no funciona muy bien con AHK de 64 bits, por lo que no lo incluyo como parte de mi respuesta. Cualquier función AHK que ejecute una línea de comando y devuelva el resultado como una cadena será suficiente.
; This script checks an MS Access source directory and reverts all files whose only modifications are to the
; case of the characters within the file.
#Include %A_ScriptDir%\ConsoleApp.ahk
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
; Allow for custom path to hg (support for moving to TortoiseHg 2.0)
IniRead hg, %A_ScriptDir%\LocalSettings\Settings.cfg, TortoiseHg, hg_path, hg
if 0 < 1 ; The left side of a non-expression if-statement is always the name of a variable.
{
MsgBox Usage:`n`HgIgnoreCase DirectoryWithFilesToScrub
ExitApp
}
SrcDir = %1%
StringReplace SrcDir, SrcDir, ", , All
StringRight test, SrcDir, 1 ; add trailing slash if necessary
ifnotequal test, \
SrcDir = %SrcDir%\
RestoreOriginals(SrcDir)
RevertCaseChangeModifiedFiles(SrcDir)
RevertCaseChangeModifiedFiles(SrcDir) {
global hg
includes = -I "*.form" -I "*.bas" -I "*.report" -I "*.table"
cmdline = %hg% revert --all %includes%
;Don't revert items that have been removed completely
Loop 3
{
Result := ConsoleApp_RunWait(hg . " status -nrd " . includes, SrcDir)
If (Result)
Break
}
Loop parse, Result, `n, `r
{
if (A_LoopField)
cmdline = %cmdline% -X "%A_LoopField%"
}
Result =
;msgbox %cmdline%
;revert all modified forms, reports, and code modules
Loop 3
{
Result := ConsoleApp_RunWait(cmdline, SrcDir)
If (Result)
Break
}
;MsgBox %Result%
Loop parse, Result, `n, `r
{
StringLeft FileStatus, A_LoopField, 9
If (FileStatus = "reverting")
{
StringMid FName, A_LoopField, 11
FullPath = %SrcDir%%FName%
ToolTip Checking %FullPath%
RestoreIfNotEqual(FullPath, FullPath . ".orig")
}
}
ToolTip
}
RestoreIfNotEqual(FName, FNameOrig) {
FileRead File1, %FName%
FileRead File2, %FNameOrig%
StringLower File1, File1
StringLower File2, File2
;MsgBox %FName%`n%FNameOrig%
If (File1 = File2)
FileDelete %FNameOrig%
Else
FileMove %FNameOrig%, %FName%, 1
}
RestoreOriginals(SrcDir) {
Loop %SrcDir%*.orig
{
;MsgBox %A_LoopFileLongPath%`n%NewName%
NewName := SubStr(A_LoopFileLongPath, 1, -5)
FileMove %A_LoopFileLongPath%, %NewName%, 1
}
while FileExist(SrcDir . "*.orig")
Sleep 10
}
¡Nos encontramos de nuevo amigo mío! ¿Alguna vez encontró una solución, o quizás un VCS que puede hacer diffs insensibles a mayúsculas y minúsculas? – RubberDuck
@RubberDuck: Me inspiró para finalmente publicar el enfoque que he estado usando durante los últimos años. No he resuelto el problema por completo, pero he eliminado gran parte del dolor. Básicamente, ignoro los archivos donde los únicos cambios son en la carcasa. Si el archivo tiene cambios legítimos, todavía estoy atascado viendo los cambios del caso también, pero es (mucho) mejor que nada. – mwolfe02