xref: /OpenGrok/opengrok-indexer/src/main/java/org/opengrok/indexer/history/FileCollector.java (revision 5650cf1579547c2f9158c047af5b8af27ab2e6d3)
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 }