Hotfix for much too long http headers
[olsrd.git] / release / release.bash
index bb7e229..0806808 100755 (executable)
@@ -8,8 +8,24 @@ set -u
 # # Settings
 # ##############################################################################
 
-# The digit representation of a version can be in the format 0.6.4 or 0.6.4.1
-declare versionRegexDigits="([[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+)(\.[[:digit:]]+)?"
+declare MODE_BRANCH="branch"
+declare MODE_RELEASE="release"
+
+declare MODE_BRANCH_TXT="Branch"
+declare MODE_BRANCH_TXT_LOWER="branch"
+declare MODE_RELEASE_TXT="Release"
+declare MODE_RELEASE_TXT_LOWER="release"
+
+declare MODE_TXT=""
+declare MODE_TXT_LOWER=""
+
+
+# The digit representation of a basic version can be in the format 0.6.4
+declare versionRegexDigitsBasic="([[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+)"
+
+# The digit representation of a release branch version can be in the format
+# 0.6.4 or 0.6.4.1
+declare versionRegexDigits="${versionRegexDigitsBasic}(\.[[:digit:]]+)?"
 
 # The version for source code can be in the format:
 # - 0.6.4 or 0.6.4.1 or pre-0.6.4 or pre-0.6.4.1
@@ -28,6 +44,18 @@ declare relBranchRegex="release-(${versionRegexDigits})"
 # # Functions
 # ##############################################################################
 
+#
+# Print script usage
+#
+function usage() {
+  echo ""
+  echo "  $(basename "${script}") ${MODE_BRANCH} 0.6.4"
+  echo "    - create the release branch for version 0.6.4"
+  echo "  $(basename "${script}") ${MODE_RELEASE}"
+  echo "    - release the (checked-out) release branch"
+}
+
+
 #
 # Trim a string: remove spaces from the beginning and end of the string
 #
@@ -117,6 +145,41 @@ function checkIsOlsrdGitCheckout() {
 }
 
 
+#
+# Check that a signing key is configured
+#
+function checkGitSigningKeyIsConfigured() {
+  local gpgKeyId="$(git config --get user.signingkey)"
+  if [[ -z "${gpgKeyId}" ]]; then
+    cat >&1 << EOF
+* No signing key is setup for git, please run
+    git config --global user.signingkey <key ID>
+
+  You can get keys and IDs by running 'gpg --list-keys'
+EOF
+    exit 1
+  fi
+
+  #
+  # Check that the signing key is present
+  #
+       set +e
+       gpg --list-key "${gpgKeyId}" &> /dev/null
+       local -i gpgKeyIdPresentResult=${?}
+       set -e
+       if [[ ${gpgKeyIdPresentResult} -ne 0 ]]; then
+         cat >&1 << EOF
+* Your signing key with ID ${gpgKeyId} is not found, please run
+    git config --global user.signingkey <key ID>
+  to setup a valid key ID.
+
+  You can get keys and IDs by running 'gpg --list-keys'
+EOF
+         exit 1
+       fi
+}
+
+
 #
 # Get the version digits from a release tag version
 #
@@ -127,6 +190,22 @@ function getVersionDigitsFromReleaseTag() {
 }
 
 
+#
+# Get the previous release tag and check
+#
+declare prevRelTagVersion=""
+function getPrevRelTag() {
+  set +e
+  prevRelTagVersion="$(git describe --abbrev=0 | \
+                       grep -E "^${versionRegexReleaseTag}$")"
+  set -e
+  if [[ -z "${prevRelTagVersion}" ]]; then
+    echo "* Could not find the previous release tag"
+    exit 1
+  fi
+}
+
+
 #
 # Get the next version digits by incrementing the micro digit
 #
