Voici la solution que j'ai choisie. C'est loin d'être idéal, mais mieux que les autres alternatives que j'ai envisagées.
J'ai créé un script Autohotkey qui effectue les opérations suivantes:
- Revient fichiers MS Access dans un référentiel avec les changements détectés (à .orig fichiers)
- lit dans le fichier .orig (celui avec le modifications)
- lit dans le fichier existant (celui déjà dans le référentiel)
- convertit le texte des deux fichiers en minuscules
- compare le contenu de minuscules des fichiers
- si les fichiers diffèrent encore, le fichier est restauré .orig il peut être archivé dans le serveur
- si les fichiers sont les mêmes (ils ne diffèrent que dans le cas, le fichier est supprimé .orig parce que nous don Ne tenez pas compte de ces changements)
Pour les fichiers qui ont des modifications réelles que nous nous soucions, je vois encore les changements de cas qui ont été faites aussi bien. Si cela entraîne beaucoup de bruit, j'ouvre le fichier dans un outil de comparaison qui permet des comparaisons insensibles à la casse (par exemple, kdiff).
Ce n'est pas une solution parfaite, mais elle supprime environ 90% de la frustration pour moi.
Voici mon script. Notez que le script inclut un autre script Autohotkey, ConsoleApp.ahk, qui fournit une fonction nommée, ConsoleApp_RunWait()
. C'est un script de 3ème partie qui ne fonctionne plus très bien avec AHK 64 bits, donc je ne l'inclue pas dans ma réponse. Toute fonction AHK qui exécute une ligne de commande et renvoie la sortie sous la forme d'une chaîne suffira.
; 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
}
Nous retrouvons mon ami! Avez-vous déjà trouvé une solution, ou peut-être un VCS qui peut faire des diffs insensible à la casse? – RubberDuck
@RubberDuck: Vous m'avez inspiré pour finalement poster l'approche que j'utilise depuis plusieurs années. Je n'ai pas complètement résolu le problème, mais j'ai éliminé une grande partie de la douleur. Fondamentalement, j'ignore les fichiers où les seuls changements sont à l'enveloppe. Si le fichier a des changements légitimes, je suis toujours coincé en voyant le cas changer aussi, mais c'est (beaucoup) mieux que rien. – mwolfe02