2012-01-09 14 views
7

और हैप्पी न्यू इयर के साथ कमांड लाइन svn पर रंग जोड़ें। क्रिसमस के खाने से ठीक होने के लिए यहां एक मुश्किल मुद्दा है!एसवीएन: अजीब (बैश में)

function svn { 
    command svn "[email protected]" | awk ' 
    BEGIN { 
    cpt_c=0; 
    } 
    { 
    if  ($1=="C") { 
     cpt_c=cpt_c+1; 
     print "\033[31m" $0 "\033[00m"; # Conflicts are displayed in red 
    } 
    else if ($1=="A") { 
     print "\033[32m" $0 "\033[00m"; # Add in green 
    } 
    else if ($1=="?") { 
     print "\033[36m" $0 "\033[00m"; # New in cyan 
    } 
    else if ($1=="D") { 
     print "\033[35m" $0 "\033[00m"; # Delete in magenta 
    } 
    else    { 
     print $0;      # No color, just print the line 
    } 
    } 
    END { 
    print cpt_c, " conflicts are found."; 
    }'; 
} 

कोड के इस भाग को मैं वास्तव में क्या करना चाहते हैं:


यहाँ बैश कोड (मैं फ़ाइल .bashrc में रख) जो काम करता है का एक हिस्सा है। svn फ़ंक्शन (स्थिति, अद्यतन, आदि) रंगों के साथ मुद्रित होते हैं। आंतरिक रूप से जरूरतों के लिए, मैं colorsvn या svn-color जैसी चीजों को स्थापित नहीं करना चाहता हूं।

यहाँ उपरोक्त कोड का एक उदाहरण है: (चित्र पोस्ट करने के लिए enought प्रतिष्ठा है नहीं)

svn command displayed in colors

और फिर, वह यह है कि पूरी तरह से है कि मैं क्या चाहते हैं। समस्या तब होती है जब एक संघर्ष पाया जाता है (उदाहरण के लिए, जब मैं एक अद्यतन करता हूं): वास्तव में, जब कोई फ़ाइल विवादित होती है, तो एसवीएन को उपयोगकर्ता को सौंप दिया जाता है, ताकि उसे कुछ अक्षरों को टाइप किया जा सके (नीचे देखें)

# svn update 
Conflict discovered in 'test.txt'. 
Select: (p) postpone, (df) diff-full, (e) edit, 
     (mc) mine-conflict, (tc) theirs-conflict, 
     (s) show all options: 

वहाँ उपयोगकर्ता प्रकार कुछ बताने के लिए awk का कोई तरीका है (उदाहरण ई के लिए, विम विरोध हुआ फ़ाइल में खुला जो) (उदाहरण के लिए के बाद प्रकार ई कुछ पंक्तियों को हटा दें तो बचाने & छोड़ने) कुछ करना, और संघर्ष को हल करने की पुष्टि करने के लिए एक और पत्र टाइप करें, फिर अंततः svn अद्यतन (अन्य फाइलें, आदि) का अगला चरण प्रदर्शित करें?

दूसरे शब्दों में, मैं स्क्रिप्ट के साथ इंटरैक्ट करने के लिए स्क्रिप्ट विच डिस्प्ले रंगों को "रोक" देना चाहता हूं, फिर svn अपडेट चालू करें। मुझे लगता है कि भविष्य के लिए यह बहुत उपयोगी होगा कि यह जानने के लिए कि कॉलर स्क्रिप्ट को कैसे रोकें, फिर फिर से शुरू करें!


क्या मैंने खुद को स्पष्ट रूप से विचार किया? मेरी अंग्रेजी उतनी अच्छी नहीं है जितनी मेरी इच्छा है:/

यदि आपको विवरण चाहिए तो कृपया बेझिझक पूछें!

+3

आपका 'आदेश svn' अभी भी आपका इनपुट प्राप्त करता है। स्वायत्त और संवादात्मक निष्पादन के बीच स्विच करने के लिए 'उम्मीद' जैसे टूल हैं, लेकिन यह यहां बिंदु के बगल में कुछ हद तक हो सकता है। सही समाधान एक निम्न-स्तरीय रैपर है, मुझे लगता है कि आपने जो कहा है, वह आप उपयोग नहीं करना चाहते हैं। आपकी awk स्क्रिप्ट एक इनपुट पाइप को अपने इनपुट प्राप्त करता है लेकिन आप शायद एक मोड जोड़ने के लिए कुछ हैक कर सकते हैं जहां यह '/ dev/tty' या कुछ ऐसे से अतिरिक्त इनपुट पढ़ता है। – tripleee

+0

