J'utilise mercurial (spécifiquement tortoisehg sous Windows) pour faire le contrôle de la version du code VBA. Toute personne qui a essayé ceci sait que VBA change le cas de chaque variable dans un projet chaque fois qu'une déclaration de cette variable est modifiée n'importe où dans le projet (quelle que soit la portée). Il fait que la version contrôle un cauchemar. P>
Je voudrais Remarque: Je ne parle pas de traiter des "noms de fichiers insensibles de casse" (oui, je vous parle de google ...) p>
3 Réponses :
Vous pouvez le faire lors de la diffecture de votre consommation à l'écran à l'aide de extension extDiff . < Pré> xxx pré>
alors vous exécutez Cependant, cela ne sera pas aussi utile que vous le souhaitez, bien sûr, bien sûr, mercurial ne peut pas ignorer l'affaire - Il s'agit du hachage cryptographique du contenu du fichier et ceux ne permettent pas de wiggle room. Donc, si vous obtenez cette configuration, vous ferez Pour que vous puissiez faire ce travail à l'écran, mais pas fondamentalement. p> Une option serait de trouver un nettoyeur de code de base visual, similaire à hg myDIFF code> de la ligne de commande. Que, bien sûr, vous exige que vous ayez un DIFF binaire installé, qu'il s'agisse de GNU ou d'un autre. P>
HG myDIFF CODE>, et voir aucune modification, puis faire
hg commit code> et voir les modifications partout à la place. P>
indent code> pour c- Comme les langages, cela normalise la caisse variable et exécuter cela dans un crochet de validation mercurial. Ensuite, au moins tout le code entrant dans le contrôle de la source sera cohérent et vous pouvez differser avec précision des révisions. P> P>
Cela ressemble à une sorte de nettoyant de code sera ma seule option. Merci de votre aide.
Si vous êtes d'accord avec votre code dans toutes les minuscules, disons, alors vous pouvez utiliser le codé / décodage crochets pour cela. Cela fonctionnerait comme ceci: Ceci sera coder em> le contenu du fichier en minuscule chaque fois que vous faites un commit. Les diffs sont également calculés sur la base de la version codée (référentiel) des fichiers. P> considérer un fichier contenant p> changer dans votre copie de travail à p> donnera un diff de p> remarque comment la capitale "H" et "W" a été ignorée . P> Je ne sais pas vraiment rien sur le code VBA, je ne suis donc pas sûr à 100% de cette solution pour vous. Mais j'espère que cela peut être un point de départ. P> Un inconvénient est que vous devez définir cette règle de codage pour tous vos référentiels. Reposettings extension peut vous aider ici. P> P>
Cela ne fonctionnerait pas vraiment pour moi dans ce cas, mais c'est un excellent conseil que je vais essayer de me souvenir de l'avenir. Merci pour l'aide.
Voici la solution que j'ai installée. 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 suit: p>
pour les fichiers qui ont des changements réels que nous nous soucions, je vois toujours les changements de cas qui ont été apportés. Si cela entraîne beaucoup de bruit, j'ouvre le fichier dans un outil de comparaison qui permet à la casse-insensitante se compare (par exemple, KDiff). P>
Ce n'est pas une solution parfaite, mais elle supprime environ 90% de la Frustration pour moi. P>
Voici mon script. Notez que le script comprend un autre script Autohotkey, ConsoleAppaT.ahk, qui fournit une fonction nommée, consoleApp_Runwait () code>. Ceci est un script tiers qui ne fonctionne plus très bien avec 64 bits AHK, alors je ne comprends pas cela dans le cadre de ma réponse. Toute fonction AHK qui exécute une ligne de commande et renvoie la sortie en tant que chaîne suffira. P>
; 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
}
Merci d'avoir confirmé qu'il s'agit d'une approche utile. Je pensais à quelque chose de similaire.
Nous nous retrouvons à nouveau mon ami! Avez-vous déjà trouvé une solution ou peut-être un VCS qui peut faire des différences insensibles?
@Rubberduck: Vous m'avez inspiré de publier enfin l'approche que j'utilise depuis plusieurs années. Je n'ai pas résolu le problème complètement, mais j'ai dépouillé une grande douleur. Fondamentalement, j'ignore les fichiers où les seuls changements sont au boîtier. Si le fichier a des changements légitimes, je suis toujours bloqué pour voir aussi les changements de cas, mais c'est (beaucoup) mieux que rien.