2014-06-13 12 views
21

समस्याका स्वचालन संस्करण वृद्धि पैकेज

मैं एक आर पैकेज विकासशील रहा हूँ और मैं हर बार जब मैं इसे बनाने संस्करण बढ़ाना चाहते हैं। मैं चाहता हूं कि मेरे परिणामों को पैकेज संस्करणों में जोड़ सकें। अभी के लिए मैं ऐसा करने के लिए अपने बदसूरत फ़ंक्शन का उपयोग कर रहा था।

मेरा प्रश्न है: क्या यह बेहतर करने का कोई तरीका है? या, क्या मुझे सामान्य रूप से ऐसा करने से बचना चाहिए?

एक अन्य विकल्प

एक अन्य विकल्प मैं के बारे में सोच रहा था मेरी पैकेज (GitHub में आयोजित) स्थापित'devtools :: install_github' का उपयोग कर और फिर मेरी परिणामों के साथ बचाने के (या भूखंडों को जोड़ने) करने के लिए है कि GithubSHA1 स्थापित DESCRIPTION फ़ाइल में सहेजा गया है।

उदाहरण के लिए मैं'devtools' पैकेज के लिए संस्करण और GithubSHA1 ऐसे ही प्राप्त कर सकते हैं:

read.dcf(file=system.file("DESCRIPTION", package="devtools"), 
     fields=c("Version", "GithubSHA1")) 
##  Version GithubSHA1         
## [1,] "1.5.0.99" "3ae58a2a2232240e67b898f875b8da5e57d1b3a8" 

मेरे कोशिश करता अब तक

मैं निम्नलिखित समारोह लिखा एक नया वर्णन फ़ाइल बनाने के लिए , अद्यतन संस्करण और तारीख के साथ।

incVer <- function(pkg, folder=".", increase="patch"){ 
    ## Read DESCRIPTION from installed package ´pkg´ and make new one on the specified 
    ## ´folder´. Two options for ´increase´ are "patch" and "minor" 
    f <- read.dcf(file=system.file("DESCRIPTION", package=pkg), 
        fields=c("Package", "Type", "Title", "Version", "Date", 
          "Author", "Maintainer", "Description", "License", 
          "Depends", "Imports", "Suggests")) 
    curVer <- package_version(f[4]) 
    if(increase == "patch") { 
     curVer[[1,3]] <- ifelse(is.na(curVer$patchlevel), 1, curVer$patchlevel + 1) 

    } else if (increase == "minor") { 
     curVer[[1,2]] <- ifelse(is.na(curVer$minor), 1, curVer$minor + 1) 
     curVer[[1,3]] <- 0 
    } else { 
     stop(paste("Can not identify the increase argument: " , increase)) 
    } 

    f[4] <- toString(curVer) 
    ## Update also the date 
    f[5] <- format (Sys.time(), "%Y-%m-%d") 
    write.dcf(f, file=paste(folder, "DESCRIPTION", sep="/")) 
} 
+1

मुझे यहां बहुत अधिक कुरूपता नहीं मिलती है, इसी तरह के दृष्टिकोण का उपयोग Roxygen2 पैकेज द्वारा किया जाता है। – gagolews

+1

लेकिन roxygen2 को कोलेट फ़ील्ड को छोड़कर, विवरण फ़ाइल से निपट नहीं है, है ना? – alko989

+1

मैंने देखा कि roxygen2 कभी-कभी मेरी DESCRIPTION फ़ाइलों को महत्वपूर्ण रूप से सुधारता है, उदा। यह लाइनों को तोड़ता है आदि – gagolews

उत्तर

15

(मुख्य संस्करण बढ़ाने से कुछ मैं हाथ प्रति बढ़ती कोई आपत्ति नहीं है है) आप Git उपयोग कर रहे हैं, तो आप एक संस्करण स्ट्रिंग बनाने के लिए Git टैग का उपयोग कर सकते हैं।

git describe HEAD --tags | rev | sed 's/g-/./' | sed 's/-/+/' | rev 

यह आप इस तरह एक प्रारूप देता है::

0.8.0-pre+131.ca78343 

