github.com/AlekSi/nut@v0.3.1-0.20130607203728-cce108d4135e/nut/unpack.go (about)

     1  package main
     2  
     3  import (
     4  	"log"
     5  	"os"
     6  )
     7  
     8  var (
     9  	cmdUnpack = &Command{
    10  		Run:       runUnpack,
    11  		UsageLine: "unpack [-nc] [-v] [filename]",
    12  		Short:     "unpack nut into current directory",
    13  	}
    14  
    15  	unpackNC bool
    16  	unpackV  bool
    17  )
    18  
    19  func init() {
    20  	cmdUnpack.Long = `
    21  Unpacks nut into current directory.
    22  
    23  Examples:
    24      nut unpack test_nut1-0.0.1.nut
    25  `
    26  
    27  	cmdUnpack.Flag.BoolVar(&unpackNC, "nc", false, "no check (not recommended)")
    28  	cmdUnpack.Flag.BoolVar(&unpackV, "v", false, vHelp)
    29  }
    30  
    31  func runUnpack(cmd *Command) {
    32  	if !unpackV {
    33  		unpackV = Config.V
    34  	}
    35  
    36  	if len(cmd.Flag.Args()) != 1 {
    37  		log.Fatalf("Expected exactly one filename, got %s", cmd.Flag.Args())
    38  	}
    39  	fileName := cmd.Flag.Args()[0]
    40  
    41  	// check nut
    42  	if !unpackNC {
    43  		_, nf := ReadNut(fileName)
    44  		errors := nf.Check()
    45  		if len(errors) != 0 {
    46  			log.Print("Found errors:")
    47  			for _, e := range errors {
    48  				log.Printf("    %s", e)
    49  			}
    50  			log.Fatal("Please contact nut author.")
    51  		}
    52  	}
    53  
    54  	// unpack nut
    55  	dir, err := os.Getwd()
    56  	FatalIfErr(err)
    57  	UnpackNut(fileName, dir, false, unpackV)
    58  	if unpackV {
    59  		log.Printf("%s unpacked.", fileName)
    60  	}
    61  }