# 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.


# This file makes it easier to post review requests to ReviewBoard.
# Assuming you already have RBTools installed you can post a review
# request with the following command:
#
# % rbt post
#
# The RBTools docs (including installation instructions) are located here:
# http://www.reviewboard.org/docs/rbtools
#
# Note: This may not work correctly if $HOME/.reviewboardrc exists.

REPOSITORY='hive-git'
REVIEWBOARD_URL='https://reviews.apache.org'
TRACKING_BRANCH='origin/master'
TARGET_GROUPS='hive'
GUESS_FIELDS='yes'
