aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/jar-args.sh
blob: 340e9a3514031a81a0799bccac1c7f69acbec6be (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#!/bin/bash -e

# 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.

# Script that takes a list of files on stdin and converts it to arguments to jar on stdout
# Usage:
#        find $dir -type f | sort | jar-args.sh $dir > jar_args.txt
#        jar cf out.jar @jar_args.txt

case $(uname) in
  Linux)
    extended_re=-r
    ;;
  Darwin)
    extended_re=-E
    ;;
  *) echo "unknown OS:" $(uname) >&2 && exit 1;;
esac

if [ "$1" == "--test" ]; then
  in=$(mktemp)
  expected=$(mktemp)
  out=$(mktemp)
  cat > $in <<EOF
a
a/b
a/b/'
a/b/"
a/b/\\
a/b/#
a/b/a
EOF
  cat > $expected <<EOF

-C 'a' 'b'
-C 'a' 'b/\\''
-C 'a' 'b/"'
-C 'a' 'b/\\\\'
-C 'a' 'b/#'
-C 'a' 'b/a'
EOF
  cat $in | $0 a > $out

  if cmp $out $expected; then
    status=0
    echo "PASS"
  else
    status=1
    echo "FAIL"
    echo "got:"
    cat $out
    echo "expected:"
    cat $expected
  fi
  rm -f $in $expected $out
  exit $status
fi

# In order, the regexps:
#   - Strip $1/ from the beginning of each line, and everything from lines that just have $1
#   - Escape single and double quotes, '#', ' ', and '\'
#   - Prefix each non-blank line with -C $1
sed ${extended_re} \
  -e"s,^$1(/|\$),," \
  -e"s,(['\\]),\\\\\1,g" \
  -e"s,^(.+),-C '$1' '\1',"