public List<FileEntry> findAll(User user, final String path, Long revision, boolean recursive) {
		SVNRevision svnRevision = SVNRevision.HEAD;
		if (revision != null && -1L != revision) {
			svnRevision = SVNRevision.create(revision);
		}
		final List<FileEntry> fileEntries = newArrayList();
		SVNClientManager svnClientManager = getSVNClientManager();
		try {
			svnClientManager.getLogClient().doList(SVNURL.fromFile(getUserRepoDirectory(user)).appendPath(path, true),
				svnRevision, svnRevision, true, recursive, dirEntry -> {
					FileEntry script = new FileEntry();
					// Exclude base path "/"
					if (StringUtils.isBlank(dirEntry.getRelativePath())) {
						return;
					}
					script.setPath(FilenameUtils.normalize(path + "/" + dirEntry.getRelativePath(), true));
					script.setCreatedAt(dirEntry.getDate().toInstant());
					script.setLastModifiedAt(dirEntry.getDate().toInstant());
					script.setDescription(dirEntry.getCommitMessage());
					script.setRevision(dirEntry.getRevision());
					if (dirEntry.getKind() == SVNNodeKind.DIR) {
						script.setFileType(FileType.DIR);
					} else {
						script.getFileType();
						script.setFileSize(dirEntry.getSize());
					}
					fileEntries.add(script);
				});
		} catch (Exception e) {
			LOG.debug("findAll() to the not existing folder {}", path);
		} finally {
			closeSVNClientManagerQuietly(svnClientManager);
		}
		return fileEntries;
	}
Return all {@link FileEntry}s under the given path.

@param user      user
@param path      path under which files are searched.
@param revision  null if head.
@param recursive true if recursive finding
@return found {@link FileEntry}s
ngrinder-controller/src/main/java/org/ngrinder/script/repository/FileEntryRepository.java