Version 0.3: support projects through rudimentary "plugins"

- Allows to add a project by just adding custom
  definitions to projects/<project>.sh

- Except for cases that haven't been anticipated yet,
  modifying common code should no longer be needed

Signed-off-by: Michael Opdenacker <michael.opdenacker@free-electrons.com>
This commit is contained in:
Michael Opdenacker 2018-04-03 15:29:08 +02:00
parent 40f8e8073d
commit e732c6a295
8 changed files with 230 additions and 144 deletions

19
projects/barebox.sh Normal file
View file

@ -0,0 +1,19 @@
# Elixir definitions for Barebox
list_tags_h()
{
echo "$tags" |
grep '^v20' |
tac |
sed -r 's/^(v20..)(.*)$/new \1 \1\2/'
echo "$tags" |
grep '^v2\.0' |
tac |
sed -r 's/^(v2\.0)(.*)$/old \1 \1\2/'
echo "$tags" |
grep '^freescale' |
tac |
sed -r 's/^(freescale)(.*)$/old \1 \1\2/'
}

19
projects/busybox.sh Normal file
View file

@ -0,0 +1,19 @@
# Elixir definitions for BusyBox
version_dir()
{
tr '_.' '._';
}
version_rev()
{
tr '._' '_.';
}
list_tags_h()
{
echo "$tags" |
tac |
sed -r 's/^([0-9])\.([0-9]*)(.*)$/v\1 \1.\2 \1.\2\3/'
}

8
projects/linux.sh Normal file
View file

@ -0,0 +1,8 @@
# Elixir definitions for Linux
list_tags_h()
{
echo "$tags" |
tac |
sed -r 's/^(((v2.6)\.([0-9]*)(.*))|(v[0-9])\.([0-9]*)(.*))$/\3\6 \3\6.\4\7 \3\6.\4\7\5\8/'
}

9
projects/musl.sh Normal file
View file

@ -0,0 +1,9 @@
# Elixir definitions for Musl
list_tags_h()
{
echo "$tags" |
tac |
sed -r 's/^(v[0-9])\.([0-9]*)(.*)$/\1 \1.\2 \1.\2\3/'
}

19
projects/u-boot.sh Normal file
View file

@ -0,0 +1,19 @@
# Elixir definitions for U-Boot
list_tags_h()
{
echo "$tags" |
grep '^v20' |
tac |
sed -r 's/^(v20..)(.*)$/new \1 \1\2/'
echo "$tags" |
grep -E '^(v1|U)' |
tac |
sed -r 's/^/old by-version /'
echo "$tags" |
grep -E '^(LABEL|DENX)' |
tac |
sed -r 's/^/old by-date /'
}

20
projects/zephyr.sh Normal file
View file

@ -0,0 +1,20 @@
# Elixir definitions for Zephyr
list_tags()
{
echo "$tags" |
grep -v '^zephyr-v'
}
list_tags_h()
{
echo "$tags" |
grep -v '^zephyr-v' |
tac |
sed -r 's/^(v[0-9])\.([0-9]*)(.*)$/\1 \1.\2 \1.\2\3/'
}
get_latest()
{
git tag | grep -v '^zephyr-v' | version_dir | grep -v '\-rc' | sort -V | tail -n 1
}

278
script.sh
View file

