2015-06-17 5 views
8

मेरे भंडार में, मेरे पास version-1.2.3 के रूप में टैग हैं। मैं एक revset उर्फ ​​new() है कि इस तरह कहा जाता है बनाने के लिए करना चाहते हैं:टैग्स के नामों के लिए मैं पुनरावृत्ति उपनाम कैसे बना सकता हूं जिनके नाम पैटर्न का पालन करते हैं?

hg log -r 'new(1.2.3, 1.2.4)' 

... और इस के लिए विस्तारित:

hg log -r '::version-1.2.4 - ::version-1.2.3' # What's new in 1.2.4? 

जब मैं यह करने के लिए करने की कोशिश की:

[revsetalias] 
new($1, $2) = ::version-$2 - ::version-$1 

... Mercurial ने संशोधन $2 (उदाहरण के लिए 1.2.3) संशोधन version से संशोधित करने के रूप में व्याख्या की, जो मेरा इरादा नहीं था।

मैं भी इस की कोशिश की, ## संयोजन ऑपरेटर का उपयोग:

new($1, $2) = ::"version-" ## $2 - ::"version-" ## $1 

लेकिन तब hg log -r 'new(1.2.3, 1.2.4)' मुझे इस त्रुटि देता है:

hg: parse error at 13: syntax error 

मैं भी :: वाक्य रचना के बजाय ancestors() उपयोग करने की कोशिश, लेकिन अभी भी वाक्यविन्यास त्रुटि मिली है। क्या ऐसा करना संभव है?

उत्तर

5

मैं निम्नलिखित है कि काम करता है परीक्षण किया:

new($1, $2) = (::"version-" ## $2) - (::"version-" ## $1) 

संदर्भ $1::$2 के लिए आप एक ही बात नहीं देंगे, यह $1 एक के बीच संशोधन का मतलब nd $2 एक बराबर revset है कि मैं पसंद करेंगे है:

new($1, $2) = only("version-" ## $2, "version-" ## $1) 

दस्तावेज़ के अनुसार यह सख्ती के बराबर है तुम क्या चाहते:

"only(set, [set])" 
     Changesets that are ancestors of the first set that are not ancestors of 
     any other head in the repo. If a second set is specified, the result is 
     ancestors of the first set that are not ancestors of the second set 
     (i.e. ::<set1> - ::<set2>). 
+0

'$ 1 :: $ 2'" के बीच संशोधन "नहीं है सख्त रूप में - यह $ 1 और $ 2 के बीच डीएजी है - और मैं वास्तविक उपयोग-मामले की कल्पना नहीं कर सकता, जब यह केवल() से भिन्न होता है। $ 1 के बहुत पूर्वजों से विलय विलय? –

+1

एक ही आधार से दो संस्करणों पर विचार करें: http: //pastebin.com/kBqniLt8 एचजी लॉग -आर "e2b7d1 :: aedc1a" कुछ भी नहीं देता एचजी लॉग -आर "केवल (e2b7d1, aedc1a)" बी और सी देता है – lc2817

+0

@LazyBadger: $ 1 * $ 2 का पूर्वज नहीं है। वे दोनों शाखाएं ट्रंक से बाहर हैं। $ 1 :: $ 2 ** ** मेरे लिए काम नहीं करेगा **। – Kevin

-1

साइड नोट: $1::$2 अधिक पठनीय हो सकता है और आप DAG केवल only() सभी मामलों में सही परिणाम प्रदान करता है के एक ही हिस्से दे देंगे, DAG @ lc2817 जवाब में चर्चा)

के अनुसार विफल हो सकता है मैं इस सवाल का जवाब प्राप्त करने में लगभग सफल रहा था, लेकिन कुछ परेशानियों (और डिबग करने के लिए कोई तरीके जानते हैं) अंतिम चरण में: [revsetalias]

प्रस्तावना

01 में सभी के योग

क्योंकि मापदंडों टैग और टैग() विधेय पैरामीटर में regexps उपयोग करने की अनुमति कर रहे हैं - मैं वे

Revset tag("re:version\-") सभी टैग दिखाएं इस्तेमाल करेंगे, स्ट्रिंग के रूप में हार्डकोडेड संख्या के साथ "version-"

Revset के साथ शुरू एकल बदलाव

hg log -r "tag('re:version\-1.7$') 
changeset: 2912:454a12f024f3 

(पिछला $ अनिवार्य है, अन्यथा यह सब 1 होगा।7 * टैग)

मेरे revsetalias में सबसे अच्छा प्रयास tag('re:version\-\$1$') था - कोई त्रुटि है और कोई उत्पादन के साथ: मैं पूरी तरह से आदेश सभी processings और प्रतिस्थापन देख सकते हैं और parametrized revsetalias

साथ अपनी गलतियों का पता लगाने के आदेश का विस्तार नहीं मिल सकता है HTH

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