+ parentDir = targetBase + '/'
+ + relPath.substring(0, lastIndexSubDir);
+ else
+ parentDir = targetBase;
+
+ boolean skipDir = false;
+ registerDirs: for (String registeredDir : new ArrayList<String>(
+ subDirs)) {
+ if (parentDir.equals(registeredDir)) {
+ if (log.isTraceEnabled())
+ log.trace("Already registered, skip " + parentDir);
+ skipDir = true;
+ break registerDirs;
+ }
+
+ if (parentDir.startsWith(registeredDir))
+ if (subDirs.contains(registeredDir)) {
+ subDirs.remove(registeredDir);
+ if (log.isTraceEnabled())
+ log.trace("Remove parent " + registeredDir + " of "
+ + parentDir);
+ continue registerDirs;
+ }
+
+ if (registeredDir.startsWith(parentDir)) {
+ skipDir = true;
+ if (log.isTraceEnabled())
+ log.trace("Skip " + parentDir
+ + " because child already registered.");
+ break registerDirs;
+ }
+ }
+
+ if (!subDirs.contains(parentDir) && !skipDir) {
+ subDirs.add(parentDir);
+ }
+
+ targetPaths.put(relPath, targetBase + "/" + relPath);
+ }
+
+ // checksum
+ List<String> targetPathsEqualsToLocal = new ArrayList<String>();
+ if (checksum != null) {
+ Map<String, String> remoteChecksums = new HashMap<String, String>();
+ List<String> csLines = new ArrayList<String>();
+ String csExecutable;
+ if ("MD5".equals(checksum))
+ csExecutable = "/usr/bin/md5sum";
+ else if ("SHA".equals(checksum))
+ csExecutable = "/usr/bin/sha1sum";
+ else if ("SHA-256".equals(checksum))
+ csExecutable = "/usr/bin/sha256sum";
+ else if ("SHA-512".equals(checksum))
+ csExecutable = "/usr/bin/sha512sum";