public DatabaseBranch findWinnersApplyBranch(DatabaseBranch losersBranch, DatabaseBranch winnersBranch) { logger.log(Level.INFO, "Finding winnersApplyBranch."); logger.log(Level.INFO, "Losers Branch: " + losersBranch); logger.log(Level.INFO, "Winners Branch: " + winnersBranch); DatabaseBranch winnersApplyBranch = new DatabaseBranch(); boolean applyBranchStarted = false; for (int i = 0; i < winnersBranch.size(); i++) { if (!applyBranchStarted) { if (i >= losersBranch.size() || !losersBranch.get(i).equals(winnersBranch.get(i))) { applyBranchStarted = true; } } if (applyBranchStarted) { winnersApplyBranch.add(winnersBranch.get(i)); } } return winnersApplyBranch; }
public DatabaseBranch findLosersPruneBranch(DatabaseBranch losersBranch, DatabaseBranch winnersBranch) { DatabaseBranch losersPruneBranch = new DatabaseBranch(); boolean pruneBranchStarted = false; for (int i = 0; i < losersBranch.size(); i++) { if (pruneBranchStarted) { losersPruneBranch.add(losersBranch.get(i)); } else if (i < winnersBranch.size() && !losersBranch.get(i).equals(winnersBranch.get(i))) { pruneBranchStarted = true; losersPruneBranch.add(losersBranch.get(i)); } } return losersPruneBranch; }
public static DatabaseBranch createBranch(String[] databaseVersionHeaderStrings) throws Exception { DatabaseBranch branch = new DatabaseBranch(); for (String databaseVersionHeaderString : databaseVersionHeaderStrings) { DatabaseVersionHeader databaseVersionHeader = createFromString(databaseVersionHeaderString); branch.add(databaseVersionHeader); } return branch; }
/** * This methods takes a Map containing DatabaseVersions (headers only) and loads these headers into {@link DatabaseBranches}. * In addition, the local branch is added to this. The resulting DatabaseBranches will contain all headers exactly once, * for the client that created that version. * * @param localBranch {@link DatabaseBranch} containing the locally known headers. * @param remoteDatabaseHeaders Map from {@link DatabaseRemoteFile}s (important for client names) to the {@link DatabaseVersion}s that are * contained in these files. * * @return DatabaseBranches filled with all the headers that originated from either of the parameters. */ private DatabaseBranches populateDatabaseBranches(DatabaseBranch localBranch, SortedMap<DatabaseRemoteFile, List<DatabaseVersion>> remoteDatabaseHeaders) { DatabaseBranches allBranches = new DatabaseBranches(); allBranches.put(config.getMachineName(), localBranch.clone()); for (DatabaseRemoteFile remoteDatabaseFile : remoteDatabaseHeaders.keySet()) { // Populate branches DatabaseBranch remoteClientBranch = allBranches.getBranch(remoteDatabaseFile.getClientName(), true); for (DatabaseVersion remoteDatabaseVersion : remoteDatabaseHeaders.get(remoteDatabaseFile)) { DatabaseVersionHeader header = remoteDatabaseVersion.getHeader(); remoteClientBranch.add(header); } } logger.log(Level.INFO, "Populated unknown branches: " + allBranches); return allBranches; }
private void applyChangesAndPersistDatabase(MemoryDatabase winnersDatabase, boolean cleanupOccurred, List<PartialFileHistory> preDeleteFileHistoriesWithLastVersion) throws Exception { if (options.isApplyChanges()) { new ApplyChangesOperation(config, localDatabase, transferManager, winnersDatabase, result, cleanupOccurred, preDeleteFileHistoriesWithLastVersion).execute(); } else { logger.log(Level.INFO, "Doing nothing on the file system, because --no-apply switched on"); } // We only persist the versions that we have already applied. DatabaseBranch currentApplyBranch = new DatabaseBranch(); for (DatabaseVersion databaseVersion : winnersDatabase.getDatabaseVersions()) { currentApplyBranch.add(databaseVersion.getHeader()); } persistDatabaseVersions(currentApplyBranch, winnersDatabase); localDatabase.commit(); }
winnersBranch.add(potentialWinner);