मर्क्यूरियल कन्वर्ट फ़ाइल नाम एन्कोडिंग


12

मेरे पास Mercurial रिपॉजिटरी हैं जो mod_wsgi के साथ Apache पर चल रही हैं। रिपॉजिटरी में सभी फाइलनाम हैं जो विंडोज़ -1251 में एन्कोड किए गए हैं। इस एन्कोडिंग का उपयोग ऐतिहासिक कारणों से किया जाता है: उन्हें svn से मर्क्यूरियल में बदल दिया गया था, विंडोज़ -1251 रूसी लोकेल के लिए डिफ़ॉल्ट विंडोज़ एन्कोडिंग है।

अब प्रोग्रामर कोड समीक्षा के लिए क्रूसिबल टूल का उपयोग करना चाहते हैं । यह utf-8 की तुलना में किसी भी अन्य एन्कोडिंग में फ़ाइलनाम को रेखांकित नहीं कर सकता है। इसलिए मुझे उन्हें विंडोज़ -1251 से utf-8 में बदलने की आवश्यकता है। क्या किसी को भी यह करना आता है? मर्क्यूरियल कन्वर्ट एक्सटेंशन में एनकोडिंग को बदलने के विकल्प नहीं हैं।

hgweb.config:

[web]
#encoding = UTF-8
encoding = windows-1251
#allow_archive = gz, zip, bz2
allow_archive = zip
allow_push = *
push_ssl = false

[extensions]

[collections]
/data/mercurial = /data/mercurial

1
रूसी फ़ाइलनाम ?! फ़ाइल का नाम बदलने के बारे में मत सोचो?
आलसी बेजर

1
मैं सिस्टम प्रशासक हूं, डेवलपर नहीं, मेरा कर्तव्य स्थिर कार्य सेवा प्रदान करना है, न कि यह जानना कि यह कैसे उपयोग करना है।
सेलिवानोव पावेल

मैट मैकॉल ने बहुत समय पहले लिखा था, शायद पहले से ही पुराना हो # अगर आप अपने डिफ़ॉल्ट # लोकेल चारसेट के बजाय UTF-8 के साथ पृष्ठों की सेवा करना चाहते हैं, तो आप निम्न पंक्तियों को जोड़कर ऐसा कर सकते हैं। # ध्यान दें कि इससे आपकी .hgrc फ़ाइलों की # UTF-8 में व्याख्या की जा सकेगी और आपकी सभी रेपो फाइलें UTF-8 का उपयोग करके प्रदर्शित की जा सकेंगी। # # ऑस्पोर्ट # # ओस्टेनिशियन ["HGENCODING"] = "UTF-8"
आलसी बेजर

मैं इस सवाल का जवाब नीचे करने के लिए टिप्पणी में लिखा है: बदलने encoding = windows-1251के लिए encoding = UTF-8पढ़ने योग्य नहीं अभी किए फ़ाइल नाम। ऐसा इसलिए है क्योंकि वे विंडोज़ -1251 में संग्रहीत हैं। "UTF-8" os.environ ["HGENCODING"] = "UTF-8" इस सेटिंग के बराबर है।
सेलिवानोव पावेल

जवाबों:


6

आप सही हैं कि वर्तमान में परिवर्तित एक्सटेंशन इसका समर्थन नहीं करता है। यही है, आप इसे एन्कोडिंग X से एन्कोडिंग वाई में फिर से रखने के लिए नहीं कह सकते । हालाँकि, आप इसे फ़ाइलों को एक-एक करके नाम बदलने के लिए कह सकते हैं! सबसे पहले एक फाइल बनाइए rename.pyजिसका नाम है

import sys
for path in sys.stdin:
    old = path[:-1] # strip newline
    new = old.decode("cp1251").encode("utf-8")
    print 'rename "%s" "%s"' % (old, new)

फिर भागो

$ hg manifest --all | python rename.py > rename.txt

इससे आपका फाइल मैप बन जाता है। अब आप उपयोग कर सकते हैं

$ hg convert --filemap rename.txt cp1251-repo utf-8-repo

रिपॉजिटरी को एक नए रिपॉजिटरी में बदलने के लिए। नई रिपॉजिटरी में, ऐसा लगेगा कि यूटीएफ -8 फ़ाइल नामों का उपयोग करके फ़ाइलों को हमेशा सहेजा गया है।

नोट: फ़ाइल नाम अब भंडार में UTF-8 के रूप में संग्रहीत हैं। इसका मतलब है कि आधुनिक लिनक्स मशीनों पर चेकआउट ठीक लगेगा। हालाँकि, Windows, UTF-8 फ़ाइल नामों का उपयोग नहीं करता है। FixUtf-8 विस्तार UTF-16 के उड़ान भरने पर में मर्क्युरियल परिवर्तित UTF-8 फ़ाइल नाम बनाने के लिए इस्तेमाल किया जाना चाहिए। यह विंडोज़ पर पठनीय फ़ाइल नाम भी बनाएगा।

नोट: हर किसी को नए भंडार को फिर से क्लोन करना होगा! इतिहास के किसी भी हिस्से को बदलना अनिवार्य रूप से सभी परिवर्तनों को बदल देता है। तो इसे बंद करने के लिए, आपको या तो करने की आवश्यकता है

  1. हर किसी को सर्वर से धक्का दें,
  2. सर्वर पर रिपॉजिटरी कन्वर्ट करें,
  3. लोगों को फिर से क्लोन करना है

या

  1. हर कोई अपने स्थानीय रिपॉजिटरी पर उपरोक्त कमांड चलाता है
  2. सर्वर पर रिपॉजिटरी कन्वर्ट करें

