Avec Windows, Mercurial et l'extension extdiff (pour Mercurial). J'essayais de configurer extdiff pour utiliser WinDiff comme un outil de comparaison externe, mais je pense que j'ai suffisamment réduit le problème pour dire que le problème est avant même que je n'aille aussi loin. D'après ce que je comprends d'extdiff, il appelle simplement votre programme cmd.winmerge, et lui passe les répertoires nécessaires. Je travaille également hors de certaines hypothèses présentées ici (qui peuvent ou peuvent ne pas être précis, je suis en train d'apprendre Mercurial):Mercurial/extdiff ne change pas en temp dir (comme je le pense)
qui dit:
The extdiff (visual diff) extension works like this:
1-Generate temporary directory(ies) for older changesets
2-run util.system(cwd=tempdir, "yourdiff tool dir1 dir2")
util.system does:
2.1 store cwd;
2.2 cd tempdir
3-run your diff tool, wait for it to exit
4-cd oldcwd
5-Then finally extdiff deletes the temp directories.
Le problème que Je ai est que extdiff ne semble pas être en train de changer dans le répertoire temp avant de continuer, comme il semble qu'il est censé faire à l'étape 2.1 ci-dessus. En essayant d'isoler le problème, j'ai écrit un fichier batch juste pour voir ce que le cd était, ce qui était passé, et comment exactement il était passé. Le fichier de commandes est la suivante:
@echo off
echo %cd%
echo %1
echo %2
D:\Documents\apps\WinMergePortable\App\WinMerge\WinMergeU.exe %1 %2
Je puis mis en place extdiff d'utiliser ce fichier batch comme mon programme extdiff. Cela fonctionne, mais je vois que quand il fait écho à% cd%, c'est juste c: \, pas c: \ temp comme prévu. J'ai vérifié que extdiff crée les fichiers temporaires dans les répertoires temporaires appropriés (comme c'est supposé le faire à l'étape 1 ci-dessus, quelque chose comme c: \ temp \ extdiff.xxxxxx \ someFolder.someChangesetID \ fichier.ext), donc je sais que c'est VOIR ces répertoires. Il ne change pas correctement avant d'appeler WinMerge, donc quand WinMerge est ouvert, il ne voit pas les fichiers temporaires (puisqu'il ne se trouve pas dans le bon répertoire de travail).
C'est essentiellement là où je suis coincé. Je ne sais pas où aller d'ici. Je pensais juste mettre
cd %tmp%
dans mon fichier batch, mais cela ne fonctionne toujours pas saisir le extdiff.xxxxx \ sous-répertoire qui extdiff crée les fichiers temporaires dans
En résumé:. :-(
EDIT: Modification du fichier batch pour
@echo off
echo %cd%\extdiff*
echo %1
echo %2
D:\Documents\apps\WinMergePortable\App\WinMerge\WinMergeU.exe %1 %2
semble le faire fonctionner (note a changé la deuxième ligne), mais il semble toujours un hack méchant à la place de comment il est censé fonctionner. : - \
EDIT: Voici mon fichier Mercurial.ini:
[ui]
username = Tim Skoch <[email protected]>
editor = D:\Documents\apps\Notepad++\notepad++.exe -multiInst
[extensions]
hgext.graphlog =
hgext.extdiff =
[extdiff]
cmd.winmerge = d:\Documents\apps\mercurial\diff_winmerge.bat
Le premier paragraphe se réfère à WinDiff (que je reconnais à partir du Windows SDK), pas WinMerge. –
Il serait utile de voir les parties pertinentes de votre 'Mercurial.ini' ou' .hg \ hgrc'. –
J'ai ajouté mon fichier Mercurial.ini; Je pense que c'est correct, car il semble que ça se passe bien (mais encore une fois, je poste pour de l'aide, donc je ne suis évidemment pas 100% confiant). C'est juste que le CWD ne change pas correctement. – loneboat