@ -23,11 +23,133 @@ if [ ! -d "$LXR_REPO_DIR" ]; then
exit 1 exit 1
fi fi
version_dir()
{
cat;
}
version_rev()
{
cat;
}
get_tags()
{
git tag |
version_dir |
sed 's/$/.0/' |
sort -V |
sed 's/\.0$//'
}
list_tags()
{
echo "$tags"
}
list_tags_h()
{
tac |
sed -r 's/^/XXX XXX /';
}
get_latest()
{
git tag | version_dir | grep -v '\-rc' | sort -V | tail -n 1
}
get_type()
{
v=`echo $opt1 | version_rev`
git cat-file -t "$v:`denormalize $opt2`" 2>/dev/null
}
get_blob()
{
git cat-file blob $opt1
}
get_file()
{
v=`echo $opt1 | version_rev`
git cat-file blob "$v:`denormalize $opt2`" 2>/dev/null
}
get_dir()
{
v=`echo $opt1 | version_rev`
git ls-tree -l "$v:`denormalize $opt2`" 2>/dev/null |
awk '{print $2" "$5" "$4}' |
grep -v ' \.' |
sort -t ' ' -k 1,1r -k 2,2
}
tokenize_file()
{
if [ "$opt1" = -b ]; then
ref=$opt2
else
v=`echo $opt1 | version_rev`
ref="$v:`denormalize $opt2`"
fi
git cat-file blob $ref 2>/dev/null |
tr '\n' '\1' |
perl -pe 's%((/\*.*?\*/|//.*?\001|"(\\.|.)*?"|# *include *<.*?>|\W)+)(\w+)?%\1\n\4\n%g' |
head -n -1
}
list_blobs()
{
v=`echo $opt2 | version_rev`
if [ "$opt1" = '-p' ]; then
format='\1 \2'
elif [ "$opt1" = '-f' ]; then
format='\1 \4'
else
format='\1'
v=`echo $opt1 | version_rev`
fi
git ls-tree -r "$v" |
sed -r "s/^\S* blob (\S*)\t(([^/]*\/)*(.*))$/$format/; /^\S* commit .*$/d"
}
untokenize()
{
tr -d '\n' |
sed 's/>/\*\//g' |
sed 's/</\/\*/g' |
tr '\1\2\3' '\n<>'
}
parse_defs()
{
tmp=`mktemp -d`
full_path=$tmp/$opt2
git cat-file blob "$opt1" > "$full_path"
ctags -x --c-kinds=+p-m "$full_path" |
grep -av "^operator " |
awk '{print $1" "$2" "$3}'
rm "$full_path"
rmdir $tmp
}
project=$(basename `dirname $LXR_REPO_DIR`)
plugin=projects/$project.sh
if [ -f "$plugin" ] ; then
. $plugin
fi
cd "$LXR_REPO_DIR" cd "$LXR_REPO_DIR"
test $# -gt 0 || set help test $# -gt 0 || set help
cmd=$1 cmd=$1
opt1=$2
opt2=$3
shift shift
denormalize() denormalize()
@ -35,181 +157,51 @@ denormalize()
echo $1 | cut -c 2- echo $1 | cut -c 2-
} }
project=$(basename `dirname $LXR_REPO_DIR`)
case $project in
busybox)
version_dir() { tr '_.' '._'; }
version_rev() { tr '._' '_.'; }
;;
*)
version_dir() { cat; }
version_rev() { cat; }
;;
esac
case $cmd in case $cmd in
list-tags) list-tags)
tags=$( tags=`get_tags`
git tag |
version_dir |
sed 's/$/.0/' |
sort -V |
sed 's/\.0$//'
)
if [ "$1" = '-h' ]; then
case $project in
linux)
echo "$tags" |
tac |
sed -r 's/^(((v2.6)\.([0-9]*)(.*))|(v[0-9])\.([0-9]*)(.*))$/\3\6 \3\6.\4\7 \3\6.\4\7\5\8/'
;;
u-boot)
echo "$tags" |
grep '^v20' |
tac |
sed -r 's/^(v20..)(.*)$/new \1 \1\2/'
echo "$tags" | if [ "$opt1" = '-h' ]; then
grep -E '^(v1|U)' | list_tags_h
tac |
sed -r 's/^/old by-version /'
echo "$tags" |
grep -E '^(LABEL|DENX)' |
tac |
sed -r 's/^/old by-date /'
;;
barebox)
echo "$tags" |
grep '^v20' |
tac |
sed -r 's/^(v20..)(.*)$/new \1 \1\2/'
echo "$tags" |
grep '^v2\.0' |
tac |
sed -r 's/^(v2\.0)(.*)$/old \1 \1\2/'
echo "$tags" |
grep '^freescale' |
tac |
sed -r 's/^(freescale)(.*)$/old \1 \1\2/'
;;
busybox)
echo "$tags" |
tac |
sed -r 's/^([0-9])\.([0-9]*)(.*)$/v\1 \1.\2 \1.\2\3/'
;;
zephyr)
echo "$tags" |
grep -v '^zephyr-v' |
tac |
sed -r 's/^(v[0-9])\.([0-9]*)(.*)$/\1 \1.\2 \1.\2\3/'
;;
musl)
echo "$tags" |
tac |
sed -r 's/^(v[0-9])\.([0-9]*)(.*)$/\1 \1.\2 \1.\2\3/'
;;
*)
echo "$tags" |
tac |
sed -r 's/^/XXX XXX /'
;;
esac
else else
case $project in list_tags
zephyr)
echo "$tags" |
grep -v '^zephyr-v'
;;
*)
echo "$tags"
;;
esac
fi fi
;; ;;
get-latest) get-latest)
case $project in get_latest
zephyr)
git tag | grep -v '^zephyr-v' | version_dir | grep -v '\-rc' | sort -V | tail -n 1
;;
*)
git tag | version_dir | grep -v '\-rc' | sort -V | tail -n 1
;;
esac
;; ;;
get-type) get-type)
v=`echo $1 | version_rev` get_type
git cat-file -t "$v:`denormalize $2`" 2>/dev/null
;; ;;
get-blob) get-blob)
git cat-file blob $1 get_blob
;; ;;
get-file) get-file)
v=`echo $1 | version_rev` get_file
git cat-file blob "$v:`denormalize $2`" 2>/dev/null
;; ;;
get-dir) get-dir)
v=`echo $1 | version_rev` get_dir
git ls-tree -l "$v:`denormalize $2`" 2>/dev/null |
awk '{print $2" "$5" "$4}' |
grep -v ' \.' |
sort -t ' ' -k 1,1r -k 2,2
;; ;;
list-blobs) list-blobs)
if [ "$1" = '-p' ]; then list_blobs
format='\1 \2'
shift
elif [ "$1" = '-f' ]; then
format='\1 \4'
shift
else
format='\1'
fi
v=`echo $1 | version_rev`
git ls-tree -r "$v" |
sed -r "s/^\S* blob (\S*)\t(([^/]*\/)*(.*))$/$format/; /^\S* commit .*$/d"
;; ;;
tokenize-file) tokenize-file)
if [ "$1" = -b ]; then tokenize_file
ref=$2
else
v=`echo $1 | version_rev`
ref="$v:`denormalize $2`"
fi
git cat-file blob $ref 2>/dev/null |
tr '\n' '\1' |
perl -pe 's%((/\*.*?\*/|//.*?\001|"(\\.|.)*?"|# *include *<.*?>|\W)+)(\w+)?%\1\n\4\n%g' |
head -n -1
;; ;;
untokenize) untokenize)
tr -d '\n' | untokenize
sed 's/>/\*\//g' |
sed 's/</\/\*/g' |
tr '\1\2\3' '\n<>'
;; ;;
parse-defs) parse-defs)
tmp=`mktemp -d` parse_defs
full_path=$tmp/$2
git cat-file blob "$1" > "$full_path"
ctags -x --c-kinds=+p-m "$full_path" |
grep -av "^operator " |
awk '{print $1" "$2" "$3}'
rm "$full_path"
rmdir $tmp
;; ;;
help) help)

View file

@ -57,7 +57,7 @@
<footer class="footer"> <footer class="footer">
<span class="version"><a href="{{version}}/source">{{project}}</a> <em class="icon-tag">{{tag}}</em></span> <span class="version"><a href="{{version}}/source">{{project}}</a> <em class="icon-tag">{{tag}}</em></span>
<a title="Go to top of the page" class="go-top icon-up screenreader" href="{{version}}/{{url}}#">Top</a> <a title="Go to top of the page" class="go-top icon-up screenreader" href="{{version}}/{{url}}#">Top</a>
<span class="poweredby">powered by <a target="_blank" href="https://github.com/free-electrons/elixir">Elixir 0.2</a></span> <span class="poweredby">powered by <a target="_blank" href="https://github.com/free-electrons/elixir">Elixir 0.3</a></span>
</footer> </footer>
</div> </div>
<script src="/script.js?v=3"></script> <script src="/script.js?v=3"></script>