/* * The Kuali Financial System, a comprehensive financial management system for higher education. * * Copyright 2005-2014 The Kuali Foundation * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.util.HashSet; import java.util.regex.Pattern; public class PartialMergeHelper { static final Pattern fileBreakPattern = Pattern.compile("^Index: "); public static void main(String[] args) throws Exception { String partialMergeDiffFileName = args[0]; String completeMergeDiffFileName = args[1]; String mergeRemainderDiffFileName = args[2]; HashSet<String> filesInPartialMerge = new HashSet<String>(); // first, go through the partial merge file and extract all the updated file names // build a list of the file break patterns and save in a HashSet File partialMergeFile = new File( partialMergeDiffFileName ); System.out.println( "Partial Merge file: " + partialMergeFile.getAbsolutePath() ); BufferedReader r = new BufferedReader(new FileReader( partialMergeFile ) ); String line; while ( (line = r.readLine()) != null ) { if ( fileBreakPattern.matcher(line).find() ) { System.out.println( "Adding to partial merge file list: " + line ); filesInPartialMerge.add(line); } } // second, loop over the complete merge file, suppressing any entries which appear in the // first merge file File inputFile = new File( completeMergeDiffFileName ); System.out.println( "Attemping to read from file: " + inputFile.getAbsolutePath() ); File outputFile = new File ( mergeRemainderDiffFileName ); System.out.println( "Output file: " + outputFile.getAbsolutePath() ); r = new BufferedReader(new FileReader( inputFile ) ); BufferedWriter w = new BufferedWriter( new FileWriter(outputFile) ); boolean inFileSuppressionMode = false; int suppressionLineCount = 0; while ( (line = r.readLine()) != null ) { if ( fileBreakPattern.matcher(line).find() ) { // if ( inFileSuppressionMode ) { // System.out.println( "Completing File Suppression. Lines Removed: " + suppressionLineCount ); // } inFileSuppressionMode = false; System.out.println( "Found File Break: " + line ); if ( filesInPartialMerge.contains(line) ) { System.out.println( " HAS ALREADY BEEN MERGED - SUPPRESSING OUTPUT" ); inFileSuppressionMode = true; suppressionLineCount = 0; } } if ( !inFileSuppressionMode ) { w.write(line); w.newLine(); } else { suppressionLineCount++; } } if ( inFileSuppressionMode ) { System.out.println( "Completing File Suppression. Lines Removed: " + suppressionLineCount ); } r.close(); w.close(); } }