diff options
author | Jeff Gaston <jeffrygaston@google.com> | 2017-08-21 20:13:28 -0700 |
---|---|---|
committer | Jeff Gaston <jeffrygaston@google.com> | 2017-08-24 14:43:35 -0700 |
commit | 01547b23d26b6dcde8589add0451d87d7bf63f91 (patch) | |
tree | 4d48ff404f43c6ddb1187ef8273a2173e2a60681 /jar | |
parent | c5eb66d16b82279d33746d312e91793970e0310f (diff) | |
download | build_soong-01547b23d26b6dcde8589add0451d87d7bf63f91.tar.gz build_soong-01547b23d26b6dcde8589add0451d87d7bf63f91.tar.bz2 build_soong-01547b23d26b6dcde8589add0451d87d7bf63f91.zip |
Extract jar-sorting to be accessible to soong_zip
Bug: 64536066
Test: m -j # which runs unit tests
Change-Id: I4830bd331c9dab0b1d300a18aefaf25a6af4cfdc
Diffstat (limited to 'jar')
-rw-r--r-- | jar/Android.bp | 22 | ||||
-rw-r--r-- | jar/jar.go | 55 |
2 files changed, 77 insertions, 0 deletions
diff --git a/jar/Android.bp b/jar/Android.bp new file mode 100644 index 00000000..23ad5368 --- /dev/null +++ b/jar/Android.bp @@ -0,0 +1,22 @@ +// Copyright 2017 Google Inc. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +bootstrap_go_package { + name: "soong-jar", + pkgPath: "android/soong/jar", + srcs: [ + "jar.go", + ], +} + diff --git a/jar/jar.go b/jar/jar.go new file mode 100644 index 00000000..d8f063c9 --- /dev/null +++ b/jar/jar.go @@ -0,0 +1,55 @@ +// Copyright 2017 Google Inc. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package jar + +import ( + "fmt" + "strings" +) + +// EntryNamesLess tells whether <filepathA> should precede <filepathB> in +// the order of files with a .jar +func EntryNamesLess(filepathA string, filepathB string) (less bool) { + diff := index(filepathA) - index(filepathB) + if diff == 0 { + return filepathA < filepathB + } + return diff < 0 +} + +// Treats trailing * as a prefix match +func patternMatch(pattern, name string) bool { + if strings.HasSuffix(pattern, "*") { + return strings.HasPrefix(name, strings.TrimSuffix(pattern, "*")) + } else { + return name == pattern + } +} + +var jarOrder = []string{ + "META-INF/", + "META-INF/MANIFEST.MF", + "META-INF/*", + "*", +} + +func index(name string) int { + for i, pattern := range jarOrder { + if patternMatch(pattern, name) { + return i + } + } + panic(fmt.Errorf("file %q did not match any pattern", name)) +} |