2010-11-26 17 views
8

परिदृश्य: मैं एक कार्यक्रम 'विरासत में मिला है "कर दिया है, मर्क्युरियल में रखा है कि केवल विशेष फ़ाइलों के लिए विशिष्ट तोड़ मरोड़ कि में जाँच कर रहे हैं के साथ अपने सिस्टम पर काम करता है मैं नहीं में इन तोड़ मरोड़ जाँच करना चाहते हैं Mercurial एक रिवर्स-पैच कर सकते हैं?

।। इसका सबसे हालिया समाधान यह है कि इन tweaks युक्त एक mercurial पैच फ़ाइल (एचजी diff> पैचफाइल) बनाने के लिए है; जब मुझे अपने परिवर्तनों की जांच करने की आवश्यकता होती है, तो मैं पैच को फिर से लागू कर दूंगा, पैच को दोबारा लागू कर दूंगा। (अगर मेरे पास स्रोत का पूरा नियंत्रण था, तो मैं इन सभी छोटे बदलावों को एक एकल कॉन्फ़िगरेशन फ़ाइल में ले जाऊंगा जो संस्करण नियंत्रण में नहीं है, संस्करण नियंत्रण के तहत "नमूना" कॉन्फ़िगरेशन फ़ाइल डालने)

दुर्भाग्य से, यह ऐसा लगता है कि जीएनयू patch कमांड --reverse ध्वज का समर्थन करता है, लेकिन यह एक पैच फ़ाइल के रूप में एचजी के बहु-फ़ाइल diff प्रारूप का समर्थन नहीं करता है (या शायद यह करता है, और मुझे इसके लिए स्विच नहीं पता?)। ओटीओएच, एचजी का अपना patch कमांड है जो diff को लागू कर सकता है, लेकिन यह किसी भी प्रकार के reverse ध्वज का समर्थन नहीं करता है।

तो मेरे सवाल दोहरा है:

  1. कैसे इस अस्थिर में किया जाना चाहिए? निश्चित रूप से एक "ट्वीक पैच" पर लटकना इस स्थिति को संभालने का एकमात्र तरीका नहीं है। हो सकता है कि मर्क्यूरियल में ऐसे अस्थायी, अतुलनीय परिवर्तनों के लिए एक प्लगइन या कुछ बनाया गया हो।
  2. चीजों के अलावा किया जाना चाहिए, क्या इस तरह के एक मेरकोरियल रेपो को इस तरह के एक मेरकोरियल डिफ-पैच को रिवर्स-लागू करने का कोई तरीका है? ऐसी अन्य स्थितियां हैं जहां ऐसी कार्यक्षमता उपयोगी होगी।

उत्तर

19

मर्क्युरियल के रिवर्स patch आदेश (वास्तव में import) का समर्थन नहीं करता है, लेकिन hg diff करता है। उस पर --reverse का उपयोग करें और आपके पास एक उल्टा पैच होगा जो Mercurial लागू हो सकता है।

हालांकि, आप जो वर्णन कर रहे हैं वह एक बहुत ही कमांड विक्रेता-शाखा शैली वर्कफ़्लो है, जो मर्कुरियल diff और पैच के अलावा अन्य सुविधाओं का उपयोग करके बेहतर समर्थन कर सकता है।

Specfically, Mercurial Queues वही करता है जो आप चाहते हैं।

+0

यह जो मैं चाहता (मैं स्वीकार करने के लिए मैं कभी नहीं अब तक MQ जानने के लिए प्रयत्न करना पड़ा होगा) के करीब लग रहा है। हालांकि, अब मैंने अपने पैच को एमक में जोड़ा है और बदलाव किए हैं जो मैं प्रतिबद्ध करना चाहता हूं, 'एचजी सीआई' शिकायत करता है कि मैं "एक लागू एमक पैच पर प्रतिबद्ध नहीं हो सकता"। मैं रेपो में स्थानीय परिवर्तन होने के कारण, पैच करने से पहले पैच को 'qpop' नहीं कर सकता। ऐसा लगता है कि जब तक मैं कुछ याद नहीं कर रहा हूं, तब तक एमक्यू को समस्या को हल करने से निर्णायक रूप से रोकता है। – eternicode

+0

@ पीटरनिकोड: आप एक पैच 'hg प्रतिबद्ध' नहीं कर सकते हैं, लेकिन आप इसे qfinish' hg कर सकते हैं। – robert

+0

@robert फिर से मेरा प्रश्न पढ़ें। मैं * पैच को कभी भी प्रतिबद्ध नहीं करना चाहता हूं। मैं * पैच कतार में होने के बाद किए गए परिवर्तनों को करना चाहता हूं, लेकिन उस पैच द्वारा किए गए परिवर्तनों के बिना। ऐसा लगता है कि एमक्यू इस कारण से सही उपकरण नहीं है। – eternicode

1

मैंने पाया - आपके पास उप-रिपोज़ होने पर रिवर्स दृष्टिकोण काम नहीं करता था। यानी

hg diff --reverse -S 

। मामले में यह किसी को भी मदद करता है, यह मुश्किल से परीक्षण किया स्क्रिप्ट काम करने के लिए लगता है:

#!/bin/bash 

DIRS="$*" 

if [[ $DIRS = "" ]]; then 
    DIRS=$(echo *) 
fi 

for arg in $DIRS; do 
    arg=$(echo $arg | sed 's/^\.\/*//g') 
    repo=$(echo $arg | cut -d'/' -f-1) 

    grep -q "^$repo = " .hgsub 2>/dev/null 
    if [ $? -eq 0 ]; then 
     if [ -d $repo ]; then 
      cd $repo 
      hg diff --reverse | sed -e "s;--- a;--- a/$repo;g" -e "s;+++ b;--- b/$repo;g" 
      cd .. 
     else 
      echo Error, unknown repo $repo 
     fi 
    else 
     hg diff $arg --reverse 
    fi 
done 
संबंधित मुद्दे