diff --git a/tools/repo-tool b/tools/repo-tool
new file mode 100755
index 0000000000..e00ba4992c
--- /dev/null
+++ b/tools/repo-tool
@@ -0,0 +1,152 @@
+#!/bin/bash
+
+################################################################################
+# This file is part of LibreELEC - http://www.libreelec.tv
+# Copyright (C) 2009-2016 Lukas Rusak (lrusak@libreelec.tv)
+#
+# LibreELEC is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# LibreELEC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with LibreELEC. If not, see .
+################################################################################
+
+. config/options
+
+update_addons_xml() {
+ echo "[*] cleanup addons ..."
+ olddir=""
+ find target/addons/$ADDON_VERSION -iname 'changelog*.txt' | sort -rV | while read line ; do
+ dir=$(dirname $line)
+ if [ "$olddir" = "$dir" ] ; then
+ rm -f $line
+ fi
+ olddir=$dir
+ done
+
+ olddir=""
+ find target/addons/$ADDON_VERSION -iname '*.zip' | sort -rV | while read line ; do
+ dir=$(dirname $line)
+ if [ "$olddir" = "$dir" ] ; then
+ rm -f $line
+ fi
+ olddir=$dir
+ done
+
+ echo "[*] updating addons.xml* ..."
+ rm -rf .addons
+ pwd=`pwd`
+ find target/addons/$ADDON_VERSION -iname addons.xml | while read line ; do
+ localdir=`echo $line | sed s/addons.xml//g`
+ echo " [*] updating $line..."
+ echo '
+
+' > $line.tmp
+ for zip in $localdir/*/*.zip ; do
+ mkdir -p ".addons/$localdir"
+ unzip $zip "*/addon.xml" -d ".addons/$localdir" &>/dev/null
+ done
+ find .addons/$localdir -iname addon.xml | grep -v resources/ | while read xml ; do
+ cat $xml | grep -v "" >> $line.tmp
+ done
+ echo '
+' >> $line.tmp
+ mv $line.tmp $line
+ cd $localdir
+
+ md5sum addons.xml > addons.xml.md5
+ cd $pwd
+ done
+ rm -rf .addons
+}
+
+touch_addons_xml() {
+ for PROJECT in Generic RPi2 WeTek_Play; do
+ for archfile in projects/$PROJECT/linux/linux.*.conf ; do
+ ARCH=`echo $archfile | sed -n '$s/\.conf//;$s/.*\.//p'`
+ if [ ! -d target/addons/$ADDON_VERSION/$PROJECT/$ARCH ]; then
+ break
+ fi
+ if [ ! -f target/addons/$ADDON_VERSION/$PROJECT/$ARCH/addons.xml ]; then
+ touch target/addons/$ADDON_VERSION/$PROJECT/$ARCH/addons.xml
+ fi
+ done
+ done
+}
+
+upload() {
+ if [ -f .work/repoconfig ] ; then
+ . .work/repoconfig
+ fi
+ if [ -z "$RSYNC_REPO" ] ; then
+ echo "*** ERROR: \$RSYNC_REPO not set. see .work/repoconfig ***"
+ exit 0
+ fi
+ touch_addons_xml
+ update_addons_xml
+ rsync -av --progress --delete target/addons/$ADDON_VERSION $RSYNC_REPO
+}
+
+build() {
+ for PROJECT in $(ls -1 projects); do
+ for archfile in projects/$PROJECT/linux/linux.*.conf ; do
+ ARCH=`echo $archfile | sed -n '$s/\.conf//;$s/.*\.//p'`
+ for package in $(find $1* -iname package.mk) ; do
+ (
+ . $package
+ if [ "$PKG_IS_ADDON" = "yes" ] ; then
+ ADDON=$PKG_NAME
+ PROJECT=$PROJECT ARCH=$ARCH ./scripts/create_addon $ADDON
+ fi
+ )
+ done
+ done
+ done
+}
+
+update_revision() {
+ for package in $(find $1 -iname package.mk) ; do
+ (
+ . $package
+ if [ "$PKG_IS_ADDON" = "yes" ] ; then
+ sed -i -e "s|PKG_REV=.*|PKG_REV=\"$((PKG_REV+1))\"|" $package
+ fi
+ )
+ done
+}
+
+usage() {
+ echo " usage: $0 -u to upload"
+ echo " $0 -b [binary|official|unofficial] to build"
+ echo " $0 -ru [official|unofficial] to update PKG_REV"
+ echo " $0 -xml to update the addons.xml"
+}
+
+repo="packages/mediacenter/kodi-binary-addons/game.libretro."
+
+case $1 in
+ -b)
+ build $repo
+ ;;
+ -u)
+ upload
+ ;;
+ -ru)
+ update_revision $repo
+ ;;
+ -xml)
+ touch_addons_xml
+ update_addons_xml
+ ;;
+ *)
+ usage
+ ;;
+esac
+