1 | #!/usr/bin/env bash
|
---|
2 | #
|
---|
3 | # Different plaforms add things to diffenent places, even bash, so we use env.
|
---|
4 | #
|
---|
5 | # parse a maven project directory tree so it can be examined for source structure
|
---|
6 | # and be pasted into a wiki with a bit of elbowgrease.
|
---|
7 | #
|
---|
8 | # wiki-indented hierarchy goes into hier_out.
|
---|
9 | # descriptions and package names go into pdescr_out and pname_out.
|
---|
10 |
|
---|
11 | OUT_DIR=/tmp/
|
---|
12 |
|
---|
13 | usage() {
|
---|
14 | cat << EOF
|
---|
15 | usage: $0 -i [project] [-c] [options]
|
---|
16 |
|
---|
17 | options:
|
---|
18 | -l <level> : directory levels (defualt 3)
|
---|
19 | -o <file> : output hierarchy to <file> (default ${OUT_DIR}hier_out)
|
---|
20 | -n <file> : output project names to <file> (default ${OUT_DIR}pkname_out)
|
---|
21 | -d <file> : output project descriptions to <file> (default ${OUT_DIR}pkdescr_out)
|
---|
22 | -c : clear default files in ${OUT_DIR}
|
---|
23 | EOF
|
---|
24 | }
|
---|
25 |
|
---|
26 | # argument parsing
|
---|
27 | while getopts ":ci:l:o:n:d:" opt; do
|
---|
28 | case $opt in
|
---|
29 | c)
|
---|
30 | cd $OUT_DIR
|
---|
31 | rm hier_out pkname_out pkdescr_out
|
---|
32 | cd -
|
---|
33 | exit
|
---|
34 | ;;
|
---|
35 | i)
|
---|
36 | treedir=$(echo $OPTARG | sed 's:[/]$::')
|
---|
37 | ;;
|
---|
38 | l)
|
---|
39 | level=$OPTARG
|
---|
40 | ;;
|
---|
41 | o)
|
---|
42 | hier_out=$OPTARG
|
---|
43 | ;;
|
---|
44 | n)
|
---|
45 | pname_out=$OPTARG
|
---|
46 | ;;
|
---|
47 | d)
|
---|
48 | pdescr_out=$OPTARG
|
---|
49 | ;;
|
---|
50 | \?)
|
---|
51 | usage
|
---|
52 | exit
|
---|
53 | ;;
|
---|
54 | esac
|
---|
55 | done
|
---|
56 |
|
---|
57 | # sanity check
|
---|
58 | if [ -z $treedir ]; then
|
---|
59 | echo "must specify a project directory"
|
---|
60 | echo ""
|
---|
61 | usage
|
---|
62 | exit
|
---|
63 | fi
|
---|
64 |
|
---|
65 | # set defaults if unset
|
---|
66 | : ${level:=3}
|
---|
67 | : ${hier_out:=${OUT_DIR}hier_out}
|
---|
68 | : ${pname_out:=${OUT_DIR}pkname_out}
|
---|
69 | : ${pdescr_out:=${OUT_DIR}pkdescr_out}
|
---|
70 |
|
---|
71 | # collect up to $level of visible directory names
|
---|
72 | find $treedir -maxdepth $((${level} - 1)) -type d -not -path '*/\.*' | grep -v src | grep -v target | sort -d > /tmp/h_tmp
|
---|
73 | # collect all poms up to that level
|
---|
74 | find $treedir -maxdepth ${level} -name pom.xml > /tmp/p_tmp
|
---|
75 | # sort and reconstruct path in a greusomely hack way.
|
---|
76 | sed 's:pom.xml: pom.xml:g' </tmp/p_tmp > /tmp/p2_tmp
|
---|
77 | sort -k 1 /tmp/p2_tmp -o /tmp/p2_tmp
|
---|
78 | sed 's: pom.xml:pom.xml:g' </tmp/p2_tmp > /tmp/p_tmp
|
---|
79 |
|
---|
80 | # spit slash-separated dirpaths into arrays, then replace all
|
---|
81 | # but last with wiki notation list bullet
|
---|
82 | # Ex: /a/b/c -> [a b c] -> ** c
|
---|
83 | while read line; do
|
---|
84 | # split directory into array: ./a/b/c -> a b c
|
---|
85 | arr=($(echo $line | sed 's:[./]: :g'))
|
---|
86 | # replace all but last entry with asterisks
|
---|
87 | st=$(echo ${arr[@]} | sed 's:[a-zA-Z]*-*[a-zA-Z]* :*:g')
|
---|
88 | # tack another asterisk in front, plus a space : **c -> *** c
|
---|
89 | echo \*${st} | sed 's:[a-zA-Z]: &:' >> $hier_out
|
---|
90 | #siz=${#arr[@]}
|
---|
91 | #if [ $siz -le $level ]; then
|
---|
92 | # echo ${arr[@]} | sed 's:[a-z]* : :g' | grep -v "src" >> $out
|
---|
93 | #fi
|
---|
94 | done < /tmp/h_tmp
|
---|
95 |
|
---|
96 | # scrape package name and descriptions from pom.xml files, and bullet-point that
|
---|
97 | # the correct number of indentations in
|
---|
98 | # Ex: ./a/b/pom.xml: a-package-name -> ** a-package-name
|
---|
99 | # "some package that does junk" -> ** some package that does junk
|
---|
100 | while read line; do
|
---|
101 | #lines are /a/b/c/pom.xml
|
---|
102 | #fetch second match, if not, the first, and grab stuff between XML tags
|
---|
103 | if [ "$(grep -rn "parent" $line)" ]; then
|
---|
104 | pname=$(grep -hrnm 2 "artifactId" $line | tail -n 1 | sed 's:.*<artifactId>\(.*\)<\/artifactId>:\1:')
|
---|
105 | else
|
---|
106 | pname=$(grep -hrnm 1 "artifactId" $line | sed 's:.*<artifactId>\(.*\)<\/artifactId>:\1:')
|
---|
107 | fi
|
---|
108 | pdescr=$(grep -hrn "description" $line | tr '\n' ' ' | sed 's:.*<description>\(.*\)<\/description>.*:\1:')
|
---|
109 |
|
---|
110 | #make an array and make that number of stars
|
---|
111 | arr=($(echo $line | sed 's:\/: :g'))
|
---|
112 | str=$(echo ${arr[@]} | sed -e 's:[A-Za-z]*-*[A-Za-z]* :*:g' -e 's:\(\**\).*:\1:')
|
---|
113 | echo $line >> /tmp/pname_raw
|
---|
114 | echo "${str}" ${pname} >> $pname_out
|
---|
115 | echo "${str}" ${pdescr} >> $pdescr_out
|
---|
116 | done < /tmp/p_tmp
|
---|
117 |
|
---|
118 | # tack path info to end
|
---|
119 | echo "---debug--- " | tee -a $pname_out $pdescr_out
|
---|
120 | cat /tmp/pname_raw | tee -a $pname_out $pdescr_out
|
---|
121 |
|
---|
122 | rm /tmp/pname_raw /tmp/h_tmp /tmp/p_tmp /tmp/p2_tmp
|
---|