किसी भी तरह से काम करता है क्योंकि रूपांतरण नियतात्मक है और इसलिए आपके उपयोगकर्ता इसे स्वयं चला सकते हैं यदि उनके पास पायथन उपलब्ध है। यदि उनके पास केवल एक TortoiseHg इंस्टॉलेशन है, तो यदि आप अपने सर्वर पर उनके लिए कनवर्ट करते हैं, तो यह संभवतः सबसे आसान है।

मैंने इसे सीधे रूप में परिवर्तित एक्सटेंशन समर्थन बनाने पर ध्यान दिया और इसके लिए अधिक प्रत्यक्ष समर्थन के लिए मर्क्यूरियल मेलिंगलिस्ट को एक पैच भेजा


मैंने मेलिंगलिस्ट पर एक पूर्ण पैच पोस्ट किया है ।
मार्टिन गिस्लर

क्रूसिबल इंजीलवादी ने हमारी कंपनी छोड़ दी है, इसलिए समस्या गायब हो गई। मेरी समस्या को ठीक करने के लिए कोड लिखने और मर्क्युलर के सुधार के लिए बहुत-बहुत धन्यवाद :) मैं यह कोशिश करूँगा जब मेरे पास कुछ खाली समय होगा।
सेलिवानोव पावेल

आह, समस्या हल हुई :-) जब आपने इसे आज़माया है, तो मेरे उत्तर को स्वीकार करने के लिए स्वतंत्र महसूस करें।
मार्टिन गिस्लर

कोई एचजी - सभी मर्क्यूरियल 1.8 में। मैंने userd hg --manifest -r tip दिया है। सब कुछ लिनक्स मशीन पर काम करता है: मैं रेपो में उचित फ़ाइल नाम = hgweb.config में UTF-8 के साथ देखता हूं और फ़ाइल नाम क्लोन रिपॉजिटरी में सही हैं। विंडोज मशीन पर मुझे क्लोन के बाद "РџРѕС machineѽнЂѵлл СЊРЏР ° Сї Р · Р ° РїРёСЃРєР ° .docx "फ़ाइल नाम मिला है।
सेलिवानोव पावेल

हां, यह अपेक्षित है - जब आप विंडोज पर क्लोन करते हैं तो फाइल नाम दोबारा नहीं आते हैं और इसलिए आपका चेकआउट कचरा बन जाता है। अभी के लिए FixUtf8 एक्सटेंशन का उपयोग करें।
मार्टिन गेस्लर

2

मुझे भी यही समस्या थी। मुझे रिपॉजिटरी का समूह बदलने की जरूरत थी, इसलिए मैंने एक स्क्रिप्ट लिखी जो सूची के रूप में दी गई सभी रिपॉजिटरी को रूपांतरित करती है।

उपयोग:

hg_convert_filenames_encoding.py [-h] [-i INPUT_ENCODING] [-o OUTPUT_ENCODING] [-b] [-u] [repositories [repositories ...]]

आप BitBucket पर मेरे भंडार से प्राप्त कर सकते हैं ।


0

मर्क्यूरियल विकी FYI से बस निकासी

अज्ञात एन्कोडिंग में निम्नलिखित को बाइनरी डेटा के रूप में स्पष्ट रूप से माना जाता है:

  • फ़ाइल सामग्री
  • फ़ाइल नाम

इन वस्तुओं को द्विआधारी डेटा के रूप में माना जाना चाहिए और जहां भी संभव हो, दोषरहित रूप से संरक्षित किया जाना चाहिए।

इस प्रकार, मुझे लगता है, सिर्फ encoding =मोटे तौर पर प्रस्तुति को बदलने में मोटे हो सकते हैं

यदि यह धारणा गलत है (यह हमेशा संभव है), तो FixUtf8 एक्सटेंशन का प्रयास करें , भाग पढ़ें रीडमी से मौजूदा फाइलनामों को ध्यान से फिक्स करना


सिर्फ बदली फिल्म्स encoding = windows-1251को encoding = UTF-8अपठनीय बनाना। FixUtf8 ने भी मदद नहीं की।
सेलिवानोव पावेल

ठीक। एन्कोडिंग = विंडोज़ -1251 को वापस करने की कोशिश करें AddDefaultCharset utf-8और अपाचे में प्रयास करें । एक अन्य विचार - WAMP के साथ LAMP को UTF8 में बदलें और फ़ाइल नाम के साथ कुछ भी न करें लेकिन encoding = UTF-8फिर से करें
Lazy Badger

यह है दीप। पुराने दिनों में रिपॉजिटरी को डब्ल्यूएएमपी पर तोड़फोड़ के साथ रखा गया था, बाद में मैंने इसे मर्क्यूरियल में बदल दिया और लिनक्स मशीन में यूटीएफ -8 लोकेल के साथ स्थानांतरित कर दिया। encoding = windows-1251सेट किया गया था क्योंकि डेटा पहले से ही इस एन्कोडिंग में था।
सेलिवानोव पावेल

फिर से पढ़ें विकी! 1251 केवल प्रेजेंटेशन लेयर है, स्टोरेज नहीं
Lazy Badger

एक अज्ञात एन्कोडिंग में स्पष्ट रूप से द्विआधारी डेटा के रूप में माना जाता है और यह एन्कोडिंग विंडोज़ -1251 है, फ़ाइलनाम इसमें संग्रहीत हैं। मुझे उन्हें यूटीएफ -8 में परिवर्तित करने के लिए किसी तरह की आवश्यकता है
सेलिवानोव पावेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.