#!/bin/sh

# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

export CENTRAL_HOST=maven01.managed.contegix.com
export TOOLS_BASE=$HOME/bin
export SYNC_TOOLS=$TOOLS_BASE/synchronize
export SYNCOPATE=$SYNC_TOOLS/syncopate
export M2_SYNC=$SYNC_TOOLS/m2-sync
export REPOCLEAN=$TOOLS_BASE/m1-m2-conversion
export CONVERSION_PROPERTIES=$REPOCLEAN/conversion.properties
export M1_M2_REWRITE_RULES=$SYNC_TOOLS/m1-m2-mod-rewrite-rules.txt
export SYNC_REPORTS=$HOME/repository-staging/reports/sync
export JAVA_HOME=/opt/java/sdk/current
export JAVA_CMD=$JAVA_HOME/bin/java
export JAVA_OPTS="-Xms32m -Xmx2048m"
export JAVA="$JAVA_CMD $JAVA_OPTS"

export STAGING_DIR=$HOME/repository-staging/to-ibiblio
export MAVEN1_REPO=$STAGING_DIR/maven
export MAVEN2_REPO=$STAGING_DIR/maven2


# ibiblio.org
export IBIBLIO_SYNC_HOST=login.ibiblio.org
export M1_IBIBLIO_SYNC_DIR=/public/ftp/pub/packages/maven
export M2_IBIBLIO_SYNC_DIR=/export/mirrors/maven2

# cica.es
export CICA_USERNAME=m-maven
export CICA_SYNC_HOST=ftp.cica.es
export M2_CICA_SYNC_DIR=/home/m-maven/maven2

# exist.com
export EXIST_USERNAME=ibiblio
export EXIST_SYNC_HOST=central-mirror.maestrodev.com
export M2_EXIST_SYNC_DIR=/home/ibiblio/maven2