क्या आप इन सब को संभालने के लिए अपने बैश फ़ंक्शन 'svn' को विस्तारित करना चाहते हैं, या क्या आप कल्पना करते हैं कि' svn' फ़ंक्शन चलाने के बाद आवश्यक 'पॉज़िंग' अलग कोड के रूप में आवश्यक है? संयोग से आपका अंग्रेजी ठीक है! सौभाग्य। – shellter

+0

@shellter: ठीक है, मैं अपने बैश फ़ंक्शन का विस्तार करना चाहता हूं, यह सबसे अच्छा होगा। लेकिन मैं सभी संभावित समाधानों के बारे में खुला हूं;) मेरी अंग्रेजी के लिए टाई! –

उत्तर

3

आप संघर्ष के लिए संकेत नहीं है svn update --accept postpone ताकि svn चलाने का प्रयास किया?

+0

मैन, यह सही है। संघर्ष के लिए कोई और संकेत नहीं ...तो मैं अपनी पूरी लिपि रख सकता हूं! बहुत बहुत धन्यवाद, यह स्पष्ट था लेकिन मुझे पता नहीं चला! –

+1

नोट: ** सभी एसवीएन से बचने के लिए ** **, '-ऑन-इंटरैक्टिव' विकल्प (किसी भी एसवीएन उपसमूह के लिए) का उपयोग करना बेहतर है। –

0

यहां एक सरल और सुरक्षित कामकाज है (आपकी स्क्रिप्ट के साथ परीक्षण किया गया है)। क्योंकि SVN बस कॉल

system(getenv("SVN_EDITOR")) // or something similar 

आप बस कर सकते हैं (बैश में, अन्य के गोले के लिए समायोजित) निम्नलिखित:

export SVN_EDITOR="</dev/tty >&/dev/tty vi" 

तब आप अपने संपादन करने में सक्षम हो जाएगा, और से अपने रंग योजना रखना awk।

मुझे नहीं पता कि यह अन्य संपादकों के साथ काम करता है, लेकिन मुझे उम्मीद है कि यह करता है। यह मानक मानक रीडायरेक्ट दिया जाना चाहिए।

+0

मैं इस सप्ताह के अंत में कुछ परीक्षण करूँगा, और आपको बताऊंगा कि क्या हो रहा है, धन्यवाद! –

2

हालांकि विशेष रूप से आपके प्रश्न का उत्तर नहीं दे रहा है - मैंने svn commit चलाते समय awk को बाईपास किया है जिसमें मैंने थोड़ा स्क्रिप्ट और अपनी स्क्रिप्ट का संस्करण बनाया है। इसके अलावा, मैंने कुछ प्रकार के आउटपुट में और रंग जोड़े। लिपि ऑनलाइन उपलब्ध है - कृपया अपने परिवर्तन करने के लिए स्वतंत्र महसूस करें।

+0

वाह, मुझे थोड़ा चापलूसी लग रहा है! ठीक है आप कुछ रंग जोड़ते हैं। लेकिन जैसा कि मैंने यह बताया था, फ़ाइल के मामले में एक एसवीएन अपडेट के दौरान विवादित हो रहा है, मुझे लगता है कि आपके पास एक ही समस्या होगी: 'offres.php' में खोज की गई संघर्ष। का चयन करें: (पी) स्थगित, (डीएफ) diff-full, (ई) संपादित करें, (एच) अधिक विकल्पों के लिए सहायता: ' –

+0

मेरा सेटअप अलग है। मैं समानांतर में 'svn' भंडार और एक' गिट 'भंडार का उपयोग कर रहा हूं। संघर्ष केवल 'गिट' के माध्यम से हल किए जाते हैं। प्रत्येक बार जब मैं 'svn' में प्रतिबद्ध हूं तो मुझे कोई संघर्ष नहीं होगा। - मुझे आपके संघर्ष को पुन: पेश करने के लिए कुछ परीक्षण परियोजना स्थापित करने की आवश्यकता होगी। कोई अपराध नहीं! मैं स्वार्थी "रंग" कारणों से आपकी स्क्रिप्ट का उपयोग करता हूं। हालांकि, मैं मार्च में आपकी समस्या को जल्द से जल्द देख सकता हूं क्योंकि इस दौरान मैं छुट्टी पर रहूंगा। – JJD

+1

आखिरकार, 4+ साल बाद, मैंने गिटहब के माध्यम से इस स्निपेट के अपने संस्करण को साझा करने का निर्णय लिया है, जैसा आपने पहले किया था;) मैंने कई सुधार किए हैं, इसलिए यदि कोई दिलचस्पी लेता है, तो कृपया देखें [ सुंदर एसवीएन का यह अद्यतित संस्करण] (https://github.com/4wk-/beautifulSVN) –