diff --git a/ide/libs.git/src/org/netbeans/libs/git/jgit/commands/MoveTreeCommand.java b/ide/libs.git/src/org/netbeans/libs/git/jgit/commands/MoveTreeCommand.java index 28060fb839ee..a2f7801883ea 100644 --- a/ide/libs.git/src/org/netbeans/libs/git/jgit/commands/MoveTreeCommand.java +++ b/ide/libs.git/src/org/netbeans/libs/git/jgit/commands/MoveTreeCommand.java @@ -77,23 +77,29 @@ protected void run() throws GitException { } sourceFile = tryNormalizeSymlink(sourceFile); targetFile = tryNormalizeSymlink(targetFile); + Repository repository = getRepository(); + + File repoWorkTreeNormalized = tryNormalizeSymlink(repository.getWorkTree()); + try { DirCache cache = repository.lockDirCache(); try { - List ignoredTargets = getIgnores(targetFile); + + List ignoredTargets = getIgnores(this.source); + boolean retried = false; DirCacheBuilder builder = cache.builder(); TreeWalk treeWalk = new TreeWalk(repository); - PathFilter sourceFilter = PathFilter.create(Utils.getRelativePath(repository.getWorkTree(), sourceFile)); - PathFilter targetFilter = PathFilter.create(Utils.getRelativePath(repository.getWorkTree(), targetFile)); + PathFilter sourceFilter = PathFilter.create(Utils.getRelativePath(repoWorkTreeNormalized, sourceFile)); + PathFilter targetFilter = PathFilter.create(Utils.getRelativePath(repoWorkTreeNormalized, targetFile)); treeWalk.setFilter(PathFilterGroup.create(Arrays.asList(sourceFilter, targetFilter))); treeWalk.setRecursive(true); treeWalk.reset(); treeWalk.addTree(new DirCacheBuildIterator(builder)); while (treeWalk.next() && !monitor.isCanceled()) { String path = treeWalk.getPathString(); - File file = new File(repository.getWorkTree().getAbsolutePath() + File.separator + path); + File file = new File(repoWorkTreeNormalized.getAbsolutePath() + File.separator + path); DirCacheEntry e = treeWalk.getTree(0, DirCacheBuildIterator.class).getDirCacheEntry(); if (e != null) { if (targetFilter.include(treeWalk)) { @@ -118,8 +124,8 @@ protected void run() throws GitException { // reset whole iterator and start from the beginning sourceFile = sourceFile.getCanonicalFile(); targetFile = targetFile.getCanonicalFile(); - sourceFilter = PathFilter.create(Utils.getRelativePath(repository.getWorkTree(), sourceFile)); - targetFilter = PathFilter.create(Utils.getRelativePath(repository.getWorkTree(), targetFile)); + sourceFilter = PathFilter.create(Utils.getRelativePath(repoWorkTreeNormalized, sourceFile)); + targetFilter = PathFilter.create(Utils.getRelativePath(repoWorkTreeNormalized, targetFile)); treeWalk.setFilter(PathFilterGroup.create(Arrays.asList(sourceFilter, targetFilter))); treeWalk.reset(); builder = cache.builder(); @@ -185,7 +191,9 @@ private void rename () throws GitException { private String getRelativePath (File file, File ancestor, File target) { String relativePathToAncestor = Utils.getRelativePath(ancestor, file); - StringBuilder relativePathToSource = new StringBuilder(Utils.getRelativePath(getRepository().getWorkTree(), target)); + StringBuilder relativePathToSource = new StringBuilder( + Utils.getRelativePath(tryNormalizeSymlink(getRepository().getWorkTree()), target) + ); if (!relativePathToAncestor.isEmpty()) { if (relativePathToSource.length() > 0) { relativePathToSource.append("/"); //NOI18N