@@ -191,10 +270,15 @@ function adjustBranchName() {
 #
 # 1=last version
 # 2=new version
+# 3= 0 to disallow equal versions as ok
+# return (in checkVersionIncrementingResult) = 0 when new version > last version,
+#                                              1 otherwise
+declare -i checkVersionIncrementingResult=0
 function checkVersionIncrementing() {
+  checkVersionIncrementingResult=0
   local lastVersion="$(stringTrim "${1}")"
   local newVersion="$(stringTrim "${2}")"
-  local errorstr="* The new version ${newVersion} is not greater than the previous version ${lastVersion}"
+  local -i allowEqualVersions=${3}
 
   local -a lastVersionDigits=( ${lastVersion//\./ } )
   local -a newVersionDigits=( ${newVersion//\./ } )
@@ -211,8 +295,8 @@ function checkVersionIncrementing() {
 
   # major
   if [[ ${newVersionDigits[0]} -lt ${lastVersionDigits[0]} ]]; then
-    echo "${errorstr}"
-    exit 1
+    checkVersionIncrementingResult=1
+    return
   fi
   if [[ ${newVersionDigits[0]} -gt ${lastVersionDigits[0]} ]]; then
     return
@@ -220,8 +304,8 @@ function checkVersionIncrementing() {
 
   # minor
   if [[ ${newVersionDigits[1]} -lt ${lastVersionDigits[1]} ]]; then
-    echo "${errorstr}"
-    exit 1
+    checkVersionIncrementingResult=1
+    return
   fi
   if [[ ${newVersionDigits[1]} -gt ${lastVersionDigits[1]} ]]; then
     return
@@ -229,8 +313,8 @@ function checkVersionIncrementing() {
 
   # micro
   if [[ ${newVersionDigits[2]} -lt ${lastVersionDigits[2]} ]]; then
-    echo "${errorstr}"
-    exit 1
+    checkVersionIncrementingResult=1
+    return
   fi
   if [[ ${newVersionDigits[2]} -gt ${lastVersionDigits[2]} ]]; then
     return
@@ -238,16 +322,18 @@ function checkVersionIncrementing() {
 
   # patch level
   if [[ ${newVersionDigits[3]} -lt ${lastVersionDigits[3]} ]]; then
-    echo "${errorstr}"
-    exit 1
+    checkVersionIncrementingResult=1
+    return
   fi
   if [[ ${newVersionDigits[3]} -gt ${lastVersionDigits[3]} ]]; then
     return
   fi
 
   # everything is equal
-  echo "${errorstr}"
-  exit 1
+  if [[ ${allowEqualVersions} -eq 0 ]]; then
+    checkVersionIncrementingResult=1
+  fi
+  return
 }
 
 
@@ -255,7 +341,8 @@ function checkVersionIncrementing() {
 # Commit the current changes, allow an empty commit, or amend (when the commit
 # message is the same as that of the last commit)
 #
-# 1=commit message
+# 1=non-zero to allow an empty commit
+# 2=commit message
 function commitChanges() {
   local -i allowEmpty=${1}
   local msg="$(stringTrim "${2}")"
@@ -275,6 +362,16 @@ function commitChanges() {
 }
 
 
+#
+# Get the version from the Makefile
+#
+function getVersionFromMakefile() {
+  local src="Makefile"
+  local regex="([[:space:]]*VERS[[:space:]]*=[[:space:]]*)${versionRegexSources}[[:space:]]*"
+  grep -E "^${regex}\$" "${src}" | sed -r "s/^${regex}\$/\3/"
+}
+
+
 #
 # Update the version in all relevant files
 #
@@ -350,89 +447,125 @@ function signTextFile() {
 declare script="$(pathCanonicalPath "${0}")"
 declare scriptDir="$(dirname "${script}")"
 declare baseDir="$(dirname "${scriptDir}")"
-unset script
 
 cd "${baseDir}"
 
+declare -i masterWasUpdated=0
 
 #
 # Check the number of arguments
 #
-if [[ ${#} -ne 0 ]]; then
-  echo "* Need no arguments"
+if [[ ${#} -lt 1 ]]; then
+  echo "* Need at least 1 argument:"
+  usage
   exit 1
 fi
 
 
-checkIsOlsrdGitCheckout
-
-
 #
-# Check that a signing key is configured
+# Get the mode and check it
 #
-declare gpgKeyId="$(git config --get user.signingkey)"
-if [[ -z "${gpgKeyId}" ]]; then
-  cat >&1 << EOF
-* No signing key is setup for git, please run
-    git config --global user.signingkey <key ID>
-
-  You can get keys and IDs by running 'gpg --list-keys'
-EOF
+declare mode="$(stringTrim "${1}")"
+shift 1
+if [[ ! "${mode}" == "${MODE_BRANCH}" ]] && \
+   [[ ! "${mode}" == "${MODE_RELEASE}" ]]; then
+  echo "* Wrong mode: ${mode}"
+  usage
   exit 1
 fi
 
 
 #
-# Check that the signing key is present
+# Further mode/argument parsing
 #
-set +e
-gpg --list-key "${gpgKeyId}" &> /dev/null
-declare -i gpgKeyIdPresentResult=${?}
-set -e
-if [[ ${gpgKeyIdPresentResult} -ne 0 ]]; then
-  cat >&1 << EOF
-* Your signing key with ID ${gpgKeyId} is not found, please run
-    git config --global user.signingkey <key ID>
-  to setup a valid key ID.
+declare branchVersion=""
+if [[ "${mode}" == "${MODE_BRANCH}" ]]; then
+  MODE_TXT="${MODE_BRANCH_TXT}"
+  MODE_TXT_LOWER="${MODE_BRANCH_TXT_LOWER}"
 
-  You can get keys and IDs by running 'gpg --list-keys'
-EOF
-  exit 1
+  #
+  # Get the branch version to create
+  #
+  if [[ ${#} -ne 1 ]]; then
+    echo "* Need the version to branch:"
+    usage
+    exit 1
+  fi
+  branchVersion="$(stringTrim "${1}")"
+  shift 1
+
+  #
+  # Check branch version
+  #
+  if [[ -z "$(echo "${branchVersion}" | grep -E "^${versionRegexDigitsBasic}\$")" ]]; then
+    echo "* Version to branch ${branchVersion} has invalid format"
+    echo "  Expected format is: 0.6.4"
+    exit 1
+  fi
+else
+  MODE_TXT="${MODE_RELEASE_TXT}"
+  MODE_TXT_LOWER="${MODE_RELEASE_TXT_LOWER}"
+
+  if [[ ${#} -ne 0 ]]; then
+    echo "* Need no additional arguments."
+    usage
+    exit 1
+  fi
 fi
 
 
-#
-# Get the previous release tag and check
-#
-set +e
-declare prevRelTagVersion="$(git describe --abbrev=0 | \
-                             grep -E "^${versionRegexReleaseTag}$")"
-set -e
-if [[ -z "${prevRelTagVersion}" ]]; then
-  echo "* Could not find the previous release tag"
-  exit 1
+checkIsOlsrdGitCheckout
+
+if [[ "${mode}" == "${MODE_RELEASE}" ]]; then
+  checkGitSigningKeyIsConfigured
 fi
+
+getPrevRelTag
 declare prevTagVersionDigits="$(getVersionDigitsFromReleaseTag "${prevRelTagVersion}")"
 
 
 #
-# Get the current branch and check that we're on a release branch
+# Get the current branch and check that we're on a release branch (for the
+# release mode) or on the master branch (for the branch mode)
 #
 declare relBranch="$(git rev-parse --abbrev-ref HEAD)"
 declare relBranch="$(stringTrim "${relBranch}")"
-if [[ -z "$(echo "${relBranch}" | grep -E "^${relBranchRegex}\$")" ]]; then
-  echo "* You are not on a release branch (format: release-0.6.4 or release-0.6.4.1)"
-  exit 1
+if [[ "${mode}" == "${MODE_BRANCH}" ]]; then
+  if [[ -z "$(echo "${relBranch}" | grep -E "^master\$")" ]]; then
+    echo "* You are not on the master branch"
+    exit 1
+  fi
+  relBranch="release-${branchVersion}"
+
+  # check that the branch does not yet exist
+  declare -i branchTestResult=0
+  set +e
+  git rev-parse --abbrev-ref "${relBranch}" &> /dev/null
+  branchTestResult=${?}
+  set -e
+  if [[ ${branchTestResult} -eq 0 ]]; then
+    echo "* Branch ${relBranch} already exists"
+    exit 1
+  fi
+else
+  if [[ -z "$(echo "${relBranch}" | grep -E "^${relBranchRegex}\$")" ]]; then
+    echo "* You are not on a release branch (format: release-0.6.4 or release-0.6.4.1)"
+    exit 1
+  fi
 fi
 
 
 #
 # Get the version to release from the current branch
 #
-declare relBranchVersionDigits="$(echo "${relBranch}" | \
-                                  sed -r "s/${relBranchRegex}/\1/")"
-
-adjustBranchName
+declare relBranchVersionDigits=""
+if [[ "${mode}" == "${MODE_BRANCH}" ]]; then
+  relBranchVersionDigits="${branchVersion}"
+else
+  relBranchVersionDigits="$(echo "${relBranch}" | \
+                            sed -r "s/${relBranchRegex}/\1/")"
+  adjustBranchName
+fi
 
 declare relTagVersion="v${relBranchVersionDigits}"
 declare relBranchVersionDigitsNextMicro="$(getNextVersionDigitsMicro "${relBranchVersionDigits}")"
@@ -442,16 +575,34 @@ declare relBranchVersionDigitsNextPatchLevel="$(getNextVersionDigitsPatchLevel "
 #
 # Check that the version is incrementing
 #
-checkVersionIncrementing "${prevTagVersionDigits}" "${relBranchVersionDigits}"
+checkVersionIncrementing "${prevTagVersionDigits}" "${relBranchVersionDigits}" 0
+if [[ ${checkVersionIncrementingResult} -ne 0 ]]; then
+  echo "* The new version ${relBranchVersionDigits} is not greater than the previous version ${prevTagVersionDigits}"
+  exit 1
+fi
+
+
+#
+# When branching, check that the version is incrementing (allow equal versions),
+# w.r.t. the version in the Makefile
+#
+if [[ "${mode}" == "${MODE_BRANCH}" ]]; then
+  declare currentMasterVersion="$(getVersionFromMakefile)"
+  checkVersionIncrementing "${currentMasterVersion}" "${relBranchVersionDigits}" 1
+  if [[ ${checkVersionIncrementingResult} -ne 0 ]]; then
+    echo "* The new version ${relBranchVersionDigits} is not greater than the current version ${currentMasterVersion}"
+    exit 1
+  fi
+fi
 
 
 #
-# Confirm the release
+# Confirm the branch/release
 #
 cat >&1 << EOF
 
 
-* All checks pass, ready to release ${relBranchVersionDigits}.
+* All checks pass, ready to ${MODE_TXT_LOWER} ${relBranchVersionDigits}.
 
   * The previous version found is: ${prevTagVersionDigits}
     Note: If this is not the version you were expecting, then maybe that
@@ -472,86 +623,118 @@ git clean -fdq
 git reset -q --hard
 
 
-#
-# Update the versions for release
-#
-echo "Updating the version to ${relBranchVersionDigits}..."
-updateVersions "${relBranchVersionDigits}"
-commitChanges 1 "Release ${relTagVersion}"
+if [[ "${mode}" == "${MODE_BRANCH}" ]]; then
+  #
+  # Update the versions for branch
+  #
+  echo "Updating the version to pre-${relBranchVersionDigits}..."
+  updateVersions "pre-${relBranchVersionDigits}"
+  commitChanges 1 "${MODE_TXT} ${relTagVersion}"
+  masterWasUpdated=1
 
+  # create release branch
+  echo "Creating the release branch ${relBranch}..."
+  git branch "${relBranch}"
 
 
-#
-# Generate the changelog
-#
-echo "Generating the changelog..."
-declare src="CHANGELOG"
-declare dst="mktemp -q -p . -t "${src}.XXXXXXXXXX""
-cat > "${dst}" << EOF
+  #
+  # Update the version to the next release
+  #
+  echo "Updating the version to pre-${relBranchVersionDigitsNextMicro}..."
+  updateVersions "pre-${relBranchVersionDigitsNextMicro}"
+  commitChanges 0 "Update version after ${MODE_TXT_LOWER} of ${relTagVersion}"
+else
+  #
+  # Update the versions for release
+  #
+  echo "Updating the version to ${relBranchVersionDigits}..."
+  updateVersions "${relBranchVersionDigits}"
+  commitChanges 1 "${MODE_TXT} ${relTagVersion}"
+
+
+  #
+  # Generate the changelog
+  #
+  echo "Generating the changelog..."
+  declare src="CHANGELOG"
+  declare dst="mktemp -q -p . -t "${src}.XXXXXXXXXX""
+  cat > "${dst}" << EOF
 ${relBranchVersionDigits} -------------------------------------------------------------------
 
 EOF
-git rev-list --pretty=short "${prevRelTagVersion}..HEAD" | \
-  git shortlog -w80 -- >> "${dst}"
-cat "${src}" >> "${dst}"
-mv "${dst}" "${src}"
-set +e
-git add "${src}"
-set -e
-commitChanges 1 "Release ${relTagVersion}"
+  git rev-list --pretty=short "${prevRelTagVersion}..HEAD" | \
+    git shortlog -w80 -- >> "${dst}"
+  cat "${src}" >> "${dst}"
+  mv "${dst}" "${src}"
+  set +e
+  git add "${src}"
+  set -e
+  commitChanges 1 "${MODE_TXT} ${relTagVersion}"
 
 
-#
-# Tag the release
-#
-echo "Tagging ${relTagVersion}..."
-set +e
-git tag -d "${relTagVersion}" &> /dev/null
-set -e
-git tag -s -m "OLSRd release ${relBranchVersionDigits}" "${relTagVersion}"
+  #
+  # Tag the release
+  #
+  echo "Tagging ${relTagVersion}..."
+  set +e
+  git tag -d "${relTagVersion}" &> /dev/null
+  set -e
+  git tag -s -m "OLSRd release ${relBranchVersionDigits}" "${relTagVersion}"
 
 
-#
-# Update the version to the next release
-#
-echo "Updating the version to pre-${relBranchVersionDigitsNextPatchLevel}..."
-updateVersions "pre-${relBranchVersionDigitsNextPatchLevel}"
-commitChanges 1 "Update version after release of ${relTagVersion}"
+  #
+  # Update the version to the next release
+  #
+  echo "Updating the version to pre-${relBranchVersionDigitsNextPatchLevel}..."
+  updateVersions "pre-${relBranchVersionDigitsNextPatchLevel}"
+  commitChanges 1 "Update version after ${MODE_TXT_LOWER} of ${relTagVersion}"
 
 
-#
-# Update the version (on the master branch) to the next release
-#
-echo "Updating the version to pre-${relBranchVersionDigitsNextMicro} on the master branch..."
-git checkout -q master
-git clean -fdq
-git reset -q --hard
-updateVersions "pre-${relBranchVersionDigitsNextMicro}"
-commitChanges 0 "Update version after release of ${relTagVersion}"
-git checkout -q "${relBranch}"
-git clean -fdq
-git reset -q --hard
+  #
+  # Update the version (on the master branch) to the next release
+  #
+  echo "Updating the version to pre-${relBranchVersionDigitsNextMicro} on the master branch..."
+  git checkout -q master
+  git clean -fdq
+  git reset -q --hard
+
+  declare oldMasterVersion="$(getVersionFromMakefile)"
+  declare newMasterVersion="${relBranchVersionDigitsNextMicro}"
+  checkVersionIncrementing "${oldMasterVersion}" "${newMasterVersion}" 0
+  if [[ ${checkVersionIncrementingResult} -ne 0 ]]; then
+    echo "* Skipped updating the version on the master branch:"
+    echo "  The new version ${newMasterVersion} is not greater than the previous version ${oldMasterVersion}"
+  else
+    updateVersions "pre-${relBranchVersionDigitsNextMicro}"
+    commitChanges 0 "Update version after ${MODE_TXT_LOWER} of ${relTagVersion}"
+    masterWasUpdated=1
+  fi
 
+  git checkout -q "${relBranch}"
+  git clean -fdq
+  git reset -q --hard
 
-#
-# Make the release tarballs
-#
-echo "Generating the release tarballs..."
-declare tarFile="${scriptDir}/olsrd-${relBranchVersionDigits}.tar"
-declare tarGzFile="${tarFile}.gz"
-declare tarBz2File="${tarFile}.bz2"
-git archive --format=tar --output="${tarFile}" "${relTagVersion}"
-gzip   -c "${tarFile}" > "${tarGzFile}"
-bzip2  -c "${tarFile}" > "${tarBz2File}"
-rm -f "${tarFile}"
-echo "Generating the release tarball checksums..."
-declare md5File="${scriptDir}/MD5SUM-${relBranchVersionDigits}"
-declare sha256File="${scriptDir}/SHA256SUM-${relBranchVersionDigits}"
-md5sum    "${tarGzFile}" "${tarBz2File}" > "${md5File}"
-sha256sum "${tarGzFile}" "${tarBz2File}" > "${sha256File}"
-echo "Signing the release tarball checksums..."
-signTextFile "${md5File}"
-signTextFile "${sha256File}"
+
+  #
+  # Make the release tarballs
+  #
+  echo "Generating the release tarballs..."
+  declare tarFile="${scriptDir}/olsrd-${relBranchVersionDigits}.tar"
+  declare tarGzFile="${tarFile}.gz"
+  declare tarBz2File="${tarFile}.bz2"
+  git archive --format=tar --prefix="olsrd-${relBranchVersionDigits}/" --output="${tarFile}" "${relTagVersion}"
+  gzip   -c "${tarFile}" > "${tarGzFile}"
+  bzip2  -c "${tarFile}" > "${tarBz2File}"
+  rm -f "${tarFile}"
+  echo "Generating the release tarball checksums..."
+  declare md5File="${scriptDir}/MD5SUM-${relBranchVersionDigits}"
+  declare sha256File="${scriptDir}/SHA256SUM-${relBranchVersionDigits}"
+  md5sum    "${tarGzFile}" "${tarBz2File}" > "${md5File}"
+  sha256sum "${tarGzFile}" "${tarBz2File}" > "${sha256File}"
+  echo "Signing the release tarball checksums..."
+  signTextFile "${md5File}"
+  signTextFile "${sha256File}"
+fi
 
 
 echo "Done."
@@ -562,35 +745,64 @@ echo ""
 echo "==================="
 echo "=   Git Updates   ="
 echo "==================="
-echo "Branch : master"
+if [[ ${masterWasUpdated} -ne 0 ]]; then
+  echo "Branch : master"
+fi
 echo "Branch : ${relBranch}"
-echo "Tag    : ${relTagVersion}"
-echo ""
-echo ""
+if [[ "${mode}" == "${MODE_RELEASE}" ]]; then
+  echo "Tag    : ${relTagVersion}"
+  echo ""
+  echo ""
 
 
-echo "==================="
-echo "= Generated Files ="
-echo "==================="
-cat >&1 << EOF
-${tarGzFile}
+  echo "==================="
+  echo "= Generated Files ="
+  echo "==================="
+  cat >&1 << EOF
 ${tarGzFile}
+${tarBz2File}
 ${md5File}
 ${sha256File}"
 EOF
-echo ""
-echo ""
+fi
 
 
+echo ""
+echo ""
 echo "==================="
 echo "= Manual Actions  ="
 echo "==================="
-echo "1. Check that everything is in order. For example, run:"
-echo "     gitk master ${relBranch} ${relTagVersion} "
-echo "2. Push. For example, run:"
-echo "     git push origin master ${relBranch} ${relTagVersion}"
-echo "3. Upload the generated files to"
-echo "     http://www.olsr.org/releases/${relBranchVersionDigits}"
-echo "4. Add a release article on olsr.org."
-echo ""
+if [[ "${mode}" == "${MODE_RELEASE}" ]]; then
+  echo "1. Check that everything is in order. For example, run:"
+  if [[ ${masterWasUpdated} -ne 0 ]]; then
+    echo "     gitk master ${relBranch} ${relTagVersion}"
+  else
+    echo "     gitk ${relBranch} ${relTagVersion}"
+  fi
+  echo "2. Push. For example, run:"
+  if [[ ${masterWasUpdated} -ne 0 ]]; then
+    echo "     git push origin master ${relBranch} ${relTagVersion}"
+  else
+    echo "     git push origin ${relBranch} ${relTagVersion}"
+  fi
+  echo "3. Upload the generated files to"
+  echo "     http://www.olsr.org/releases/${relBranchVersionDigits}"
+  echo "4. Add a release article on olsr.org."
+  echo ""
+else
+  echo "1. Check that everything is in order. For example, run:"
+  if [[ ${masterWasUpdated} -ne 0 ]]; then
+    echo "     gitk master ${relBranch}"
+  else
+    echo "     gitk ${relBranch}"
+  fi
+  echo "2. Push. For example, run:"
+  if [[ ${masterWasUpdated} -ne 0 ]]; then
+    echo "     git push origin master ${relBranch}"
+  else
+    echo "     git push origin ${relBranch}"
+  fi
+  echo "3. Send a 'release branch created' email to olsr-dev@lists.olsr.org."
+  echo ""
+fi