7

TortoiseSVN (साथ ही साथ other Tortoise clients) गणित में scriptdiff नोटबुक फ़ाइलों को शामिल करें। गणित के लिए डिफ कार्यक्षमता AuthorTools पैकेज में लागू की गई है (शायद कुछ बेहतर है?)क्या कमांड लाइन से गणित की भिन्न कार्यक्षमता का आह्वान करना संभव है?

स्क्रिप्ट वर्तमान में अस्थायी निर्देशिका में एक छोटी नोटबुक फ़ाइल बनाकर और सामने के अंत में खोलकर काम करता है। नोटबुक में एक बड़ा बटन है जो diff करेगा और फ़ाइल नामों को हार्ड कोडित किया जाएगा।

एक नुकसान यह है कि diff कोड के साथ नोटबुक temp निर्देशिका में छोड़ा जाएगा, और साफ़ नहीं किया जाएगा। हर बार जब हम एक diff करते हैं तो एक सहायक नोटबुक खोलने के लिए अनावश्यक लगता है।

क्या अस्थायी नोटबुक के माध्यम से जाने से बचने के लिए कमांड लाइन से भिन्न कार्यक्षमता लॉन्च करना संभव है? या इस प्रक्रिया को बेहतर बनाने के लिए कोई अन्य मजबूत तरीका है और सहायक नोटबुक के साथ अस्थायी फ़ोल्डर को कूड़े हुए से बचें?

diffing अनुभव में सुधार करने के लिए कोई सुझाव स्वागत है!

ध्यान दें कि चूंकि TortoiseSVN एक विंडोज प्रोग्राम है, इसलिए मैं मुख्य रूप से विंडोज-आधारित समाधानों में रूचि रखता हूं।


यहां एक उदाहरण नोटबुक है जो स्क्रिप्ट उत्पन्न करता है। मुझे एहसास है कि इसे सफाई की ज़रूरत है, लेकिन आखिरी बार मैंने जांच की कि यह संस्करण 5 में भी काम करता है (!), इसलिए मैं इसे अनावश्यक रूप से स्पर्श नहीं करना चाहता था (बिना किसी स्पष्ट रूप से सुधार किए)।

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

दिलचस्प प्रतिष्ठा: http://i.stack.imgur.com/2ze1M.png –

+0

एमएमए नोटबुक का संस्करण नियंत्रण आसान नहीं है। मैं आमतौर पर [इस सवाल] में माइकल पिलैट द्वारा दी गई सलाह का पालन करता हूं (http://stackoverflow.com/q/2816628/421225)। अर्थात। कैश और इतिहास बंद करें, फिर मानक टेक्स्ट-आधारित diff का उपयोग करें। – Simon

+0

@ सिमॉन 'नोटबुकडिफ 'ठीक काम करता प्रतीत होता है, क्या आपको इसके साथ समस्याएं थीं? – Szabolcs

उत्तर

4

यहां गणित स्क्रिप्ट का उपयोग करके नोटबुक diff का उत्पादन करने का एक सरल उदाहरण है।

सहेजें निम्नलिखित के रूप में diff.m

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[] 

फिर MathematicaScript -script diff.m "one.nb" "two.nb" का उपयोग कर कमांड लाइन से कहते हैं। यह मेरे सिस्टम (उबंटू 11.10, गणित 8.0.1) पर काम करता है और प्लेटफार्म स्वतंत्र होना चाहिए। यदि आप v8 से पुराने गणित के संस्करण का उपयोग कर रहे हैं, तो आपको MathematicaScript के बजाय {f1, f2} के लिए डिफ़ॉल्ट मानों का उपयोग करना होगा।

+0

असल में, यह संस्करण 7 पर काम नहीं कर रहा है। दोनों संस्करणों में, यदि 'नोटबुकडिफ' को नोटबुक ऑब्जेक्ट दिया जाता है, तो यह 'AuthorTools'NotebookDiff'Private'notebookDiff'' कहता है। यदि सिर 'नोटबुक' के साथ दिए गए अभिव्यक्तियों पर यह 'नोटबुकपूट' का उपयोग करता है, तो फिर 'नोटबुकडिफ' को कॉल करता है। अन्यथा, यह '' AuthorTools'NotebookDiff'Private'NotebookDiffFiles'' का उपयोग करने का प्रयास करता है, जो संस्करण 8 के साथ काम करता है लेकिन संस्करण 7 नहीं ... मुझे यकीन नहीं है कि क्यों। – Simon

+1

मेरे द्वारा लिंक किए गए मूल संस्करण की तुलना में मुख्य अंतर यह है कि आप एक स्क्रिप्ट द्वारा फ्रंट एंड को कॉल करना लपेटते हैं। जब फ्रंट एंड समाप्त होता है, तो स्क्रिप्ट फ़ाइल को हटा देती है। यह मूल वीबीस्क्रिप्ट संस्करण से भी संभव है।हालांकि, यह सिर्फ विंडोज़ पर काम नहीं करेगा क्योंकि आम तौर पर फ्रंट एंड के केवल एक ही उदाहरण को चलाने की अनुमति है: यदि नव प्रारंभिक फ्रंट एंड पहले से चलने वाला एक पता लगाता है, तो यह नोटबुक को खोला जा सकता है, और बाहर निकलता है । (असल में मुझे यह बहुत परेशान लगता है कि यह लिनक्स पर नहीं होता है।) – Szabolcs

+1

@ स्ज़ाबॉल्क्स: मैंने सोचा कि मुख्य अंतर यह था कि आपको "नोटबुक की तुलना करें" बटन दबाए जाने की आवश्यकता नहीं थी। विंडोज़ के कारण आपने जो समस्या का उल्लेख किया है, उसके लिए एक से अधिक फ्रंटेंड इंस्टेंस की अनुमति नहीं दे रहा है, हो सकता है कि आप 'FrontEndEventActions' में हुक करके फ़ाइल को हटा दें। उदाहरण के लिए: 'SetOptions [$ FrontEndSession, FrontEndEventActions -> {"विंडोक्लोज़":> (DeleteFile ["diff.file"]; SetOptions [$ FrontEndSession, FrontEndEventActions -> स्वचालित])}] '। इसके लिए कुछ उत्सुकता की आवश्यकता होगी ... शायद आप अपनी वर्तमान लिपि से बेहतर हो! – Simon

संबंधित मुद्दे

 संबंधित मुद्दे