Avatar Ilya Mateyko

go.astrophena.name/base Module

GitHub repository | Commit (fdc8d8b)

Base Go packages for my projects.

package txtar

import "go.astrophena.name/base/txtar"

Package txtar implements a trivial text-based file archive format.

The goals for the format are:

Non-goals include being a completely general archive format, storing binary data, storing file modes, storing special files like symbolic links, and so on.

Txtar format

A txtar archive is zero or more comment lines and then a sequence of file entries. Each file entry begins with a file marker line of the form "-- FILENAME --" and is followed by zero or more file content lines making up the file data. The comment or file content ends at the next file marker line. The file marker line must begin with the three-byte sequence "-- " and end with the three-byte sequence " --", but the enclosed file name can be surrounding by additional white space, all of which is stripped.

If the txtar file is missing a trailing newline on the final line, parsers should consider a final newline to be present anyway.

There are no possible syntax errors in a txtar archive.

Index

Functions

func Extract

func Extract(a *Archive, dir string) error

Extract extracts an archive to dir.

func Format

func Format(a *Archive) []byte

Format returns the serialized form of an Archive. It is assumed that the Archive data structure is well-formed: a.Comment and all a.File[i].Data contain no file marker lines, and all a.File[i].Name is non-empty.

Types

type Archive

type Archive struct {
	Comment []byte
	Files   []File
}

An Archive is a collection of files.

func FromDir

func FromDir(dir string) (*Archive, error)

FromDir constructs an archive from contents of dir.

func Parse

func Parse(data []byte) *Archive

Parse parses the serialized form of an Archive. The returned Archive holds slices of data.

func ParseFile

func ParseFile(file string) (*Archive, error)

ParseFile parses the named file as an archive.

type File

type File struct {
	Name string // name of file ("foo/bar.txt")
	Data []byte // text content of file
}

A File is a single file in an archive.