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)); } }
final Map<String, Boolean> undoTasks = StateHistoryUtils.readUndoTasks(home, log); if (!undoTasks.isEmpty()) { final Path staged = runtime.getStagedDir(); for (Map.Entry<String, Boolean> entry : undoTasks.entrySet()) { final Path stagedPath = staged.resolve(entry.getKey()); undoTasks = FsDiff.replay(fsDiff, runtime.getStagedDir(), log); PathsUtils.replaceDist(runtime.getStagedDir(), home, undo, undoTasks, log); } finally { this.provisioningConfig = null;
rt.provision(); final FsEntryFactory fsFactory = getDefaultFsEntryFactory(); final FsEntry originalState = fsFactory.forPath(rt.getStagedDir()); final FsEntry currentState = fsFactory.forPath(getInstallationHome()); final long startTime = System.nanoTime();