एक ही डेबियन पैकेज के विभिन्न संस्करणों में अंतर करना


11

क्या स्रोत प्राप्त करने का कोई तरीका स्थानीय स्तर पर स्थापित पैकेज और उसके अद्यतन के बीच भिन्न है? यह ठीक से जाँचने के लिए उपयोगी होगा कि कौन से हिस्से तय किए गए हैं, बदले गए हैं या जोड़े गए हैं।

उदाहरण के लिए, मान लें कि आपके सिस्टम पर linux-libc-dev पैकेज स्थापित है और

sudo apt-get update && sudo apt-get upgrade

दिखाता है

The following packages will be upgraded:
  linux-libc-dev 

लेकिन आप इसे अपग्रेड करने से पहले जांचना चाहते हैं, वही पैकेज के स्थानीय संस्करण की तुलना में जो सटीक बदलाव किए गए हैं।

हम यह कैसे कर सकते हैं?

जवाबों:


5

यहाँ एक और समाधान है जिसे मैंने एक साथ हैक किया था: व्हाट्सएप किया

यह बाइनरी पैकेज का नाम लेता है जिसे आप एकमात्र तर्क के रूप में रुचि रखते हैं। एक उदाहरण के रूप में हाल ही में एसआरयू का उपयोग करने के लिए:

./whatchanged python_papyon

यह वही है जो यह करता है:

  1. जाँच करें कि क्या कोई अपडेट उम्मीदवार है या नहीं; अगर कोई नहीं है तो बाहर निकलें
  2. यदि कोई उम्मीदवार मौजूद है, तो अस्थायी निर्देशिका बनाएं और स्थापित संस्करण और उनमें उम्मीदवार दोनों के लिए स्रोत पैकेज लाएं
  3. स्टडआउट के साथ दो debdiffऔर आउटपुट की तुलना करें (आप आसानी से पढ़ने के लिए पुनर्निर्देशित करना चाहेंगे)
  4. अस्थायी निर्देशिका को साफ करें।

स्रोत पुनर्प्राप्ति के दौरान गलत होने वाली कुछ चीजों को बेहतर तरीके से संभालना संभव है, प्रवाह नियंत्रण शायद थोड़ा बंद है, और संस्करण की जाँच के लिए और अधिक सुरुचिपूर्ण तरीके होने चाहिए, लेकिन इसने मेरे सीमित परीक्षण में अब तक ठीक काम किया है। अभी के लिए, इसे एक त्वरित हैक मानें जो काम करता है, और सुधारों का सबसे अधिक स्वागत है। अगर यह कुछ लोगों के लिए उपयोगी है, तो मैं इसे एक bzr रिपॉजिटरी और / या एक Launchpad प्रोजेक्ट बनाऊंगा।

संपादित करें : इसे पास्टबिन पर सड़ने के बजाय, मैंने इसके लिए एक लॉन्चपैड प्रोजेक्ट शुरू किया है; आप के साथ नवीनतम ट्रंक संशोधन प्राप्त कर सकते हैं bzr branch lp:whatchanged। बग्स को रिपोर्ट करने के लिए स्वतंत्र महसूस करें , इसे शाखा दें, इसे पर्ल में फिर से लिखें, आदि।


कितना अच्छा है! जवाब के रूप में उपकरण का विकास, आप शैली कोडिंग की तरह), लेकिन ठीक से पर्ल में यह कोडित है | ..
LassePoulsen

धन्यवाद; आशा है कि यह उपयोग की है। जिस तरह से पैकेजिंग और रिलीज़ टेक्नीकलिटी कभी-कभी ओपन कोड बना देती है लगता है कि कुछ ऐसा है जो मेरे दिमाग में है, और मुझे इससे उबरने के लिए कोई सरल उपकरण नहीं मिला है, इसलिए किसी को सटीक एक ही चीज़ की आवश्यकता व्यक्त करना आखिरकार एक अच्छी प्रेरणा थी। एक आदिम खुद बनो।
mgunes

7

अफाक को ऐसा करने का एकमात्र तरीका स्रोत प्राप्त करना और अपने स्वयं के तरीके को बनाना है। आप apt-get के साथ संकुल को संकलित करने के लिए उपयोग किया जाने वाला वास्तविक स्रोत प्राप्त कर सकते हैं। fx:

apt-get source gwibber=2.30.2-0ubuntu3 gwibber=2.30.0.1-0ubuntu1
diff -rupN gwibber-2.30.0.1/ gwibber-2.30.2/

यह एक मानक पैच प्रारूप में सभी फाइलों के बीच सभी अंतरों को प्रिंट करेगा।


