public static FsEntryFactory getInstance() { return new FsEntryFactory(); }
private static FsEntryFactory getDefaultFsEntryFactory() { return FsEntryFactory.getInstance().filterGalleonPaths(); }
private void initChildren(final FsEntry parent) throws IOException { boolean hasDirs = false; try(DirectoryStream<Path> stream = Files.newDirectoryStream(parent.p)) { for(Path c : stream) { if(!pathFilters.isEmpty() && isFiltered(parent, c.getFileName().toString())) { continue; } hasDirs |= new FsEntry(parent, c).dir; } } if(hasDirs) { for(FsEntry child : parent.getChildren()) { if(!child.dir) { continue; } initChildren(child); } } }
private void persistHashes(ProvisioningRuntime runtime) throws ProvisioningException { final long startTime = System.nanoTime(); final FsEntry root = getDefaultFsEntryFactory().forPath(runtime.getStagedDir()); if (root.hasChildren()) { final Path hashes = LayoutUtils.getHashesDir(runtime.getStagedDir()); try { Files.createDirectories(hashes); } catch (IOException e) { throw new ProvisioningException("Failed to persist hashes", e); } final List<FsEntry> dirs = new ArrayList<>(); persistChildHashes(hashes, root, dirs, hashes); if(!dirs.isEmpty()) { for(int i = dirs.size() - 1; i >= 0; --i) { persistDirHashes(hashes, dirs.get(i), dirs); } } } if(log.isVerboseEnabled()) { final long timeMs = (System.nanoTime() - startTime) / 1000000; final long timeSec = timeMs / 1000; log.print("Hashing took %d.%d seconds", timeSec, (timeMs - timeSec * 1000)); } }
public FsEntry forPath(Path p) throws ProvisioningException { final FsEntry entry = new FsEntry(null, p); if(entry.dir) { try { initChildren(entry); } catch (IOException e) { throw new ProvisioningException(Errors.fsEntryInit(p), e); } } return entry; }
final FsEntry originalState = new FsEntry(null, hashesDir); readHashes(originalState, new ArrayList<>()); final FsEntry currentState = getDefaultFsEntryFactory().forPath(getInstallationHome()); return FsDiff.diff(originalState, currentState); rt.provision(); final FsEntryFactory fsFactory = getDefaultFsEntryFactory(); final FsEntry originalState = fsFactory.forPath(rt.getStagedDir()); final FsEntry currentState = fsFactory.forPath(getInstallationHome()); final long startTime = System.nanoTime(); final FsDiff fsDiff = FsDiff.diff(originalState, currentState);