Merge "soong_zip: add support for -j to junk paths"
This commit is contained in:
commit
c4fa0822cd
2 changed files with 59 additions and 23 deletions
|
@ -21,8 +21,8 @@ import (
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
|
||||||
"runtime"
|
"runtime"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"android/soong/zip"
|
"android/soong/zip"
|
||||||
|
@ -65,13 +65,14 @@ func (f *file) String() string {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *file) Set(s string) error {
|
func (f *file) Set(s string) error {
|
||||||
if *relativeRoot == "" {
|
if relativeRoot == "" && !junkPaths {
|
||||||
return fmt.Errorf("must pass -C before -f")
|
return fmt.Errorf("must pass -C or -j before -f")
|
||||||
}
|
}
|
||||||
|
|
||||||
fArgs = append(fArgs, zip.FileArg{
|
fArgs = append(fArgs, zip.FileArg{
|
||||||
PathPrefixInZip: filepath.Clean(*rootPrefix),
|
PathPrefixInZip: *rootPrefix,
|
||||||
SourcePrefixToStrip: filepath.Clean(*relativeRoot),
|
SourcePrefixToStrip: relativeRoot,
|
||||||
|
JunkPaths: junkPaths,
|
||||||
SourceFiles: []string{s},
|
SourceFiles: []string{s},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -83,8 +84,8 @@ func (l *listFiles) String() string {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *listFiles) Set(s string) error {
|
func (l *listFiles) Set(s string) error {
|
||||||
if *relativeRoot == "" {
|
if relativeRoot == "" && !junkPaths {
|
||||||
return fmt.Errorf("must pass -C before -l")
|
return fmt.Errorf("must pass -C or -j before -l")
|
||||||
}
|
}
|
||||||
|
|
||||||
list, err := ioutil.ReadFile(s)
|
list, err := ioutil.ReadFile(s)
|
||||||
|
@ -93,8 +94,9 @@ func (l *listFiles) Set(s string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
fArgs = append(fArgs, zip.FileArg{
|
fArgs = append(fArgs, zip.FileArg{
|
||||||
PathPrefixInZip: filepath.Clean(*rootPrefix),
|
PathPrefixInZip: *rootPrefix,
|
||||||
SourcePrefixToStrip: filepath.Clean(*relativeRoot),
|
SourcePrefixToStrip: relativeRoot,
|
||||||
|
JunkPaths: junkPaths,
|
||||||
SourceFiles: strings.Split(string(list), "\n"),
|
SourceFiles: strings.Split(string(list), "\n"),
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -106,21 +108,47 @@ func (d *dir) String() string {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *dir) Set(s string) error {
|
func (d *dir) Set(s string) error {
|
||||||
if *relativeRoot == "" {
|
if relativeRoot == "" && !junkPaths {
|
||||||
return fmt.Errorf("must pass -C before -D")
|
return fmt.Errorf("must pass -C or -j before -D")
|
||||||
}
|
}
|
||||||
|
|
||||||
fArgs = append(fArgs, zip.FileArg{
|
fArgs = append(fArgs, zip.FileArg{
|
||||||
PathPrefixInZip: filepath.Clean(*rootPrefix),
|
PathPrefixInZip: *rootPrefix,
|
||||||
SourcePrefixToStrip: filepath.Clean(*relativeRoot),
|
SourcePrefixToStrip: relativeRoot,
|
||||||
GlobDir: filepath.Clean(s),
|
JunkPaths: junkPaths,
|
||||||
|
GlobDir: s,
|
||||||
})
|
})
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type relativeRootImpl struct{}
|
||||||
|
|
||||||
|
func (*relativeRootImpl) String() string { return relativeRoot }
|
||||||
|
|
||||||
|
func (*relativeRootImpl) Set(s string) error {
|
||||||
|
relativeRoot = s
|
||||||
|
junkPaths = false
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type junkPathsImpl struct{}
|
||||||
|
|
||||||
|
func (*junkPathsImpl) IsBoolFlag() bool { return true }
|
||||||
|
|
||||||
|
func (*junkPathsImpl) String() string { return relativeRoot }
|
||||||
|
|
||||||
|
func (*junkPathsImpl) Set(s string) error {
|
||||||
|
var err error
|
||||||
|
junkPaths, err = strconv.ParseBool(s)
|
||||||
|
relativeRoot = ""
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
rootPrefix, relativeRoot *string
|
rootPrefix *string
|
||||||
|
relativeRoot string
|
||||||
|
junkPaths bool
|
||||||
|
|
||||||
fArgs zip.FileArgs
|
fArgs zip.FileArgs
|
||||||
nonDeflatedFiles = make(uniqueSet)
|
nonDeflatedFiles = make(uniqueSet)
|
||||||
|
@ -154,7 +182,6 @@ func main() {
|
||||||
manifest := flags.String("m", "", "input jar manifest file name")
|
manifest := flags.String("m", "", "input jar manifest file name")
|
||||||
directories := flags.Bool("d", false, "include directories in zip")
|
directories := flags.Bool("d", false, "include directories in zip")
|
||||||
rootPrefix = flags.String("P", "", "path prefix within the zip at which to place files")
|
rootPrefix = flags.String("P", "", "path prefix within the zip at which to place files")
|
||||||
relativeRoot = flags.String("C", "", "path to use as relative root of files in following -f, -l, or -D arguments")
|
|
||||||
compLevel := flags.Int("L", 5, "deflate compression level (0-9)")
|
compLevel := flags.Int("L", 5, "deflate compression level (0-9)")
|
||||||
emulateJar := flags.Bool("jar", false, "modify the resultant .zip to emulate the output of 'jar'")
|
emulateJar := flags.Bool("jar", false, "modify the resultant .zip to emulate the output of 'jar'")
|
||||||
writeIfChanged := flags.Bool("write_if_changed", false, "only update resultant .zip if it has changed")
|
writeIfChanged := flags.Bool("write_if_changed", false, "only update resultant .zip if it has changed")
|
||||||
|
@ -167,6 +194,8 @@ func main() {
|
||||||
flags.Var(&dir{}, "D", "directory to include in zip")
|
flags.Var(&dir{}, "D", "directory to include in zip")
|
||||||
flags.Var(&file{}, "f", "file to include in zip")
|
flags.Var(&file{}, "f", "file to include in zip")
|
||||||
flags.Var(&nonDeflatedFiles, "s", "file path to be stored within the zip without compression")
|
flags.Var(&nonDeflatedFiles, "s", "file path to be stored within the zip without compression")
|
||||||
|
flags.Var(&relativeRootImpl{}, "C", "path to use as relative root of files in following -f, -l, or -D arguments")
|
||||||
|
flags.Var(&junkPathsImpl{}, "j", "junk paths, zip files without directory names")
|
||||||
|
|
||||||
flags.Parse(expandedArgs[1:])
|
flags.Parse(expandedArgs[1:])
|
||||||
|
|
||||||
|
|
17
zip/zip.go
17
zip/zip.go
|
@ -87,6 +87,7 @@ func (u *uniqueSet) Set(s string) error {
|
||||||
type FileArg struct {
|
type FileArg struct {
|
||||||
PathPrefixInZip, SourcePrefixToStrip string
|
PathPrefixInZip, SourcePrefixToStrip string
|
||||||
SourceFiles []string
|
SourceFiles []string
|
||||||
|
JunkPaths bool
|
||||||
GlobDir string
|
GlobDir string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -228,8 +229,7 @@ func Run(args ZipArgs) (err error) {
|
||||||
srcs = append(srcs, recursiveGlobFiles(fa.GlobDir)...)
|
srcs = append(srcs, recursiveGlobFiles(fa.GlobDir)...)
|
||||||
}
|
}
|
||||||
for _, src := range srcs {
|
for _, src := range srcs {
|
||||||
err := fillPathPairs(fa.PathPrefixInZip, fa.SourcePrefixToStrip, src,
|
err := fillPathPairs(fa, src, &pathMappings, args.NonDeflatedFiles, noCompression)
|
||||||
&pathMappings, args.NonDeflatedFiles, noCompression)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
@ -270,7 +270,7 @@ func Run(args ZipArgs) (err error) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func fillPathPairs(prefix, rel, src string, pathMappings *[]pathMapping,
|
func fillPathPairs(fa FileArg, src string, pathMappings *[]pathMapping,
|
||||||
nonDeflatedFiles map[string]bool, noCompression bool) error {
|
nonDeflatedFiles map[string]bool, noCompression bool) error {
|
||||||
|
|
||||||
src = strings.TrimSpace(src)
|
src = strings.TrimSpace(src)
|
||||||
|
@ -278,11 +278,18 @@ func fillPathPairs(prefix, rel, src string, pathMappings *[]pathMapping,
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
src = filepath.Clean(src)
|
src = filepath.Clean(src)
|
||||||
dest, err := filepath.Rel(rel, src)
|
var dest string
|
||||||
|
|
||||||
|
if fa.JunkPaths {
|
||||||
|
dest = filepath.Base(src)
|
||||||
|
} else {
|
||||||
|
var err error
|
||||||
|
dest, err = filepath.Rel(fa.SourcePrefixToStrip, src)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
dest = filepath.Join(prefix, dest)
|
}
|
||||||
|
dest = filepath.Join(fa.PathPrefixInZip, dest)
|
||||||
|
|
||||||
zipMethod := zip.Deflate
|
zipMethod := zip.Deflate
|
||||||
if _, found := nonDeflatedFiles[dest]; found || noCompression {
|
if _, found := nonDeflatedFiles[dest]; found || noCompression {
|
||||||
|
|
Loading…
Reference in a new issue