1
यह बहुत अच्छा है। उदाहरण में केवल एक चीज जो मैं बदलूंगा, वह है "debdiff gwibber_2.30.0.1-0ubuntu1.dsc gwibber_2.30.2-0ubuntu3.dsc" का उपयोग कच्चे अंतर के बजाय।
RAOF

1
वैसे यह व्यावहारिक रूप से एक ही काम करता है, लेकिन आप हर पैकेज / टैरबॉल पर अलग-अलग उपयोग कर सकते हैं। शायद कोई svn-trunk और वर्तमान pkg के बीच के अंतर को देखना चाहता है।
लासपुलसेन

मेरा दूसरा उत्तर (whatchanged) अनिवार्य रूप से इसे स्वचालित करता है।
mgunes

2

यहाँ एक (शायद इष्टतम नहीं है) इसे करने का UDD तरीका:

आपकी रिलीज़ के लिए पुल-शाखाएं (ल्यूसिड को मानते हुए) कि (अनुमान इस प्रकार है) में नवीनतम एसआरयू शामिल होना चाहिए:

bzr branch lp:ubuntu/lucid-updates/package_name

नवीनतम संशोधन द्वारा शुरू किए गए परिवर्तन प्राप्त करें, जो (अनुमान इस प्रकार है) नवीनतम SRU के अनुरूप होना चाहिए:

bzr diff -c`bzr revno`

2
हम्म। यह एक दिलचस्प कदम है, हालांकि यह शायद स्रोत लैब की तुलना में कम व्यापक है, इस मायने में कि पैकेज के नाम बजर स्रोत के पेड़ से मेल नहीं खाते, या मौजूद हैं।
गोडेल

जब तक आप स्रोत पैकेज का नाम जानते हैं, यह मेल खाएगा। आप पा सकते हैं कि किस स्रोत पैकेज के साथ एक बाइनरी पैकेज का उत्पादन किया जाता है apt-cache show package_name | grep Source:
mgunes

@ मूरत ठीक है, <package_name>इसलिए प्राप्त कुछ पैकेजों पर काम नहीं करता है: bzr branch lp:ubuntu/lucid-updates/$(apt-cache show linux-libc-dev | grep -m 1 Source: | awk "{print \$2}")=> bzr: ERROR: अमान्य url परिवहन के लिए दिया गया: "bzr + ssh: //bazaar.launchpad.net/+branch/ubuntu-lucid-updates/linux" : कोई समर्थित योजना नहीं
गोडेल

ऐसा इसलिए है क्योंकि कर्नेल के लिए कोई उबंटू शाखाएं नहीं हैं, मुझे डर है। यह इस तथ्य के कारण एक विशिष्ट अपवाद हो सकता है कि कर्नेल को git (kernel.ubuntu.com) में बनाए रखा गया है, लेकिन मैं इस समय bzr पैकेज शाखाओं के सटीक दायरे के बारे में निश्चित नहीं हूं। आप # ubuntu-devel पर पूछना चाह सकते हैं।
mgunes

@ मुरली जानता हूँ। इसलिए स्रोत लैब की तुलना में यह विधि कम व्यापक है। लेकिन फिर, यह एक दिलचस्प लेना है।
गोडेल

0

यदि आप पैकेज अभिलेखागार में फ़ाइल अंतर देखना चाहते हैं, तो उनकी md5sums फ़ाइलों को निकालें, सॉर्ट करें और उन्हें अलग करें, और फिर आप नाटकीय रूप से तुलना करने के लिए वास्तविक फ़ाइलों की सूची को संकीर्ण कर सकते हैं।


-1

हो सकता है कि "सटीक" परिवर्तन न हों, लेकिन apt-listchangesस्थापित संस्करण के बाद से किए गए परिवर्तनों के लिए चैंज एंट्री को सूचीबद्ध करता है।

नए पैकेजों को डाउनलोड करने के बाद यह एक चरण जोड़कर काम करता है, लेकिन इंस्टॉलेशन शुरू होने से पहले, जहां यह आपको प्रत्येक पैकेज के लिए चैंज एंट्री के बारे में बताता है कि इसे अपग्रेड किया जाना है। फिर आप जारी रख सकते हैं या रद्द कर सकते हैं। आप इसे स्थापित कर सकते हैं

sudo apt-get install apt-listchanges

फिर इसके साथ सेट करें

sudo dpkg-reconfigure apt-listchanges

फिर, सवाल चेंजलॉग परिवर्तन दिखाने के बारे में नहीं है।
1922

डी'ओह, पहली पंक्ति से चूक गए जहाँ आपने कहा "स्रोत भिन्न है।"
केन साइमन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.