Compare commits
16 Commits
topics/cat
...
version/20
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
48516d963b | ||
|
|
81c2770961 | ||
|
|
d7c7804f8a | ||
|
|
f93f1f22f8 | ||
|
|
6d2a64bb3f | ||
|
|
17dd55f886 | ||
|
|
efd0fd9608 | ||
|
|
ef59f85217 | ||
|
|
d1da9d2bbb | ||
|
|
62c416cf8c | ||
|
|
1415af71f6 | ||
|
|
8e41c1308b | ||
|
|
e658f8b12d | ||
|
|
3f6d7164ff | ||
|
|
1650e37230 | ||
|
|
7bd7b8792b |
8
.gitmodules
vendored
8
.gitmodules
vendored
@@ -1,11 +1,11 @@
|
||||
[submodule "simgear"]
|
||||
path = simgear
|
||||
url = ../simgear
|
||||
branch = next
|
||||
branch = release/2020.1
|
||||
[submodule "flightgear"]
|
||||
path = flightgear
|
||||
url = ../flightgear
|
||||
branch = next
|
||||
branch = release/2020.1
|
||||
[submodule "fgrun"]
|
||||
path = fgrun
|
||||
url = ../fgrun
|
||||
@@ -13,7 +13,7 @@
|
||||
[submodule "fgdata"]
|
||||
path = fgdata
|
||||
url = ../fgdata
|
||||
branch = next
|
||||
branch = release/2020.1
|
||||
[submodule "windows-3rd-party"]
|
||||
path = windows-3rd-party
|
||||
url = ../windows-3rd-party
|
||||
@@ -21,4 +21,4 @@
|
||||
[submodule "getstart"]
|
||||
path = getstart
|
||||
url = ../getstart
|
||||
branch = next
|
||||
branch = release/2020.1
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
|
||||
; we copy everything in install/<arch>/bin except these, which aren't
|
||||
; useful to the end-user to ship
|
||||
#define ExcludedBinaries "*smooth.exe,metar.exe"
|
||||
#define ExcludedBinaries "*smooth.exe,metar.exe,js_demo.exe"
|
||||
|
||||
[Setup]
|
||||
AppId=FlightGear
|
||||
|
||||
@@ -3,8 +3,6 @@
|
||||
<template>
|
||||
<version n="0">2019.*</version>
|
||||
<version n="1">2018.*</version>
|
||||
<version n="2">2020.1.*</version>
|
||||
<version n="3">2020.2.*</version>
|
||||
|
||||
<id>org.flightgear.fgaddon.trunk</id>
|
||||
<license>GPL</license>
|
||||
|
||||
@@ -88,54 +88,6 @@ function _logOutput(){
|
||||
esac
|
||||
}
|
||||
|
||||
function _yes_no_quit_prompt(){
|
||||
local prompt="$1"
|
||||
local default="$2"
|
||||
local choices res answer
|
||||
|
||||
case "$default" in
|
||||
[yY]) choices='Y/n/q' ;;
|
||||
[nN]) choices='y/N/q' ;;
|
||||
[qQ]) choices='y/n/Q' ;;
|
||||
"")
|
||||
if [[ "$INTERACTIVE_MODE" -eq 0 ]]; then
|
||||
_printLog "Non-interactive mode requested, but found a question with" \
|
||||
"no default answer;"
|
||||
_printLog "this can't work, aborting."
|
||||
exit 1
|
||||
fi
|
||||
choices='y/n/q'
|
||||
;;
|
||||
*)
|
||||
_printLog \
|
||||
"Invalid default choice for _yes_no_quit_prompt(): this is a bug in the"
|
||||
"script, aborting."
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
while true; do
|
||||
if [[ "$INTERACTIVE_MODE" -eq 0 ]]; then
|
||||
answer="$default"
|
||||
else
|
||||
read -r -p "$prompt [$choices] " answer
|
||||
fi
|
||||
|
||||
if [[ -z "$answer" ]]; then
|
||||
answer="$default"
|
||||
fi
|
||||
|
||||
case "$answer" in
|
||||
[yY]) res=0; break ;;
|
||||
[nN]) res=1; break ;;
|
||||
[qQ]) res=2; break ;;
|
||||
*) ;;
|
||||
esac
|
||||
done
|
||||
|
||||
return $res
|
||||
}
|
||||
|
||||
function _aptUpdate(){
|
||||
local cmd=()
|
||||
|
||||
@@ -219,6 +171,7 @@ function _gitDownload(){
|
||||
return
|
||||
fi
|
||||
|
||||
|
||||
if [ -f "README" -o -f "README.txt" -o -f "README.rst" ]; then
|
||||
_printLog "$component: the repository already exists"
|
||||
else
|
||||
@@ -226,73 +179,11 @@ function _gitDownload(){
|
||||
"${REPO_USERNAME[$component]}" \
|
||||
"$component")
|
||||
clone_arg="${proto_spec}${REPO_ADDRESS[$component]}"
|
||||
|
||||
# Test whether $clone_arg is 'https://git.code.sf.net/p/flightgear/fgdata'
|
||||
if _check_clone_url_and_maybe_ask "$clone_arg"; then
|
||||
_clone_fgdata # Work around a problem at SourceForge
|
||||
else
|
||||
_printLog "Fetching $component with 'git clone $clone_arg'"
|
||||
git clone "$clone_arg" .
|
||||
fi
|
||||
_printLog "Fetching $component with 'git clone $clone_arg'"
|
||||
git clone "$clone_arg" .
|
||||
fi
|
||||
}
|
||||
|
||||
# Return 0 if _clone_fgdata() should be used, otherwise 1.
|
||||
function _check_clone_url_and_maybe_ask(){
|
||||
local -i retcode=1
|
||||
|
||||
if [[ "$1" = "https://git.code.sf.net/p/flightgear/fgdata" ]]; then
|
||||
local prompt_res=-1
|
||||
set +e
|
||||
if [[ "$INTERACTIVE_MODE" -eq 1 ]]; then
|
||||
printf "From experience, cloning FGData from SourceForge using https does \
|
||||
not work\n(probably a problem at SourceForge), but updates do work. Thus, we \
|
||||
propose to\nclone FGData from GitLab and change the repository setup so that \
|
||||
subsequent\nupdates are fetched from SourceForge. This should be quite safe, \
|
||||
because\n<https://gitlab.com/flightgear/fgdata> is an official mirror of \
|
||||
FGData (it is\nmaintained by FlightGear developers). Answer 'y' to proceed \
|
||||
this way. If you\nanswer 'n', we'll *try* to clone FGData from SourceForge \
|
||||
using https. Answer 'q'\nif you want to quit. "
|
||||
fi
|
||||
_yes_no_quit_prompt "What is your choice?" y; prompt_res=$?
|
||||
set -e
|
||||
case $prompt_res in
|
||||
0) retcode=0 ;;
|
||||
1) retcode=1 ;;
|
||||
2) exit 0 ;;
|
||||
*) _printLog "Unexpected return code from _yes_no_quit_prompt() in" \
|
||||
"_check_clone_url_and_maybe_ask(); aborting."
|
||||
exit 1 ;;
|
||||
esac
|
||||
|
||||
if [[ $retcode -eq 1 ]]; then
|
||||
_printLog "Okay, will try to clone FGData from SourceForge using" \
|
||||
"https, but be aware that"
|
||||
_printLog "this is likely to fail."
|
||||
fi
|
||||
fi
|
||||
|
||||
return $retcode
|
||||
}
|
||||
|
||||
# Special function for cloning FGData with https. This is needed because there
|
||||
# seems to be a problem at SourceForge that doesn't allow the clone operation
|
||||
# to succeed for FGData using https---presumably because of its large size.
|
||||
function _clone_fgdata(){
|
||||
local url="https://${REPO_ADDRESS[DATA_ALT]}"
|
||||
_printLog "Starting special initialization routine for the DATA component..."
|
||||
_printLog "Fetching FGData with 'git clone $url'"
|
||||
git clone "$url" .
|
||||
_printLog "Creating the 'next' local branch"
|
||||
git checkout -b next origin/next
|
||||
url="https://${REPO_ADDRESS[DATA]}"
|
||||
_printLog "Setting FGData's 'origin' remote to $url"
|
||||
git remote set-url origin "$url"
|
||||
_printLog "Updating FGData from $url"
|
||||
git pull --ff-only
|
||||
_printLog "Special initialization routine for the DATA component: done."
|
||||
}
|
||||
|
||||
function _make(){
|
||||
if [ "$COMPILE" = "y" ]; then
|
||||
pkg="$1"
|
||||
@@ -473,17 +364,7 @@ function _usage() {
|
||||
echo " doing the same for SIMGEAR (e.g., if doing repeated TERRAGEAR"
|
||||
echo " builds and you know your SIMGEAR is already fine and up-to-date)."
|
||||
echo " -s compile only the last known stable versions"
|
||||
echo " --compositor build FlightGear with compositor enabled"
|
||||
echo " --non-interactive"
|
||||
echo " don't ask any question; always assume the default answer in"
|
||||
echo " situations where a question would normally be asked."
|
||||
echo
|
||||
echo "More detailed information can be found on the FlightGear wiki:"
|
||||
echo ""
|
||||
echo " http://wiki.flightgear.org/Scripted_Compilation_on_Linux_Debian/Ubuntu"
|
||||
echo ""
|
||||
echo "The wiki may sometimes be a bit outdated; if in doubt, consider this help text"
|
||||
echo "as the reference."
|
||||
echo " --compositor build FlightGear with compositor enabled."
|
||||
}
|
||||
|
||||
#######################################################
|
||||
@@ -492,7 +373,6 @@ set -e
|
||||
|
||||
CBD="$PWD"
|
||||
LOGFILE="$CBD/compilation_log.txt"
|
||||
INTERACTIVE_MODE=1
|
||||
|
||||
# Available values for WHATTOBUILD and WHATTOBUILDALL:
|
||||
declare -a WHATTOBUILD_AVAIL=(
|
||||
@@ -570,9 +450,6 @@ REPO_ADDRESS[SIMGEAR]="git.code.sf.net/p/flightgear/simgear"
|
||||
REPO_SITE[SIMGEAR]="SourceForge"
|
||||
REPO_ADDRESS[DATA]="git.code.sf.net/p/flightgear/fgdata"
|
||||
REPO_SITE[DATA]="SourceForge"
|
||||
# This is an official mirror of FGData
|
||||
REPO_ADDRESS[DATA_ALT]="gitlab.com/flightgear/fgdata.git"
|
||||
REPO_SITE[DATA_ALT]="GitLab"
|
||||
REPO_ADDRESS[FGFS]="git.code.sf.net/p/flightgear/flightgear"
|
||||
REPO_SITE[FGFS]="SourceForge"
|
||||
REPO_ADDRESS[FGRUN]="git.code.sf.net/p/flightgear/fgrun"
|
||||
@@ -594,8 +471,7 @@ if [[ `uname` == 'OpenBSD' ]]; then
|
||||
fi
|
||||
TEMP=$($getopt -o '+shc:p:a:d:r:j:O:ib:' \
|
||||
--longoptions git-clone-default-proto:,git-clone-site-params:,help \
|
||||
--longoptions package-manager:,sudo:,ignore-intercomponent-deps,compositor \
|
||||
--longoptions non-interactive,version \
|
||||
--longoptions package-manager:,sudo:,ignore-intercomponent-deps,compositor,version \
|
||||
-n "$PROGNAME" -- "$@")
|
||||
|
||||
case $? in
|
||||
@@ -673,7 +549,6 @@ while true; do
|
||||
-i) OPENRTI="OPENRTI"; shift ;;
|
||||
-b) BUILD_TYPE="$2"; shift 2 ;;
|
||||
--compositor) COMPOSITOR="-DENABLE_COMPOSITOR=ON"; shift ;;
|
||||
--non-interactive) INTERACTIVE_MODE=0; shift ;;
|
||||
-h|--help) _usage; exit 0 ;;
|
||||
--version) _printVersion; exit 0 ;;
|
||||
--) shift; break ;;
|
||||
@@ -816,7 +691,7 @@ if [[ "$DOWNLOAD_PACKAGES" = "y" ]]; then
|
||||
# CMake
|
||||
if _elementIn "CMAKE" "${WHATTOBUILD[@]}"; then
|
||||
PKG+=(libarchive-dev libbz2-dev libexpat1-dev libjsoncpp-dev liblzma-dev
|
||||
libncurses5-dev libssl-dev procps zlib1g-dev)
|
||||
libncurses5-dev procps zlib1g-dev)
|
||||
else
|
||||
PKG+=(cmake)
|
||||
fi
|
||||
@@ -1196,11 +1071,11 @@ if _elementIn "FGFS" "${WHATTOBUILD[@]}" || \
|
||||
fi
|
||||
fi
|
||||
cd "$CBD"
|
||||
|
||||
|
||||
paths="../../$SIMGEAR_INSTALL_DIR/lib:../../$OSG_INSTALL_DIR/lib:../../$OPENRTI_INSTALL_DIR/lib:../../$PLIB_INSTALL_DIR/lib"
|
||||
gdb="gdb"
|
||||
set_ld_library_path="export LD_LIBRARY_PATH='$paths'\"\${LD_LIBRARY_PATH:+:}\${LD_LIBRARY_PATH}\""
|
||||
|
||||
|
||||
common=""
|
||||
common="${common}#!/bin/sh\n"
|
||||
common="${common}cd \"\$(dirname \"\$0\")\"\n"
|
||||
|
||||
2
fgdata
2
fgdata
Submodule fgdata updated: 7d78937a4c...f5b4cb1d0b
Submodule flightgear updated: 61808019a0...34a29b9106
2
getstart
2
getstart
Submodule getstart updated: 4313401e95...b7ab2fa1e9
@@ -22,7 +22,7 @@ echo "Build path is: $PATH"
|
||||
# to be necessary all the same
|
||||
#export PKG_CONFIG_PATH=$WORKSPACE/dist/lib/pkgconfig
|
||||
|
||||
cmakeCommonArgs="-G Ninja -DCMAKE_INSTALL_PREFIX:PATH=$WORKSPACE/dist -DCMAKE_BUILD_TYPE=Debug"
|
||||
cmakeCommonArgs="-G Ninja -DCMAKE_INSTALL_PREFIX:PATH=$WORKSPACE/dist -DCMAKE_BUILD_TYPE=RelWithDebInfo"
|
||||
|
||||
###############################################################################
|
||||
echo "Starting on SimGear"
|
||||
@@ -30,6 +30,7 @@ pushd sgBuild
|
||||
cmake ${cmakeCommonArgs} ../simgear
|
||||
|
||||
# compile
|
||||
cmake --build . --target debug_symbols
|
||||
cmake --build . --target install
|
||||
|
||||
if [ $? -ne '0' ]; then
|
||||
@@ -51,6 +52,7 @@ fi
|
||||
|
||||
cmake -DFG_BUILD_TYPE=$FGBUILDTYPE -DENABLE_SWIFT:BOOL=ON ${cmakeCommonArgs} ../flightgear
|
||||
|
||||
cmake --build . --target debug_symbols
|
||||
cmake --build . --target install
|
||||
|
||||
if [ $? -ne '0' ]; then
|
||||
@@ -62,6 +64,9 @@ popd
|
||||
|
||||
chmod +x $WORKSPACE/dist/bin/osgversion
|
||||
|
||||
echo "Running symbol upload script"
|
||||
./sentry-dSYM-upload-mac.sh
|
||||
|
||||
################################################################################
|
||||
|
||||
# run the unlock script now - we need to do this right before code-signing,
|
||||
|
||||
@@ -167,9 +167,8 @@ if !$isRelease
|
||||
--file #{dmgPath}`
|
||||
|
||||
|
||||
end
|
||||
|
||||
puts "Creating full image with data"
|
||||
else
|
||||
puts "Creating full image with data"
|
||||
|
||||
`rsync -a fgdata/ #{resourcesDir}/data`
|
||||
|
||||
@@ -187,6 +186,8 @@ puts "Notarizing DMG #{dmgFullPath}"
|
||||
--username "zakalawe@mac.com" \
|
||||
--password "@keychain:FlightGearAppStoreConnectUserName" \
|
||||
--file #{dmgFullPath}`
|
||||
end
|
||||
|
||||
|
||||
|
||||
puts "Packaging complete"
|
||||
|
||||
@@ -36,10 +36,6 @@ localization files in $FG_ROOT/Translations/<language_code>):
|
||||
fg-update-translation-files --transl-dir="$FG_ROOT/Translations" \
|
||||
merge-new-master $languages
|
||||
|
||||
Note: you may omit $languages in the fg-update-translation-files command if
|
||||
you want to autodetect the FlightGear-nonQt.xlf files present in
|
||||
$FG_ROOT/Translations.
|
||||
|
||||
Updating XLIFF files to reflect changes in the default translation
|
||||
------------------------------------------------------------------
|
||||
|
||||
@@ -49,9 +45,6 @@ modified or removed, or categories added or removed[3]):
|
||||
fg-update-translation-files --transl-dir="$FG_ROOT/Translations" \
|
||||
merge-new-master $languages
|
||||
|
||||
Note: you may omit $languages in this command if you want to autodetect the
|
||||
FlightGear-nonQt.xlf files present in $FG_ROOT/Translations.
|
||||
|
||||
Updating XLIFF files to mark or remove obsolete translated strings
|
||||
------------------------------------------------------------------
|
||||
|
||||
@@ -60,14 +53,9 @@ To remove unused translated strings (not to be done too often in my opinion):
|
||||
fg-update-translation-files --transl-dir="$FG_ROOT/Translations" \
|
||||
remove-unused $languages
|
||||
|
||||
Notes:
|
||||
|
||||
- You may omit $languages in this command if you want to autodetect the
|
||||
FlightGear-nonQt.xlf files present in $FG_ROOT/Translations.
|
||||
|
||||
- It is possible to replace 'remove-unused' with 'mark-unused' to just mark
|
||||
the strings as not-to-be-translated; however, 'merge-new-master' presented
|
||||
above already does that.
|
||||
(you may replace 'remove-unused' with 'mark-unused' to just mark the strings
|
||||
as not-to-be-translated, however 'merge-new-master' presented above already
|
||||
does that)
|
||||
|
||||
Merging contents from an XLIFF file into another one
|
||||
----------------------------------------------------
|
||||
|
||||
@@ -27,7 +27,6 @@ import sys
|
||||
|
||||
import flightgear.meta.logging
|
||||
import flightgear.meta.i18n as fg_i18n
|
||||
from flightgear.meta.i18n import XliffFormatHandler
|
||||
|
||||
|
||||
PROGNAME = os.path.basename(sys.argv[0])
|
||||
@@ -46,7 +45,7 @@ def processCommandLine():
|
||||
|
||||
parser = argparse.ArgumentParser(
|
||||
usage="""\
|
||||
%(prog)s [OPTION ...] ACTION [LANGUAGE_CODE]...
|
||||
%(prog)s [OPTION ...] ACTION LANGUAGE_CODE...
|
||||
Update FlightGear XLIFF localization files.""",
|
||||
description="""\
|
||||
This program performs the following operations (actions) on FlightGear XLIFF
|
||||
@@ -69,13 +68,6 @@ translation files (*.xlf):
|
||||
In the XLIFF localization files corresponding to the specified
|
||||
language(s), remove all translated strings that are marked as unused.
|
||||
|
||||
If no LANGUAGE_CODE is provided as an argument, then assuming $transl_dir
|
||||
represents the value passed to --transl-dir, all directories $d such that a
|
||||
file named FlightGear-nonQt.xlf is found in $transl_dir/$d will be acted on as
|
||||
if they had been passed as LANGUAGE_CODE arguments (actually, the directory
|
||||
$transl_dir/default is not considered as a candidate; it is simply skipped).
|
||||
Typically, $transl_dir is /path/to/FGData/Translations.
|
||||
|
||||
A translated string that is marked as unused is still present in the XLIFF
|
||||
localization file; it is just presented in a way that tells translators they
|
||||
don't need to worry about it. On the other hand, when a translated string is
|
||||
@@ -113,7 +105,7 @@ general on the short or mid-term: they only take some space.
|
||||
remove those already marked as unused from the XLIFF
|
||||
files corresponding to each given LANGUAGE_CODE (i.e.,
|
||||
those that are not in the default translation)""")
|
||||
parser.add_argument("lang_code", metavar="LANGUAGE_CODE", nargs="*",
|
||||
parser.add_argument("lang_code", metavar="LANGUAGE_CODE", nargs="+",
|
||||
help="""\
|
||||
codes of languages to operate on (e.g., fr, en_GB, it,
|
||||
es_ES...)""")
|
||||
@@ -133,19 +125,11 @@ class MarkOrRemoveUnusedAction(enum.Enum):
|
||||
mark, remove = range(2)
|
||||
|
||||
|
||||
def langCodesToActOn():
|
||||
"""Return an iterable of all language codes we were told to work on."""
|
||||
if params.lang_code:
|
||||
return params.lang_code
|
||||
else:
|
||||
return XliffFormatHandler.availableTranslations(params.transl_dir)
|
||||
|
||||
|
||||
def markOrRemoveUnused(l10nResPoolMgr, action):
|
||||
formatHandler = fg_i18n.XliffFormatHandler()
|
||||
masterTransl = l10nResPoolMgr.readFgMasterTranslation().transl
|
||||
|
||||
for langCode in langCodesToActOn():
|
||||
for langCode in params.lang_code:
|
||||
xliffPath = formatHandler.defaultFilePath(params.transl_dir, langCode)
|
||||
transl = formatHandler.readTranslation(xliffPath)
|
||||
|
||||
@@ -164,7 +148,7 @@ def mergeNewMaster(l10nResPoolMgr):
|
||||
formatHandler = fg_i18n.XliffFormatHandler()
|
||||
masterTransl = l10nResPoolMgr.readFgMasterTranslation().transl
|
||||
|
||||
for langCode in langCodesToActOn():
|
||||
for langCode in params.lang_code:
|
||||
xliffPath = formatHandler.defaultFilePath(params.transl_dir, langCode)
|
||||
transl = formatHandler.readTranslation(xliffPath)
|
||||
transl.mergeMasterTranslation(masterTransl, logger=logger)
|
||||
|
||||
@@ -1001,33 +1001,6 @@ class AbstractFormatHandler(metaclass=abc.ABCMeta):
|
||||
baseName = cls.defaultFileBaseName(targetLanguage)
|
||||
return os.path.join(translationsDir, targetLanguage, baseName)
|
||||
|
||||
@classmethod
|
||||
def availableTranslations(cls, translationsDir):
|
||||
"""Return a list of all available translations in translationsDir.
|
||||
|
||||
This method expects a particular layout for translation files:
|
||||
the one used in $FG_ROOT/Translations. More precisely, it looks
|
||||
for all files named LANG_CODE/NAME in translationsDir, where
|
||||
NAME is cls.defaultFileBaseName(LANG_CODE). The special
|
||||
directory translationsDir/DEFAULT_LANG_DIR is not explored;
|
||||
thus, the result cannot contain DEFAULT_LANG_DIR.
|
||||
|
||||
Return a list of language codes, sorted with list.sort().
|
||||
|
||||
"""
|
||||
res = []
|
||||
with os.scandir(translationsDir) as it:
|
||||
for entry in it:
|
||||
if (entry.name != DEFAULT_LANG_DIR and entry.is_dir() and
|
||||
os.path.isfile(
|
||||
os.path.join(
|
||||
translationsDir, entry.name,
|
||||
cls.defaultFileBaseName(entry.name)))):
|
||||
res.append(entry.name)
|
||||
|
||||
res.sort()
|
||||
return res
|
||||
|
||||
@abc.abstractmethod
|
||||
def writeTranslation(self, transl, filePath):
|
||||
"""Write a Translation instance to a file."""
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
THIS_RELEASE="2020.1"
|
||||
NEXT_RELEASE="2020.2"
|
||||
THIS_RELEASE="2019.1"
|
||||
NEXT_RELEASE="2019.2"
|
||||
SUBMODULES="simgear flightgear fgdata getstart"
|
||||
|
||||
#:<< 'COMMENT_END'
|
||||
@@ -39,6 +39,6 @@ done
|
||||
# IdentitiesOnly yes
|
||||
# User user_sf_username
|
||||
|
||||
#svn copy svn+ssh://svn.code.sf.net/p/flightgear/fgaddon/trunk \
|
||||
# svn+ssh://svn.code.sf.net/p/flightgear/fgaddon/branches/release-${THIS_RELEASE} \
|
||||
# -m "branching for release ${THIS_RELEASE}"
|
||||
svn copy svn+ssh://svn.code.sf.net/p/flightgear/fgaddon/trunk \
|
||||
svn+ssh://svn.code.sf.net/p/flightgear/fgaddon/branches/release-${THIS_RELEASE} \
|
||||
-m "branching for release ${THIS_RELEASE}"
|
||||
|
||||
2
simgear
2
simgear
Submodule simgear updated: bd93fb279b...17f86567f1
Reference in New Issue
Block a user