X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;ds=sidebyside;f=gamepack-manager;h=980a9a3cfa4c1498a2d2c73599ac363b2bbe6a66;hb=a39368a2fa047233c7f6c572b057cdbc911162ce;hp=a7bf9913ca79ec054cf0894f8695a165aebcfb34;hpb=d8d8fd49d818e0b2b735574c9df326ed5bc5b5f1;p=xonotic%2Fnetradiant.git diff --git a/gamepack-manager b/gamepack-manager index a7bf9913..980a9a3c 100755 --- a/gamepack-manager +++ b/gamepack-manager @@ -3,8 +3,8 @@ # get usage help this way: # ./gamepack_manager -h -: "${CP:=cp -v}" -: "${CP_R:=cp -r --preserve=timestamps}" +: "${CP:=cp -va}" +: "${CP_R:=cp -Rva}" : "${GIT:=git}" : "${SVN:=svn}" : "${WGET:=wget}" @@ -43,45 +43,92 @@ cat <<\EOF # Quake2World was renamed as Quetoo # Other gamepacks have better version available -# OpenArena unknown zip http://ingar.intranifty.net/files/netradiant/gamepacks/OpenArenaPack.zip -# Quake proprietary zip http://ingar.intranifty.net/files/netradiant/gamepacks/QuakePack.zip -# Quake2World GPL svn svn://jdolan.dyndns.org/quake2world/trunk/gtkradiant -# Tremulous proprietary svn svn://svn.icculus.org/gtkradiant-gamepacks/TremulousPack/branches/1.5/ -# Unvanquished unknown zip http://ingar.intranifty.net/gtkradiant/files/gamepacks/UnvanquishedPack.zip -# Warsow GPL svn https://svn.bountysource.com/wswpack/trunk/netradiant/games/WarsowPack/ -# Warsow GPL zip http://ingar.intranifty.net/files/netradiant/gamepacks/WarsowPack.zip +# OpenArena no unknown zip http://ingar.intranifty.net/files/netradiant/gamepacks/OpenArenaPack.zip +# Quake no proprietary zip http://ingar.intranifty.net/files/netradiant/gamepacks/QuakePack.zip +# Quake2World no GPL svn svn://jdolan.dyndns.org/quake2world/trunk/gtkradiant +# Tremulous no proprietary svn svn://svn.icculus.org/gtkradiant-gamepacks/TremulousPack/branches/1.5/ +# Unvanquished no unknown zip http://ingar.intranifty.net/gtkradiant/files/gamepacks/UnvanquishedPack.zip +# Warsow no GPL svn https://svn.bountysource.com/wswpack/trunk/netradiant/games/WarsowPack/ +# Warsow no GPL zip http://ingar.intranifty.net/files/netradiant/gamepacks/WarsowPack.zip ####################################################### # Usable packs # ####################################################### -DarkPlaces GPL svn svn://svn.icculus.org/gtkradiant-gamepacks/DarkPlacesPack/branches/1.5/ -Doom3 proprietary svn svn://svn.icculus.org/gtkradiant-gamepacks/Doom3Pack/branches/1.5/ -ET proprietary svn svn://svn.icculus.org/gtkradiant-gamepacks/ETPack/branches/1.5/ -Heretic2 proprietary svn svn://svn.icculus.org/gtkradiant-gamepacks/Her2Pack/branches/1.5/ -JediAcademy proprietary svn svn://svn.icculus.org/gtkradiant-gamepacks/JAPack/branches/1.5/ -Neverball proprietary zip http://ingar.intranifty.net/files/netradiant/gamepacks/NeverballPack.zip -Nexuiz GPL gitdir git://git.icculus.org/divverent/nexuiz.git misc/netradiant-NexuizPack master -OpenArena GPL git https://github.com/NeonKnightOA/oagamepack.git -Osirion GPL zip http://ingar.intranifty.net/files/netradiant/gamepacks/OsirionPack.zip -Prey proprietary svn svn://svn.icculus.org/gtkradiant-gamepacks/PreyPack/trunk/ -Q3 proprietary svn svn://svn.icculus.org/gtkradiant-gamepacks/Q3Pack/trunk/ 29 -Quake2 proprietary svn svn://svn.icculus.org/gtkradiant-gamepacks/Q2Pack/branches/1.5/ -Quake4 proprietary svn svn://svn.icculus.org/gtkradiant-gamepacks/Q4Pack/branches/1.5/ -Quake GPL zip http://ingar.intranifty.net/files/netradiant/gamepacks/Quake1Pack.zip -Quetoo GPL svn svn://svn.icculus.org/gtkradiant-gamepacks/QuetooPack/branches/1.5/ -Tremulous proprietary zip http://ingar.intranifty.net/files/netradiant/gamepacks/TremulousPack.zip -TurtleArena proprietary git https://github.com/Turtle-Arena/turtle-arena-radiant-pack.git -UFOAI proprietary svn svn://svn.icculus.org/gtkradiant-gamepacks/UFOAIPack/branches/1.5/ -Unvanquished BSD svn https://github.com/Unvanquished/unvanquished-mapeditor-support.git/trunk/build/netradiant -Warsow GPL git https://github.com/Warsow/NetRadiantPack.git -Wolf proprietary svn svn://svn.icculus.org/gtkradiant-gamepacks/WolfPack/branches/1.5/ -Xonotic GPL git https://gitlab.com/xonotic/netradiant-xonoticpack.git +AlienArena yes GPL svn https://svn.code.sf.net/p/alienarena-cc/code/trunk/tools/netradiant_gamepack/AlienArenaPack +DarkPlaces yes GPL svn svn://svn.icculus.org/gtkradiant-gamepacks/DarkPlacesPack/branches/1.5/ +Doom3 yes proprietary svn svn://svn.icculus.org/gtkradiant-gamepacks/Doom3Pack/branches/1.5/ +ET yes proprietary svn svn://svn.icculus.org/gtkradiant-gamepacks/ETPack/branches/1.5/ +Heretic2 yes proprietary svn svn://svn.icculus.org/gtkradiant-gamepacks/Her2Pack/branches/1.5/ +JediAcademy no proprietary svn svn://svn.icculus.org/gtkradiant-gamepacks/JAPack/branches/1.5/ +Kingpin yes unknown zip http://download.kingpin.info/kingpin/editing/maps/map_editors/NetRadiant/addon/Kingpinpack.zip +Neverball yes proprietary zip http://ingar.intranifty.net/files/netradiant/gamepacks/NeverballPack.zip +Nexuiz yes GPL gitdir git://git.icculus.org/divverent/nexuiz.git misc/netradiant-NexuizPack master +OpenArena yes GPL git https://github.com/NeonKnightOA/oagamepack.git +Osirion yes GPL zip http://ingar.intranifty.net/files/netradiant/gamepacks/OsirionPack.zip +Prey yes proprietary svn svn://svn.icculus.org/gtkradiant-gamepacks/PreyPack/trunk/ +Q3 yes proprietary svn svn://svn.icculus.org/gtkradiant-gamepacks/Q3Pack/trunk/ 29 +Q3Rally yes proprietary svn https://svn.code.sf.net/p/q3rallysa/code/tools/radiant-config/radiant15-netradiant/ +Quake2 yes proprietary svn svn://svn.icculus.org/gtkradiant-gamepacks/Q2Pack/branches/1.5/ +Quake4 yes proprietary svn svn://svn.icculus.org/gtkradiant-gamepacks/Q4Pack/branches/1.5/ +Quake yes GPL zip http://ingar.intranifty.net/files/netradiant/gamepacks/Quake1Pack.zip +Quetoo yes GPL svn svn://svn.icculus.org/gtkradiant-gamepacks/QuetooPack/branches/1.5/ +SmokinGuns yes unknown git https://github.com/smokin-guns/smokinguns-mapeditor-support.git +Tremulous yes proprietary zip http://ingar.intranifty.net/files/netradiant/gamepacks/TremulousPack.zip +TurtleArena yes proprietary git https://github.com/Turtle-Arena/turtle-arena-radiant-pack.git +UFOAI yes proprietary svn svn://svn.icculus.org/gtkradiant-gamepacks/UFOAIPack/branches/1.5/ +Unvanquished yes BSD git https://github.com/Unvanquished/unvanquished-mapeditor-support.git +Warsow yes GPL git https://github.com/Warsow/NetRadiantPack.git +Wolf yes proprietary svn svn://svn.icculus.org/gtkradiant-gamepacks/WolfPack/branches/1.5/ +WoP yes proprietary git https://github.com/PadWorld-Entertainment/wop-mapeditor-support.git +Xonotic yes GPL git https://gitlab.com/xonotic/netradiant-xonoticpack.git EOF } +if command -v gsed >/dev/null +then + SED=gsed +elif sed --help >/dev/null 2>&1 +then + SED=sed +else + printf 'ERROR: GNU sed is missing\n' >&2 + exit 1 +fi + +printRealPath () +{ + if command -v grealpath >/dev/null + then + grealpath "${1}" + elif command -v realpath >/dev/null + then + realpath "${1}" + elif command -v greadlink >/dev/null + then + # test greadlink first as greadlink has the feature on macos + # but readlink only has it on linux, note that it's probably + # the same on bsd + # note: (g)readlink requires the file to be create first + greadlink -f "${1}" + elif command -v readlink >/dev/null + then + # --help and -f options are GNU readlink things + if readlink --help >/dev/null 2>&1 + then + readlink -f "${1}" + else + if ! python -c "import os; print(os.path.realpath('${1}'))" + then + printf 'ERROR: GNU realpath or other way to compute real path of a file is missing\n' >&2 + exit 1 + fi + fi + fi +} + sanitizeDB () { - sed -e 's/#.*//;s/[ \t][ \t][ \t]*/\t/g;s/^[ \t]*//;s/[ \t]*$//' \ + ${SED} -e 's/#.*//;s/[ \t][ \t][ \t]*/\t/g;s/^[ \t]*//;s/[ \t]*$//' \ | grep -v '^$' } @@ -99,7 +146,7 @@ printList () { dedupeList () { printList "${1}" \ | tr '\n' ' ' \ - | sed -e 's/ $//' + | ${SED} -e 's/ $//' } printGamePackDB () { @@ -109,7 +156,7 @@ printGamePackDB () { printLicenseList () { printGamePackDB \ - | awk '{ print $2 }' \ + | awk '{ print $3 }' \ | sort -u } @@ -132,14 +179,14 @@ printNameListByLicense () { case "${license}" in 'none') break - ;; + ;; 'all') license_list="$(printLicenseList)" break - ;; + ;; 'free') license_list="${license_list} ${free_license_list}" - ;; + ;; *) if printLicenseList | inList "${license}" then @@ -147,7 +194,7 @@ printNameListByLicense () { else printError "unknown license: ${license}" fi - ;; + ;; esac done @@ -156,9 +203,9 @@ printNameListByLicense () { for license in ${license_list} do printGamePackDB \ - | awk '$2 == "'"${license}"'"' \ + | awk '$3 == "'"${license}"'"' \ | awk '{ print $1 }' - done + done | sort -u } printNameListByName () { @@ -174,21 +221,22 @@ printNameListByName () { case "${name}" in 'none') break - ;; + ;; 'all') - local name_list name_list="$(printNameList)" break - ;; + ;; + 'validated') + name_list="${name_list} validated" + ;; *) if printNameList | inList "${name}" then - local name_list name_list="${name_list} ${name}" else printError "unknown name: ${name}" fi - ;; + ;; esac done @@ -196,6 +244,13 @@ printNameListByName () { for name in ${name_list} do + if [ "${name}" = 'validated' ] + then + printGamePackDB \ + | awk '$2 == "yes"' \ + | awk '{ print $1 }' + fi + printGamePackDB \ | awk '$1 == "'"${name}"'"' \ | awk '{ print $1 }' @@ -224,18 +279,14 @@ getValue () { downloadExtraUrls () { - local dir - - dir="${1}" - - if [ -f "${dir}/extra-urls.txt" ] + if [ -f 'extra-urls.txt' ] then - while IFS=' ' read -r FILE URL + while IFS=' ' read -r extra_file extra_url do ( - ${WGET} -O "${dir}/${FILE}" "${URL}" + ${WGET} -O "${extra_file}" "${extra_url}" ) ] [ACTION] @@ -448,15 +524,15 @@ printHelp () { SELECTIONS: ${tab}-n, --name NAMES… ${tab}${tab}select games by name (default: none) - ${tab}${tab}special keyword: all, none + ${tab}${tab}special keyword: validated, all, none ${tab}${tab}available games: - $(printNameList | sed -e 's/^/\t\t\t/') + $(printNameList | ${SED} -e 's/^/\t\t\t/') ${tab}-l, --license LICENSES… ${tab}${tab}select games by license (default: none) ${tab}${tab}special keyword: free, all, none ${tab}${tab}available licenses: - $(printLicenseList | sed -e 's/^/\t\t\t/') + $(printLicenseList | ${SED} -e 's/^/\t\t\t/') ACTIONS: ${tab}-ln, --list-names @@ -465,7 +541,7 @@ printHelp () { ${tab}-ll, --list-licenses ${tab}${tab}list all game licenses - ${tab}-ls, --list + ${tab}-ls, --list-selected ${tab}${tab}list selected games ${tab}-d, --download @@ -477,9 +553,13 @@ printHelp () { ${tab}-h, --help ${tab}${tab}print this help - Example: + Examples: + ${tab}${prog_name} --license GPL BSD --list-selected ${tab}${prog_name} --license GPL BSD --download --install + ${tab}${prog_name} --name validated --list-selected + ${tab}${prog_name} --name validated --download --install + EOF exit @@ -494,6 +574,9 @@ list_names='false' download_packs='false' install_packs='false' +mkdir_download='false' +mkdir_install='false' + by_license='false' by_name='false' @@ -520,58 +603,63 @@ do fi case "${1}" in - '--list-licenses'|'-ll') - arg_type='' - list_licenses='true' - ;; '--list-names'|'-ln') arg_type='' list_names='true' - ;; + option_list="${option_list} ${1}" + ;; + '--list-licenses'|'-ll') + arg_type='' + list_licenses='true' + option_list="${option_list} ${1}" + ;; '--list-selected'|'-ls') arg_type='' list_selected='true' option_list="${option_list} ${1}" - ;; + ;; '--download'|'-d') arg_type='' download_packs='true' + mkdir_download='true' option_list="${option_list} ${1}" - ;; + ;; '--install'|'-i') arg_type='' install_packs='true' + mkdir_download='true' + mkdir_install='true' option_list="${option_list} ${1}" - ;; + ;; '--license'|'-l') by_license='true' arg_type='pack-license' option_list="${option_list} ${1}" - ;; + ;; '--name'|'-n') by_name='true' arg_type='pack-name' option_list="${option_list} ${1}" - ;; + ;; '--download-dir'|'-dd') arg_type='download-dir' option_list="${option_list} ${1}" - ;; + ;; '--install-dir'|'-id') arg_type='install-dir' option_list="${option_list} ${1}" - ;; + ;; '-'*) printError "unknown option: ${1}" - ;; + ;; *) case "${arg_type}" in - 'pack-license') - license_list="${license_list} ${1}" - ;; 'pack-name') name_list="${name_list} ${1}" - ;; + ;; + 'pack-license') + license_list="${license_list} ${1}" + ;; 'download-dir') if [ -z "${download_dir}" ] then @@ -579,7 +667,7 @@ do else printError "more than one download dir: ${1}" fi - ;; + ;; 'install-dir') if [ -z "${install_dir}" ] then @@ -587,12 +675,12 @@ do else printError "more than one install dir: ${1}" fi - ;; + ;; *) printError "misplaced argument: ${1}" - ;; + ;; esac - ;; + ;; esac shift @@ -601,12 +689,24 @@ done # compatibility with legacy Makefile if [ "${DOWNLOAD_GAMEPACKS}" = 'yes' ] then - ! [ -z "${DOWNLOADDIR}" ] && download_dir="${DOWNLOADDIR}" - ! [ -z "${INSTALLDIR}" ] && install_dir="${INSTALDIR}" + if ! [ -z "${DOWNLOADDIR}" ] + then + download_dir="${DOWNLOADDIR}" + fi + + if ! [ -z "${INSTALLDIR}" ] + then + install_dir="${INSTALLDIR}" + fi + license_list='free' by_license='true' + download_packs='true' + mkdir_download='true' + install_packs='true' + mkdir_install='true' fi if [ -z "${download_dir}" ] @@ -619,32 +719,40 @@ then install_dir="${default_install_dir}" fi -if "${by_license}" +if "${by_name}" then - selected_list="${selected_list} $(printNameListByLicense "${license_list}")" + selected_list="${selected_list} $(printNameListByName "${name_list}")" fi -if "${by_name}" +if "${by_license}" then - selected_list="${selected_list} $(printNameListByName "${name_list}")" + selected_list="${selected_list} $(printNameListByLicense "${license_list}")" fi selected_list="$(dedupeList "${selected_list}")" -${MKDIR_P} "${download_dir}" -${MKDIR_P} "${install_dir}" -real_download_dir="$(readlink -f "${download_dir}")" -real_install_dir="$(readlink -f "${install_dir}")" +if "${mkdir_download}" +then + ${MKDIR_P} "${download_dir}" + real_download_dir="$(printRealPath "${download_dir}")" +fi -if "${list_licenses}" +if "${mkdir_install}" then - printLicenseList + ${MKDIR_P} "${install_dir}" + real_install_dir="$(printRealPath "${install_dir}")" fi if "${list_names}" then printNameList fi + +if "${list_licenses}" +then + printLicenseList +fi + if "${list_selected}" then printList "${selected_list}"