-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgenerate-tags.sh
executable file
·86 lines (66 loc) · 1.76 KB
/
generate-tags.sh
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
79
80
81
82
83
84
85
#!/usr/bin/env bash
project_name=""
clone_name=""
clone_root=""
cscope_out_tmp=/tmp/generate_tags.tmp
function exit_pgm() {
rm -rf ${cscope_out_tmp} 2> /dev/null
}
trap exit_pgm INT
function process_key_value_argument() {
key=$(echo $1 | cut -d '=' -f 1)
value=$(echo $1 | cut -d '=' -f 2)
if [[ $key = "project-name" ]]
then
project_name=$value
fi
}
function process_arguments() {
for arg in $@
do
if [[ $arg =~ ^[^=]+=[^=]+$ ]]
then
process_key_value_argument $arg
else
clone_name=$arg
fi
done
[[ -z $project_name ]] && echo "Argument project-name=? not provided" && exit 1
[[ -z $clone_name ]] && echo "Argument clone-name=? not provided" && exit 1
clone_root=${REPO_BASE}/${project_name}/${clone_name}
}
function check_clone() {
[[ ! -d ${clone_root} ]] \
&& echo "${clone_root} : No such clone present" \
&& exit 1
}
function generate_tags() {
tag_dir=${HOME}/project_tags/${project_name}/${clone_name}
tag_file=${tag_dir}/tags
cscope_file=${tag_dir}/cscope.out
mkdir -p ${tag_dir}
echo "$(hostname) : generating ctags for clone ${project_name}/${clone_name}"
ctags \
-R \
--sort=1 \
--c++-kinds=+p \
--fields=+iaS \
--extra=+q \
--exclude=boost* \
--exclude=gmock* \
--exclude=poco* \
--exclude=thrift-* \
-f ${tag_file} \
${clone_root}
echo "$(hostname) : generating cscope db for clone ${project_name}/${clone_name}"
#Collect the files
cat ${tag_file} | awk '{print $2}' | grep "^${REPO_BASE}" | uniq > ${cscope_out_tmp}
cscope -b -f ${cscope_file} -i ${cscope_out_tmp}
}
#################################
## MAIN
###
process_arguments $@
check_clone
generate_tags
exit_pgm