7

TortoiseSVN (other Tortoise clients'un yanı sıra), Mathematica'da script - diff dizüstü bilgisayar dosyalarını içerir. Mathematica için Diff işlevselliği AuthorTools paketinde uygulanmaktadır (belki daha iyi bir şey var mı?)Mathematica'nın diff işlevselliğini komut satırından çağırmak mümkün mü?

Betik şu anda geçici dizinde küçük bir defter dosyası oluşturarak ve ön uçta açarak çalışır. Dizüstü bilgisayar, difleri yapacak ve dosya adlarının sabit kodlanmış olarak bulunmasını sağlayan büyük bir düğmeye sahiptir.

Bir dezavantaj, fark kodlu dizüstü bilgisayarın geçici dizinde kalması ve temizlenmemesidir. Ayrıca, her fark ettiğimizde bir yardımcı dizüstü bilgisayar açık olması gerekmiyor.

Geçici dizüstü bilgisayardan geçmemek için, komut işlevinden komut işlevselliğini başlatmak mümkün müdür? Veya bu işlemi iyileştirmek için sağlam yoludur ve temp klasörünü yardımcı dizüstü bilgisayarlarla gözden geçirmekten kaçının mı?

Farklı deneyimi geliştirmek için herhangi bir öneri bekliyoruz!

TortoiseSVN bir Windows programı olduğundan, esasen Windows tabanlı çözümlerle ilgileniyorum.


Komut dosyasının oluşturduğu örnek bir not defteri. Temizleme ihtiyacı duyduğunun farkındayım, ama son kez kontrol ettim, versiyon 5'de de çalıştım (!), Bu yüzden gereksiz yere dokunmak istemedim (bir şeyi gözle görülür bir şekilde geliştirmeden).

Notebook[{ 
    Cell[BoxData[ButtonBox["\<\"Compare Notebooks\"\>", 
     ButtonFrame->"DialogBox", Active->True, ButtonEvaluator->Automatic, 
     ButtonFunction:>(Needs["AuthorTools`"]; NotebookPut[Symbol["NotebookDiff"]["one.nb", "two.nb"]]) 
    ]], NotebookDefault] }, 
    Saveable->False, Editable->False, Selectable->False, WindowToolbars->{}, 
    WindowFrame->ModelessDialog, WindowElements->{}, 
    WindowFrameElements->CloseBox, WindowTitle->"Diff", 
    ShowCellBracket->False, WindowSize->{Fit,Fit} 
] 
+2

İlginç bir üne: http://i.stack.imgur.com/2ze1M.png –

+0

Mma dizüstü bilgisayarların sürüm kontrolü kolay değil. Normalde Michael Pilat'ın bu sorudaki tavsiyelerini takip ediyorum (http://stackoverflow.com/q/2816628/421225). Yani önbelleği ve geçmişi kapatın, ardından standart bir metin tabanlı fark kullanın. – Simon

+0

@Simon 'NotebookDiff' işe yarıyor gibi görünüyor, sorunlarınız mı var? – Szabolcs

cevap

4

Bir Mathematica komut dosyası kullanarak dizüstü bilgisayar farkını üretmenin basit bir örneği.

Needs["AuthorTools`"] 
If[Length[$ScriptCommandLine]>=3, 
    {f1, f2} = $ScriptCommandLine[[{2,3}]], 
    {f1, f2} = {"one.nb", "two.nb"}] 
diff = FileNameJoin[{$TemporaryDirectory, "diff.nb"}] 
Put[NotebookDiff[f1, f2], diff] 
Run["Mathematica " <> diff] 
DeleteFile[diff] 
Exit[] 

Sonra MathematicaScript -script diff.m "one.nb" "two.nb" kullanarak komut satırından diyoruz

diff.m olarak

kaydet aşağıdaki. Bu sistemimde çalışır (Ubuntu 11.10, Mathematica 8.0.1) ve platformdan bağımsız olmalıdır. V8'den daha eski bir Mathematica sürümü kullanıyorsanız, MathematicaScript yerine MathKernel -noprompt -run < diff.m kullanmanız ve {f1, f2} için varsayılan değerler kullanılacaktır.

+0

Aslında, bu sürüm 7 üzerinde çalışıyor görünmüyor. Her iki sürümde, eğer NotebookDiff 'defter nesneleri verilirse, o zaman 'AuthorTools'NotebookDiff'Private'notebookDiff'' çağırır. 'Notebook' başlığıyla ifadeler verildiğinde, bunlarda "NotebookPut" kullanır, sonra tekrar NotebookDiff'i çağırır. Aksi halde, sürüm 8 ile çalışır, ancak sürüm 7 ile çalışan '' AuthorTools'NotebookDiff'Private'NotebookDiffFiles'' kullanmaya çalışır ... Emin değilim neden. – Simon

+1

Bağlandığım orijinal sürümle karşılaştırıldığında temel fark, Ön Uç'u bir komut dosyasıyla çağırmaktır. Ön Uç bittiğinde, betik dosyayı siler. Bu orijinal VBScript sürümünde de mümkündür.Ancak, yalnızca Windows üzerinde çalışmayacaktır çünkü genellikle Ön Uçun yalnızca bir örneğinin çalışmasına izin verilir: yeni başlatılmış Ön Uç zaten çalışan bir dosyayı algılarsa, dizüstü bilgisayarın kendisine açılmasını ve çıkmasını sağlar. . (Aslında Linux'ta bunun gerçekleşmemesini oldukça sinir bozucu buluyorum.) – Szabolcs

+1

@Szabolcs: Asıl fark, "Defterleri Karşılaştır" düğmesine basmanız gerekmediğiydi. Birden fazla önyüz örneğine izin vermemeniz nedeniyle Windows'dan bahsettiğiniz sorunla ilgili olarak, belki de dosyayı 'FrontEndEventActions' içine çırparak silersiniz. Örneğin: SetOptions [$ FrontEndSession, FrontEndEventActions -> {"WindowClose":> (DeleteFile ["diff.file"]; SetOptions [$ FrontEndSession, FrontEndEventActions -> Otomatik])}] '. Bu biraz incelikli olmalı ... belki de şu andaki senaryonuzla daha iyisin! – Simon

İlgili konular