#!/usr/bin/env python

# Copyright 2012 Google, Inc. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY GOOGLE INC. ``AS IS'' AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 

# This script is intended to support the GitHub workflow described here:
# https://trac.webkit.org/wiki/UsingGitHub
#
# This script fetches the latest changes from upstream, and pushes those
# changes to the master branch in origin (e.g., your GitHub fork of WebKit).
#
# Running this script periodically will keep your fork of WebKit on GitHub in
# sync with the "root" WebKit repository in upstream, assuming you've run
# configure-github-as-upstream

import subprocess

def run(args, error_message = None):
    if subprocess.call(args) != 0:
        if error_message:
            print error_message
        exit(1)

run(["git", "fetch", "upstream"], "Have you run configure-github-as-upstream to configure an upstream repository?")
run(["git", "push", "origin", "upstream/master:master"])
print "\nConsider running 'git merge origin' to update your local branches."
