#!/bin/bash

# Copyright 2015 The Android Open Source Project
#
# Licensed 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.

. $(dirname "$0")/utils/common.shi

shell_import utils/option_parser.shi

PRODUCT=AndroidEmulator
STAGING_URL=https://clients2.google.com/cr/staging_symbol # staging
PROD_URL=https://clients2.google.com/cr/symbol # production


###
###  COMMAND LINE PARSING
###

OPT_SYMBOL_DIR=
option_register_var "--symbol-dir=<path>" OPT_SYMBOL_DIR \
       "Path to Breakpad symbol dir."

OPT_CRASH_STAGING=
option_register_var "--crash-staging" OPT_CRASH_STAGING \
       "Upload crashes to staging."

OPT_CRASH_PROD=
option_register_var "--crash-prod" OPT_CRASH_PROD \
       "Upload crashes to production."


PROGRAM_DESCRIPTION=\
"Uploads a symbol directory to either staging or production crash server

Use --crash-prod or --crash-staging to select between servers

Use --symbol-dir to provide symbol directory

Symbol directory contains any structure of *.sym files:"

option_parse "$@"

SYMBOL_DIR=
if [ -z "$OPT_SYMBOL_DIR" ]; then
  panic "--symbol-dir=<path> is required"
else
  SYMBOL_DIR="$OPT_SYMBOL_DIR"
fi

if [ "$OPT_CRASH_PROD" ] && [ "$OPT_CRASH_STAGING" ]; then
  panic "Can not use both --crash-staging and --crash-prod at the same time"
fi

if [ -z "$OPT_CRASH_PROD" ] && [ -z "$OPT_CRASH_STAGING" ]; then
  panic "Must use either --crash-staging or --crash-prod"
fi

URL=
if [ "$OPT_CRASH_PROD" ]; then
  URL=$PROD_URL
else
  URL=$STAGING_URL
fi

process_symbol () {
    SYMBOL_FILE="$1"
    LINE=$(sed -n -e 1p "$SYMBOL_FILE")
    read MODULE OS ARCH DEBUG_IDENTIFIER DEBUG_FILE <<<"$LINE"
    if [ "$MODULE" != MODULE ]; then
        panic "Corrupt symbol file $SYMBOL_FILE"
    fi

    CODE_FILE=$DEBUG_FILE
    CODE_IDENTIFIER=$DEBUG_IDENTIFIER

    echo -n -e curl \
        --show-error \
        --silent \
        --dump-header /dev/null \
        --form product="$PRODUCT" \
        --form codeFile="$CODE_FILE" \
        --form codeIdentifier="$CODE_IDENTIFIER" \
        --form debugFile="$DEBUG_FILE" \
        --form debugIdentifier="$DEBUG_IDENTIFIER" \
        --form symbolFile="@$SYMBOL_FILE" \
        "$URL" \
        "\0"
}

process_dir () {
    find $SYMBOL_DIR -type f -print0 -name "*.sym" | while read -d $'\0' file; do
        process_symbol $file
    done
}

process_dir | xargs -0 -n1 -P 5 -t bash -c
