Version Differences for Stamping

(Perforce: Read File From Depot Without Syncing and Parse Using Regex)
(AHPSCRIPTS-82)
Line 113:
  ==== AHPSCRIPTS-82 ====    ==== AHPSCRIPTS-82 ==== 
  <pre>${bsh:changes=ChangeSetHelper.getChangeSetArray(); if (changes != null && changes.length > 0) { return changes[0].getChangeId(); \} else { return "no revision"; \}}</pre>    <pre>${bsh:changes=ChangeSetHelper.getChangeSetArray(); if (changes != null && changes.length > 0) { return changes[0].getChangeId(); \} else { return "no revision"; \}}</pre> 
       
    + = Incrementing Stamp Script Allowing For Manual Input =  
    + *This script depends on a workflow property called "inputversion" where a user can specify a stamp at the time a build is being started. If inputversion is left blank, it uses the project property "my-stamp-property" as the stamp, and increments it. If "inputversion" is not null, and a value is passed, that value is used as the stamp, and becomes the new value of the "my-stamp-property" .  
       
    + ==== AHPSCRIPTS-32 ====  
    + <pre>import com.urbancode.anthill3.persistence.UnitOfWork;  
    + import com.urbancode.anthill3.runtime.scripting.helpers.*;  
       
    + final int PREFIX = 1;  
    + final int DIGIT = 2;  
    + final int POSTFIX = 3;  
    +  
    + UnitOfWork uow = UnitOfWork.getCurrent();  
    + String input = PropertyLookup.getValue("inputversion");  
    + String inc = PropertyLookup.getValue("my-stamp-property");  
       
    + static final private org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger("ReportScript");  
    +  
    + public String incrementVersion(String versionStr)  
    + throws Exception {  
    + // incrementing only the version number  
    + char c;  
    + StringBuffer prefix = new StringBuffer();  
    + StringBuffer digits = new StringBuffer();  
    + StringBuffer postfix = new StringBuffer();  
    + log.warn("im in the method");  
    + int state = POSTFIX;  
    + log.warn("im in the method2 "+versionStr.length());  
    + for (int i = versionStr.length() - 1; i >= 0; i--) {  
    + log.warn("im in the method3");  
    + c = versionStr.charAt(i);  
    + if (!Character.isDigit(c)) {  
    + log.warn("im in the method4");  
    + if (state == POSTFIX) {  
    + log.warn("im in the method5");  
    + postfix.insert(0, c);  
    + }  
    + else {  
    + if (state == DIGIT) {  
    + log.warn("im in the method6");  
    + state = PREFIX;  
    + }  
    + prefix.insert(0, c);  
    + log.warn("im in the method7");  
    + }  
    + }  
    + else {  
    + if (state == POSTFIX || state == DIGIT) {  
    + log.warn("im in the method8");  
    + state = DIGIT;  
    + digits.insert(0, c);  
    + }  
    + else {  
    + log.warn("im in the method9");  
    + prefix.insert(0, c);  
    + }  
    + }  
    + }  
    + log.warn("im in the method10");  
    + int version = 0;  
    + try {  
    + version = Integer.parseInt(digits.toString());  
    + log.warn("im in the method11");  
    + }  
    + catch (NumberFormatException nfe) {  
    + throw new Exception("Version String illegal. " +  
    + "Can't parse version number. " +  
    + "versionStr: " + versionStr);  
    + }  
    + version++;  
    + log.warn("im in the method12");  
    + return prefix.toString() + String.valueOf(version) + postfix.toString();  
    + log.warn("im in the method13");  
    + }//end method  
       
       
       
    + log.warn("inputversion :" + input);  
    + log.warn("####"+ProjectLookup.getCurrent().getProperty("my-stamp-property"));  
    + log.warn("mystampprop :" + inc);  
       
    + String stampValue = null;  
       
    + if(input == null || input.length() == 0){  
    + stampValue = incrementVersion(inc);  
    + }else{  
    + stampValue = input;  
    + }  
    + ProjectLookup.getCurrent().getProperty("my-stamp-property").setValue(stampValue);  
    + uow.commit();  
    + stampContext.put("stampValue", ""+stampValue );</pre>