blob: 13a7e60ed360fe4bc70ef0c059db624216a491ee [file] [log] [blame]
# @@@ START COPYRIGHT @@@
#
# 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.
#
# @@@ END COPYRIGHT @@@
#
# This script is useful for resolving merge conflicts in regress
# test expected results files.
#
# Very often a conflict occurs because a test has been updated
# in two branches, and that test has output containing DDL timestamps
# or plan IDs or other unimportant information that varies on every
# regress run. When these are the only differences, the conflict
# resolution is simple: Delete all the HEAD stuff and accept all the
# new stuff. This script does exactly that.
#
# The script looks for lines of the following form:
#
# <<<<<<< HEAD
# -- Definition current Wed Nov 29 08:53:46 2017
# =======
# -- Definition current Wed Dec 6 19:32:34 2017
# >>>>>>> b149874... [TRAFODION-2827] Turn update costing code on by default
#
# When it finds this, it removes the lines from <<<<<< HEAD to ======,
# and removes the final >>>>>> line, leaving just:
#
# -- Definition current Wed Dec 6 19:32:34 2017
#
import os
import sys
import subprocess
import sets
import datetime
import argparse # requires Python 2.7
# The class BeheadMergeConflicts does the heavy lifting
class BeheadMergeConflicts:
#
def __init__(self, FileName):
self.FileName = FileName
self.state = 0
def removeConflicts(self):
try:
f = open(self.FileName)
state = 0
for line in f:
line = line.rstrip('\n') # get rid of trailing return character
if state == 0:
if line == "<<<<<<< HEAD":
state = 1
else:
print line
elif state == 1:
if line == "=======":
state = 2
elif state == 2:
if line.startswith(">>>>>>> "):
state = 0
else:
print line
f.close()
except IOError as detail:
print "Could not open " + self.FileName
print detail
# beginning of main
# process command line arguments
parser = argparse.ArgumentParser(
description='This script removes the "HEAD" part of git merge conflicts.')
parser.add_argument("FileName", help='The name of the file that you wish to remove merge conflicts from.')
args = parser.parse_args() # exits and prints help if args are incorrect
exitCode = 0
conflictBeheader = BeheadMergeConflicts(args.FileName)
conflictBeheader.removeConflicts()
exit(exitCode)