98 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Copyright (c) Alex Ellis 2017. All rights reserved.
 | |
| // Licensed under the MIT license. See LICENSE file in the project root for full license information.
 | |
| 
 | |
| package main
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"os"
 | |
| 	"reflect"
 | |
| 	"strings"
 | |
| )
 | |
| 
 | |
| func translateLegacyOpts(args []string) ([]string, error) {
 | |
| 
 | |
| 	legacyOptMapping := map[string]string{
 | |
| 		"-handler":  "--handler",
 | |
| 		"-image":    "--image",
 | |
| 		"-name":     "--name",
 | |
| 		"-gateway":  "--gateway",
 | |
| 		"-fprocess": "--fprocess",
 | |
| 		"-lang":     "--lang",
 | |
| 		"-replace":  "--replace",
 | |
| 		"-no-cache": "--no-cache",
 | |
| 		"-yaml":     "--yaml",
 | |
| 		"-squash":   "--squash",
 | |
| 	}
 | |
| 
 | |
| 	validActions := map[string]string{
 | |
| 		"build":  "build",
 | |
| 		"delete": "remove",
 | |
| 		"deploy": "deploy",
 | |
| 		"push":   "push",
 | |
| 	}
 | |
| 
 | |
| 	action := ""
 | |
| 	translatedArgs := []string{args[0]}
 | |
| 	optsCache := args[1:]
 | |
| 
 | |
| 	// Replace action
 | |
| 	for idx, opt := range optsCache {
 | |
| 		if opt == "-version" {
 | |
| 			translatedArgs = append(translatedArgs, "version")
 | |
| 			optsCache = append(optsCache[:idx], optsCache[idx+1:]...)
 | |
| 			action = "version"
 | |
| 		}
 | |
| 		if opt == "-action" {
 | |
| 			if len(optsCache) == idx+1 {
 | |
| 				return []string{""}, fmt.Errorf("no action supplied after deprecated -action flag")
 | |
| 			}
 | |
| 			if translated, ok := validActions[optsCache[idx+1]]; ok {
 | |
| 				translatedArgs = append(translatedArgs, translated)
 | |
| 				optsCache = append(optsCache[:idx], optsCache[idx+2:]...)
 | |
| 				action = translated
 | |
| 			} else {
 | |
| 				return []string{""}, fmt.Errorf("unknown action supplied to deprecated -action flag: %s", optsCache[idx+1])
 | |
| 			}
 | |
| 		}
 | |
| 		if strings.HasPrefix(opt, "-action"+"=") {
 | |
| 			s := strings.SplitN(opt, "=", 2)
 | |
| 			if len(s[1]) == 0 {
 | |
| 				return []string{""}, fmt.Errorf("no action supplied after deprecated -action= flag")
 | |
| 			}
 | |
| 			if translated, ok := validActions[s[1]]; ok {
 | |
| 				translatedArgs = append(translatedArgs, translated)
 | |
| 				optsCache = append(optsCache[:idx], optsCache[idx+1:]...)
 | |
| 				action = translated
 | |
| 			} else {
 | |
| 				return []string{""}, fmt.Errorf("unknown action supplied to deprecated -action= flag: %s", s[1])
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 	for idx, arg := range optsCache {
 | |
| 		if action == "remove" {
 | |
| 			if arg == "-name" {
 | |
| 				optsCache = append(optsCache[:idx], optsCache[idx+1:]...)
 | |
| 				continue
 | |
| 			}
 | |
| 		}
 | |
| 		if translated, ok := legacyOptMapping[arg]; ok {
 | |
| 			optsCache[idx] = translated
 | |
| 		}
 | |
| 		for legacyOpt, translated := range legacyOptMapping {
 | |
| 			if strings.HasPrefix(arg, legacyOpt) {
 | |
| 				optsCache[idx] = strings.Replace(arg, legacyOpt, translated, 1)
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	translatedArgs = append(translatedArgs, optsCache...)
 | |
| 
 | |
| 	if !reflect.DeepEqual(args, translatedArgs) {
 | |
| 		fmt.Fprintln(os.Stderr, "Found deprecated go-style flags in command, translating to new format:")
 | |
| 		fmt.Fprintf(os.Stderr, "  %s\n", strings.Join(translatedArgs, " "))
 | |
| 	}
 | |
| 
 | |
| 	return translatedArgs, nil
 | |
| }
 | 
