1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * See LICENSE.txt included in this distribution for the specific 9 * language governing permissions and limitations under the License. 10 * 11 * When distributing Covered Code, include this CDDL HEADER in each 12 * file and include the License file at LICENSE.txt. 13 * If applicable, add the following below this CDDL HEADER, with the 14 * fields enclosed by brackets "[]" replaced with your own identifying 15 * information: Portions Copyright [yyyy] [name of copyright owner] 16 * 17 * CDDL HEADER END 18 */ 19 20 /* 21 * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. 22 */ 23 package org.opengrok.indexer.history; 24 25 import java.util.Collection; 26 import java.util.SortedSet; 27 import java.util.TreeSet; 28 29 /** 30 * This class is meant to collect files that were touched in some way by SCM update. 31 * The visitor argument contains the files separated based on the type of modification performed, 32 * however the consumer of this class is not interested in this classification. 33 * This is because when incrementally indexing a bunch of changesets, 34 * in one changeset a file may be deleted, only to be re-added in the next changeset etc. 35 */ 36 public class FileCollector extends ChangesetVisitor { 37 private final SortedSet<String> files; 38 39 /** 40 * Assumes comparing in the same way as {@code org.opengrok.indexer.index.IndexDatabase#FILENAME_COMPARATOR}. 41 */ FileCollector(boolean consumeMergeChangesets)42 public FileCollector(boolean consumeMergeChangesets) { 43 super(consumeMergeChangesets); 44 files = new TreeSet<>(); 45 } 46 accept(RepositoryWithHistoryTraversal.ChangesetInfo changesetInfo)47 public void accept(RepositoryWithHistoryTraversal.ChangesetInfo changesetInfo) { 48 if (changesetInfo.renamedFiles != null) { 49 files.addAll(changesetInfo.renamedFiles); 50 } 51 if (changesetInfo.files != null) { 52 files.addAll(changesetInfo.files); 53 } 54 if (changesetInfo.deletedFiles != null) { 55 files.addAll(changesetInfo.deletedFiles); 56 } 57 } 58 getFiles()59 public SortedSet<String> getFiles() { 60 return files; 61 } 62 addFiles(Collection<String> files)63 void addFiles(Collection<String> files) { 64 this.files.addAll(files); 65 } 66 }