github.com/konsorten/ktn-build-info@v1.0.11/ver/update_regex.go (about)

     1  package ver
     2  
     3  import (
     4  	"io/ioutil"
     5  	"regexp"
     6  
     7  	log "github.com/sirupsen/logrus"
     8  )
     9  
    10  func UpdateRegexFile(filename string, matchMap UpdateActions, usePosix bool, vi *VersionInformation) error {
    11  	// read the file
    12  	txt, err := ioutil.ReadFile(filename)
    13  
    14  	if err != nil {
    15  		log.Errorf("Failed to read %v file: %v", filename, err)
    16  		return err
    17  	}
    18  
    19  	// update the data
    20  	for k, v := range matchMap {
    21  		// compile the regular expression
    22  		var r *regexp.Regexp
    23  
    24  		if usePosix {
    25  			r, err = regexp.CompilePOSIX(k)
    26  		} else {
    27  			r, err = regexp.Compile(k)
    28  		}
    29  
    30  		// render value
    31  		log.Debugf("Applying regex: %v", v)
    32  
    33  		newValue, err := RenderTemplate(v, filename, vi)
    34  
    35  		if err != nil {
    36  			return err
    37  		}
    38  
    39  		// replace
    40  		txt = r.ReplaceAll(txt, []byte(newValue))
    41  	}
    42  
    43  	// write back the file
    44  	err = ioutil.WriteFile(filename, txt, 0644)
    45  
    46  	if err != nil {
    47  		return err
    48  	}
    49  
    50  	// done
    51  	log.Infof("Updated regex %v file", filename)
    52  
    53  	return nil
    54  }