mirror of
				https://github.com/coredns/coredns.git
				synced 2025-11-03 02:33:21 -05:00 
			
		
		
		
	Remove the "gen" directory and move directives_generate.go out of it. Add a build ignore tag so it isn't build by default. Cleanup the go gen invocations so there are not seen as package docs. Simplify the code a bit and don't run go gen twice.
		
			
				
	
	
		
			65 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package dnsserver
 | 
						|
 | 
						|
import (
 | 
						|
	"fmt"
 | 
						|
	"os"
 | 
						|
	"strings"
 | 
						|
)
 | 
						|
 | 
						|
// RegisterDevDirective splices name into the list of directives
 | 
						|
// immediately before another directive. This function is ONLY
 | 
						|
// for plugin development purposes! NEVER use it for a plugin
 | 
						|
// that you are not currently building. If before is empty,
 | 
						|
// the directive will be appended to the end of the list.
 | 
						|
//
 | 
						|
// It is imperative that directives execute in the proper
 | 
						|
// order, and hard-coding the list of directives guarantees
 | 
						|
// a correct, absolute order every time. This function is
 | 
						|
// convenient when developing a plugin, but it does not
 | 
						|
// guarantee absolute ordering. Multiple plugins registering
 | 
						|
// directives with this function will lead to non-
 | 
						|
// deterministic builds and buggy software.
 | 
						|
//
 | 
						|
// Directive names must be lower-cased and unique. Any errors
 | 
						|
// here are fatal, and even successful calls print a message
 | 
						|
// to stdout as a reminder to use it only in development.
 | 
						|
func RegisterDevDirective(name, before string) {
 | 
						|
	if name == "" {
 | 
						|
		fmt.Println("[FATAL] Cannot register empty directive name")
 | 
						|
		os.Exit(1)
 | 
						|
	}
 | 
						|
	if strings.ToLower(name) != name {
 | 
						|
		fmt.Printf("[FATAL] %s: directive name must be lowercase\n", name)
 | 
						|
		os.Exit(1)
 | 
						|
	}
 | 
						|
	for _, dir := range directives {
 | 
						|
		if dir == name {
 | 
						|
			fmt.Printf("[FATAL] %s: directive name already exists\n", name)
 | 
						|
			os.Exit(1)
 | 
						|
		}
 | 
						|
	}
 | 
						|
	if before == "" {
 | 
						|
		directives = append(directives, name)
 | 
						|
	} else {
 | 
						|
		var found bool
 | 
						|
		for i, dir := range directives {
 | 
						|
			if dir == before {
 | 
						|
				directives = append(directives[:i], append([]string{name}, directives[i:]...)...)
 | 
						|
				found = true
 | 
						|
				break
 | 
						|
			}
 | 
						|
		}
 | 
						|
		if !found {
 | 
						|
			fmt.Printf("[FATAL] %s: directive not found\n", before)
 | 
						|
			os.Exit(1)
 | 
						|
		}
 | 
						|
	}
 | 
						|
	msg := fmt.Sprintf("Registered directive '%s' ", name)
 | 
						|
	if before == "" {
 | 
						|
		msg += "at end of list"
 | 
						|
	} else {
 | 
						|
		msg += fmt.Sprintf("before '%s'", before)
 | 
						|
	}
 | 
						|
	fmt.Printf("[INFO] %s\n", msg)
 | 
						|
}
 |