0.8.0-pre वर्तमान शाखा पर पिछले टैग है इस तरह हम अपने igraph पुस्तकालय के संस्करण स्ट्रिंग उत्पन्न है। (अंतिम रिलीज़ संस्करण 0.7.1 था, और हम रिलीज टैग के तुरंत बाद -pre टैग बनाते हैं।) 131 अंतिम टैग के बाद से काम करने की संख्या है। ca78343 अंतिम प्रतिबद्धता के हेक्स आईडी का पहला सात चरित्र है।

यह बहुत अच्छा होगा, सिवाय इसके कि आपके पास आर पैकेज में इस तरह के संस्करण तार नहीं हो सकते हैं, आर इसकी अनुमति नहीं देता है। तो आर के लिए हम निम्न स्क्रिप्ट का उपयोग कर इस संस्करण स्ट्रिंग को बदलने: https://github.com/igraph/igraph/blob/develop/interfaces/R/tools/convertversion.sh

मूलतः यह एक संस्करण संख्या पिछले संस्करण जारी की तुलना में बड़ा है और अगले संस्करणों (-pre टैग में से एक) से छोटी है कि पैदा करता है। 0.8.0-pre+131.ca78343 से यह

0.7.999-131 

जहां 131 पिछले रिलीज के बाद से प्रतिबद्ध की संख्या है बनाता है।

मैंने मेकफ़ाइल में DESCRIPTION फ़ाइल की पीढ़ी डाली।इस तिथि को बदल देता है, और संस्करण संख्या:

VERSION=$(shell ./tools/convertversion.sh) 

igraph/DESCRIPTION: src/DESCRIPTION version_number 
     sed 's/^Version: .*$$/Version: '$(VERSION)'/' $<  | \ 
     sed 's/^Date: .*$$/Date: '`date "+%Y-%m-%d"`'/' > [email protected] 

यह काफी सुविधाजनक है, आप कुछ भी करने को, रिलीज टैग और -pre टैग जोड़ने के अलावा जरूरत नहीं है।

बीटीडब्ल्यू। यह ज्यादातर मेरे दोस्त और igraph सह-डेवलपर, Tamás Nepusz द्वारा काम किया गया था, तो क्रेडिट उसका है।

+1

यो, जटिल (लेकिन काफी उपयोगी लग रहा है) –

+0

वास्तव में जटिल नहीं है, यही बात है। एक बार आपके पास स्क्रिप्ट हो जाने के बाद, आपको केवल दो गिट टैग जोड़ना होगा, उनमें से एक आप वैसे भी जोड़ देंगे। यह वास्तव में एक दयालुता है, कि आर बेहतर संस्करण तारों का समर्थन नहीं करता है, हालांकि। :( –

+0

बीटीडब्ल्यू। यह "रिलीज़" संस्करणों को अच्छी तरह से संभालता है, इसलिए यदि आप एक रिलीज चेकआउट करते हैं, तो उपरोक्त 'गिट' एक-लाइनर '+' और प्रतिबद्ध आईडी के बिना सटीक संस्करण संख्या देता है, या '-pre 'Btw.2। हमारे पैकेज में हम एक 'igraph.version()' फ़ंक्शन भी शामिल करते हैं जो सही संस्करण स्ट्रिंग, यानी' 0.8.0-pre + 131.ca78343' देता है। –

3

एक सरल दृष्टिकोण के लिए, -u स्विच के साथ crant उपकरण का उपयोग करने पर विचार करें। उदाहरण के लिए,

crant -u 3 

संस्करण के तीसरे घटक को एक से बढ़ाएगा। गिट और एसवीएन एकीकरण भी है, और roxygenizing, भवन, जांच आदि के लिए अन्य उपयोगी स्विच का एक गुच्छा ..

+0

इसके लिए धन्यवाद! मैं देखूंगा। (ऐसा लगता है कि प्रलेखन में आप 'क्रांट' के बजाय 'रांति' का उपयोग करते हैं, क्या मुझे कुछ याद आ रहा है या यह सिर्फ एक टाइपो है?) – alko989

+0

@ alko989: हाँ, यह एक टाइपो है। इसे ठीक करने की देखभाल? :-) – krlmlr

+0

मैंने तय किया और पुल अनुरोध किया। – alko989

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