...

Source file src/github.com/rogpeppe/go-internal/cmd/txtar-x/extract.go

Documentation: github.com/rogpeppe/go-internal/cmd/txtar-x

     1  // Copyright 2018 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  // The txtar-x command extracts a txtar archive to a filesystem.
     6  //
     7  // Usage:
     8  //
     9  //	txtar-x [-C root-dir] saved.txt
    10  //
    11  // See https://godoc.org/golang.org/x/tools/txtar for details of the format
    12  // and how to parse a txtar file.
    13  package main
    14  
    15  import (
    16  	"flag"
    17  	"fmt"
    18  	"io"
    19  	"log"
    20  	"os"
    21  
    22  	"github.com/rogpeppe/go-internal/txtar"
    23  )
    24  
    25  var (
    26  	extractDir = flag.String("C", ".", "directory to extract files into")
    27  )
    28  
    29  func usage() {
    30  	fmt.Fprintf(os.Stderr, "usage: txtar-x [flags] [file]\n")
    31  	flag.PrintDefaults()
    32  }
    33  
    34  func main() {
    35  	os.Exit(main1())
    36  }
    37  
    38  func main1() int {
    39  	flag.Usage = usage
    40  	flag.Parse()
    41  	if flag.NArg() > 1 {
    42  		usage()
    43  		return 2
    44  	}
    45  	log.SetPrefix("txtar-x: ")
    46  	log.SetFlags(0)
    47  
    48  	var a *txtar.Archive
    49  	if flag.NArg() == 0 {
    50  		data, err := io.ReadAll(os.Stdin)
    51  		if err != nil {
    52  			log.Printf("cannot read stdin: %v", err)
    53  			return 1
    54  		}
    55  		a = txtar.Parse(data)
    56  	} else {
    57  		a1, err := txtar.ParseFile(flag.Arg(0))
    58  		if err != nil {
    59  			log.Print(err)
    60  			return 1
    61  		}
    62  		a = a1
    63  	}
    64  	if err := txtar.Write(a, *extractDir); err != nil {
    65  		log.Print(err)
    66  		return 1
    67  	}
    68  	return 0
    69  }
    70  

View as plain text