cmd/htpacker: add --content-type flag
This allows overriding the content-type of files being packed using the ad-hoc method (not YAML spec).
This commit is contained in:
parent
565a269cef
commit
d827d8aace
3 changed files with 250 additions and 1 deletions
|
|
@ -16,6 +16,20 @@ import (
|
|||
var packCmd = &cobra.Command{
|
||||
Use: "pack",
|
||||
Short: "creates a packfile from a YAML spec or set of files/dirs",
|
||||
Long: `When given a YAML spec file (a template for which can be generated
|
||||
with the "yaml" command), files will be packed exactly as per the spec. The
|
||||
--content-type flag cannot be used and no extra files can be specified.
|
||||
|
||||
When given a list of files and directories to pack, the content type for each
|
||||
file will be automatically detected. It is possible to override the content
|
||||
type by specifying one or more --content-type flags. These take an argument in
|
||||
the form "pattern:content/type". The pattern is matched using common glob
|
||||
(* = wildcard), very similar to .gitignore. If the pattern contains any
|
||||
directory names, these must match the final components of the file to pack's
|
||||
path. If the pattern starts with a "/", then the full path must be matched
|
||||
exactly.
|
||||
`,
|
||||
|
||||
RunE: func(c *cobra.Command, args []string) error {
|
||||
// convert "out" to an absolute path, so that it will still
|
||||
// work after chdir
|
||||
|
|
@ -51,6 +65,16 @@ var packCmd = &cobra.Command{
|
|||
}
|
||||
}
|
||||
|
||||
// parse content-type globs
|
||||
ctGlobList, err := c.Flags().GetStringArray("content-type")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
ctGlobs, err := parseGlobs(ctGlobList)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// if "spec" is not present, then we expect a list of input
|
||||
// files, and we'll build a spec from them
|
||||
if spec == "" {
|
||||
|
|
@ -58,12 +82,16 @@ var packCmd = &cobra.Command{
|
|||
return errors.New("need --yaml, " +
|
||||
"or one or more filenames")
|
||||
}
|
||||
err = PackFiles(c, args, out)
|
||||
err = PackFiles2(c, args, ctGlobs, out)
|
||||
} else {
|
||||
if len(args) != 0 {
|
||||
return errors.New("cannot specify files " +
|
||||
"when using --yaml")
|
||||
}
|
||||
if ctGlobs != nil {
|
||||
return errors.New("cannot specify --content-type " +
|
||||
"when using --yaml")
|
||||
}
|
||||
err = PackSpec(c, spec, out)
|
||||
}
|
||||
if err != nil {
|
||||
|
|
@ -83,13 +111,20 @@ func init() {
|
|||
"YAML specification file (if not present, just pack files)")
|
||||
packCmd.Flags().StringP("chdir", "C", "",
|
||||
"Change to directory before searching for input files")
|
||||
packCmd.Flags().StringArrayP("content-type", "", nil,
|
||||
"Override content type for pattern, e.g. \"*.foo=bar/baz\" (like .gitignore)")
|
||||
}
|
||||
|
||||
func PackFiles(c *cobra.Command, args []string, out string) error {
|
||||
return PackFiles2(c, args, nil, out)
|
||||
}
|
||||
|
||||
func PackFiles2(c *cobra.Command, args []string, ctGlobs ctGlobList, out string) error {
|
||||
ftp, err := filesFromList(args)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
ctGlobs.ApplyContentTypes(ftp)
|
||||
|
||||
return doPack(ftp, out)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue